Redis中的常用数据结构

目录

String类型

Hash类型

List类型

Set类型

SortedSet类型

全局命令

集合中的交并补


String类型

java 复制代码
//set,get型

set key value

get key

//设置一个10s后过期的键值对  ex单位是s

set key value ex 10 或者 setex key 10 value

//设置一个10ms后过期的键值对  px单位是ms

set key value px 10 或者 psetex key 10 value

//当不存在key时,才可以存储,相当于唯一插入,nx标识

set key value nx;  或者 setnx key value;

//当存在key时,才可以设置,相当于更新操作,xx标识

set key value xx;

//一次存储或获取多个key,value,减少网络通信次数,mset,mget

mset key1 value1 key2 value2 key3 value3;

mget key1 key2 key3;

加减运算命令

1.针对value为Integer类型

java 复制代码
incr key  //加一操作

decr key //减一操作

incrby key 10   //加10   

incrby key -10  //减10  或者使用decrby

2.针对小数

java 复制代码
incrbyfloat key 1.1 

incrbyfloat key -1.1

Hash类型

相当于一种key key value.

java 复制代码
hset,hget

hset user id 1

hget user id

hexists user id  是否存在KK

hdel user id user name...  //删除一个或多个KK

hkeys user  //查找K对应的所有K(filed)

hvals user  //查找KK对应的所有value

hgetall user //查找K对应的所有key-value键值对

hmset ,hmget //一次设置或查找多个Hash类型的键值对

hmset user id 1 username lisi password 111

hmget user id username password   //得到多个value

hlen user //获取指定哈希表中键值对的个数   

hsetnx user id      //即id这个filed不存在才能插入

//对hash表中的value进行加减运算

hincrby user id 1 //针对Integer类型

hincrbyfloat user money  1.1   //针对小数类型

hstrlen user id  //获取value的长度

List类型

本质上是数组,顺序表,redis中的list对数组提供了头插(lpush),头删(lpop),未插(rpush),尾删(rpop)。更像是一个双端队列。使用下标进行操作,元素可以重复,有顺序。

java 复制代码
lpush key value1 value2 ...  //头插

lrange id 0 -1 //查找列表id的所有value 范围查找, -1 表示最后一个元素  

lindex key 0  //查找下标为0的value

linsert id before/after 2 10   ///在2的前面或后面插入一个10 如果指定的元素在list中是有多个的。则linsert会从左到右找到第一个元素进行操作。

lpushx,rpushx //当指定List数组存在时,才能插入

lrem id 5 1  //删除元素1,并且删除个数为5个。删除指定元素及元素的个数 List是可以重复的

5的正负代表删除的方向,正数是从左到右找并删除,负数是从右到左找并删除。

ltrim id start end //截取并更新原value,闭区间

lset id 2 10 //将下标为2的元素更新为10 下标越界会报错

llen id //获取指定列表中元素的个数

blpop brpop 带有阻塞性质的出队操作。

在列表有元素的情况下,和lpop,rpop表现是一样的。但如果列表中没有元素,非阻塞版本会立即返回nil,阻塞版本会等待阻塞一段时间timeout,若list中还是没有添加新的元素,才会返回nil。若在等待时间内有了新元素,则会立即返回,解除等待。并且阻塞期间也是可以执行其他命令。当 list 处于阻塞时,这时有多个客户端访问命令,后面list添加新元素了,会先来先到。

并且这个超时等待时间是可以代码手动设置的,如下,获取过期时间为60s

blpop id 60 即pop之前没有元素,会阻塞等待60s,60s内有元素进来,则弹出去,没有就返回空。

Set类型

Set集合中的元素具有唯一性,无序性

java 复制代码
sadd id 1 2 3 4 5... //向id集合中插入多个元素 元素若重复,只插入一个

smembers id     //查看id集合中所有的元素

sismember id 1   //查看id集合中元素1是否存在

spop [count]  //删除count个元素的个数

srandmember key [count]  //随机从集合中返回一个或多个元素。

smove key1 key2 member  //将一个元素member从集合key1中移动到key2中,具体过程是key1中删除这个元素,key2中添加这个元素。

srem key member1,member2... //从集合中一次性删除一个或多个元素

scard key //得到指定集合中元素的个数

SortedSet类型

有序集合,引入了score属性,就是按照这个分数进行排序(升序),元素有序,不重复

zadd key NX\|XX CH INCR score member score member ... 可以一次性插入多个

XX:更新操作,该元素之前存在才操作

NX:插入操作,即该元素之前不存在才操作

INCR: 修改元素对应的分数做加法/减法运算

java 复制代码
zrange key 0 -1 [withscores]  //查找范围内的元素,有withscores还会返回对应的分数

zrevrange key 0 -1 [withscores] //同上,逆序输出。即降序。

zcard key //获取集合中所有元素的个数

zcount key minscore maxscore //通过一个分数区间,返回在区间内的member个数,闭区间

若想要开区间,加左括号 zcount key (minscore (maxscore

zrangebyscore key minscore maxscore //同上,也是指定一个分数区间,但返回值不同,返回的是集合的元素,而非个数

zpopmax/zpopmin key count  // 删除并返回分数最高/最低的count个元素。

bzpopmax/bzpopmin key timeout //带有阻塞性质的删除元素,超时等待,可以设置超时时间

zrank  //获取到指定元素的排名(下标)

zrevrank  //也是获取到指定元素的下标

zscore key member //根据指定的member查找并返回score分数

zrem key member1 member2.. //删除有序集合中的一个或多个元素

zremrangebyrank  //指定一个区间(下标),对这个闭区间内的所有元素进行删除

zremrangebyscore //同上 指定一个区间(分数score),对这个闭区间内的所有元素进行删除

zincrby //给指定的元素member对应的score加一个数字,即修改分数

全局命令

java 复制代码
flushall     //删除所有数据库的所有键值对

keys *            //获取所有的key

del key1 key2...  // 删除一个或多个key

exists key       //是否存在key

ttl key         // key的存活时间 单位s -1表示不会过期  -2 表示已经过期

pttl key        //key的存活时间 单位ms -1表示不会过期  -2 表示已经过期

expire key 60       //设置key的存活时间 单位s

pexpire key 1000     //设置key的存活时间 单位ms

type key   //查看key对应的value的类型 如none(查找不存在的key),string,list,set,zset(压缩set),hash,stream(消息队列)等。

object encoding key  //查看key对应value的详细数据类型

集合中的交并补

Clojure 复制代码
sinter key1 key2 key3 ... //对多个集合求交集 返回交集元素

sinterstore destination key1 key2..  //和上面一样也是求交集,不同的是此操作会将交集元素存放在destination这个指定的集合中,返回的是交集元素的个数。

sunion key1 key2... //对多个集合求并集 返回并集元素

//sinterstore 同上

sdiff key1 key2... //对多个集合求差集 返回并集元素

//sinterstore 同上

redis中的数据库是现成的,用户自己不能进行创建,也不能删除,默认redis中有16个数据库,编号0-15,这些数据库之间是相互独立的,我们之前所操作的string,hash,set,zset等都默认是在0号数据库中的。

select 0 表示选择0号数据库。

dbsize 查看当前所在数据库的所有元素个数

flushdb 删除当前数据库的所有元素 工作中禁用

flushall 删除所有数据库中的所有元素 工作中禁用

相关推荐
前端兰博1 小时前
05-Redis
redis·后端
OnlineProxy2 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2013 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_4 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼4 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川5 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路5 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna6 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白6 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库
晚安日记wanna6 小时前
索引建了却不走?7 个失效原因逐层排查
数据库·mysql·性能优化