Redis五种数据结构-常用命令
Redis 常用命令
五种数据结构
String
-
字符串常用操作
set key value //存入字符串键值对 mset key value [key value ...] //批量存储字符串键值对 setnx key value //存入一个不存在的字符串键值对 get key //获取一个字符串的建值 mget key [key ...] //批量获取字符串键值 del key [key ...] //删除一个键 expire key seconds //设置一个键的过期时间(秒)
-
原子加减
incr key //将key中存储的数字值加1 decr key //将key中存储的数字值减一 incrby key increment //将key所存储的值加上 increment decrby key decrement //将key所存储的值减去 decrement
String 应用场景
-
单值缓存
set key value
get key
-
对象存储
set user value(json数据)
mset user1 value1 user2 value2
mget user1 user2
-
分布式锁
setnx product:10001 true //返回1代表获取锁成功
setnx product:10001 true //返回0代表获取锁失败
…执行业务操作
del product:10001 //执行完业务释放锁
set product:10001 true ex 10 nx //防止程序意外终止导致死锁
-
计数器
incr key
get key
-
Web 集群 session 共享
spring session +redis 实现session共享
-
分布式系统全局序列号
incrby orderid 1000 //可以考虑 redis批量生产序列号提升性能
Hash
-
hash常用操作
hset key field value //存储一个hash表key的键值 hsetnx key field value //存储一个不存在的hash表key的键值 hmset key field value [field value] //在一个hash表key中存储多个键值对 hget key field //获取hash表key对应的field键值 hmget key field [field ...] //批量获取hash表key对应的field键值 hdel key value //删除hash表key中field键值 hlen key //返回hash表中field的数量 hgetAll key //返回hash表中所有键值
hash应用场景
-
电商购物车
1、以用户id为key
2、商品id为field
3、商品数量为value
- 购物车操作
- 增加商品---->hset uid:1001 10081 1
- 增加数量---->hincrby uid:1001 10088 1
- 商品总数---->hlen uid:1001
- 删除商品---->hdel uid:1001 10088
- 获取购物车所有商品---->hgetall uid:1001
hash结构优缺点
- 优点
- 同类数据归类整合储存,方便数据管理
- 相比string操作消耗内存与cpu更小
- 相比string储存更节省空间
- 缺点
- 过期功能在field上使用不了,只能用在key上
- redis集群架构下不适合大规模使用
List
-
list常用操作
lpush key value [value …] //将一个或多个值value插入到key列表的表头(最左边)
rpush key value [value …] //将一个或多个值value插入到key列表的表尾(最右边)
lpop key //移除并返回key列表的头元素
rpop key //移除并返回key列表的尾元素
lrange key start stop //返回列表key中指定区域内的元素,区间以start 和stop 指定
blpop key [key …] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout为0,一直阻塞等待
brpop key [key …] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout为0,一直阻塞等待。
-
常用数据结构
Stack=lpush+lpop
Queue=lpush+rpop
Blocking MQ=lpush+brpop
list应用场景
-
微博消息和微信公众号消息
-
王小明关注了张三,李四等大V
1、张三发微博,消息id为10001
lpush msg:{张三id} 10001
2、李四发微博,消息id为10002
lpush msg:{李四id} 10002
3、查看最新关注的微博消息
lrange msg:{张三id} 0 4
-
Set
-
set 常用操作
sadd key member [member …]
srem key member [member …]
smembers key //获取集合key的所有元素
scard key //获取集合key的元素个数
sismember key member //判断member元素是否存在与集合key中
srandmember key [count] //从集合key中选出count个元素,元素不从key中删除
spop key [count] //从集合中选出count个元素,元素从key中删除
-
set 运算操作
sinter key [key] //交集运算
sinterstore destination key [key …] //将交集结果存入新集合destination中
sunion key [key] //并集运算
sunionstore destination key [key …] //将并集结果存入新集合destination中
sdiff key [key] 差集运算
sdiffstore destination key [key …] //将差集结果存入新集合destination中
set应用场景
-
微信小程序抽奖
1、点击参与抽奖加入集合
sadd key userid
2、查看参与抽奖的所有人员
smembers key
3、抽取 count名中奖者
srandmember key [count] //不会删除中奖者元素
spop key [count] //会删除中奖者元素
ZSet
- zset常用操作
127.0.0.1:6379> zadd zsetKey 20 zs 50 ls 80 xy //往有序集合key中加入带分值元素
(integer) 3
127.0.0.1:6379> zrem zsetKey zs ls //从有序集合key中删除元素
(integer) 2
127.0.0.1:6379> zscore zsetKey xy //返回有序集合key中元素 zsetKey的分值
"80"
127.0.0.1:6379> zincrby zsetKey 50 xy //为有序集合 zsetKey中元素xy 的分值加50
"130"
127.0.0.1:6379> zcard zsetKey //返回有序集合zsetKey的元素个数
(integer) 1
127.0.0.1:6379> zrange zsetKey 0 5 //正序获取有序集合zsetKey从start 到stop的下标元素
1) "xy"
127.0.0.1:6379> zrevrange zsetKey 0 5//倒序获取有序集合zsetKey从start 到stop的下标元素
2) "xy"
127.0.0.1:6379>
```
ZSet应用场景
-
Zset集合操作实现排行榜
1、点击新闻 数量加一
zincrby hotNew:20220705 1 标题名
2、展示当日排行榜前十
zrevrange hotNews:20220705 0 9
3、七日搜索榜单计算
zunionstore hotNews:20220705-20220712 7 hotNews:20220706 hotNews:20220707 hotNews:20220708 hotNews:20220709 hotNews:202207010 hotNews:202207011 hotNews:202207012
4、展示七日排行前十
zrevrange hotNews:20220705-20220712 0 9
tNews:20220705 0 9
3、七日搜索榜单计算
zunionstore hotNews:20220705-20220712 7 hotNews:20220706 hotNews:20220707 hotNews:20220708 hotNews:20220709 hotNews:202207010 hotNews:202207011 hotNews:202207012
4、展示七日排行前十
zrevrange hotNews:20220705-20220712 0 9