Redis核心数据结构及应用场景

本文详细介绍了Redis中的五种主要数据类型(String,Hash,List,Set,ZSet)及其基本命令和应用场景,包括单值缓存、对象缓存、分布式锁、计数器、Web集群和排行榜等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. String(字符串)

1.1 基本命令

1.2 应用场景

2. Hash(哈希)

2.1 基本命令

2.2 应用场景

3. list(列表)

3.1 基本命令

3.2 应用场景

4. set(集合)

4.1 基本命令

4.2 应用场景

5. zset(有序集合)

5.1 基本命令

5.2 应用场景


1. String(字符串)

1.1 基本命令

字符串常用操作
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中储存的数字值减1
INCRBY  key  increment         //将key所储存的值加上increment
DECRBY  key  decrement     //将key所储存的值减去decrement 

1.2 应用场景

单值缓存
SET  key  value     
GET  key     

对象缓存
1) SET  user:1  value(json格式数据)
2) MSET  user:1:name  zhangSan   user:1:balance  1888
    MGET  user:1:name   user:1:balance

分布式锁
SETNX  product:10001  true         //返回1代表获取锁成功
SETNX  product:10001  true         //返回0代表获取锁失败
.........执行业务操作
DEL  product:10001            //执行完业务释放锁

SET product:10001 true  ex  10  nx    //防止程序意外终止导致死锁

计数器
INCR article:readcount:{文章id}      
GET article:readcount:{文章id} 

Web集群session共享
spring session + redis实现session共享

分布式系统全局序列号    
INCRBY  orderId  1000        //redis批量生成序列号提升性能 

2. Hash(哈希)

优点
1)同类数据归类整合储存,方便数据管理
2)相比string操作消耗内存与cpu更小
3)相比string储存更节省空间

缺点
过期功能不能使用在field上,只能用在key上
Redis集群架构下不适合大规模使用

2.1 基本命令

Hash常用操作
HSET  key  field  value             //存储一个哈希表key的键值
HSETNX  key  field  value         //存储一个不存在的哈希表key的键值
HMSET  key  field  value [field value ...]     //在一个哈希表key中存储多个键值对
HGET  key  field                 //获取哈希表key对应的field键值
HMGET  key  field  [field ...]         //批量获取哈希表key中多个field键值
HDEL  key  field  [field ...]         //删除哈希表key中的field键值
HLEN  key                //返回哈希表key中field的数量
HGETALL  key                //返回哈希表key中所有的键值

HINCRBY  key  field  increment         //为哈希表key中field键的值加上增量increment

2.2 应用场景

对象缓存
HMSET  user  {userId}:name  zhangSan  {userId}:balance  1888
HMSET  user  1:name  zhangSan  1:balance  1888
HMGET  user  1:name  1:balance  

电商购物车
1)以用户id为key
2)商品id为field
3)商品数量为value

购物车操作
添加商品: hset cart:1001 10088 1
增加数量:hincrby cart:1001 10088 1
商品总数:hlen cart:1001
删除商品:hdel cart:1001 10088
获取购物车所有商品:hgetall cart:100

3. list(列表)

3.1 基本命令

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,一直阻塞等待

3.2 应用场景

常用数据结构
Stack(栈) = LPUSH + LPOP
Queue(队列)= LPUSH + RPOP
Blocking MQ(阻塞队列)= LPUSH + BRPOP

微博和微信公众号消息流 

4. set(集合)

4.1 基本命令

Set常用操作
SADD  key  member  [member ...]            //往集合key中存入元素,元素存在则忽略,若key不存在则新建
SREM  key  member  [member ...]            //从集合key中删除元素
SMEMBERS  key                    //获取集合key中所有元素
SCARD  key                    //获取集合key的元素个数
SISMEMBER  key  member            //判断member元素是否存在于集合key中
SRANDMEMBER  key  [count]            //从集合key中选出count个元素,元素不从key中删除
SPOP  key  [count]                //从集合key中选出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中 

 集合操作

SINTER set1 set2 set3 -> { c }
SUNION set1 set2 set3 -> { a,b,c,d,e }
SDIFF set1 set2 set3 -> { a }

4.2 应用场景

微信抽奖小程序
1)点击参与抽奖加入集合
SADD key {userlD}
2)查看参与抽奖所有用户
SMEMBERS key      
3)抽取count名中奖者
SRANDMEMBER key [count] / SPOP key [count]

微信微博点赞,收藏,标签
1) 点赞
SADD  like:{消息ID}  {用户ID}
2) 取消点赞
SREM like:{消息ID}  {用户ID}
3) 检查用户是否点过赞
SISMEMBER  like:{消息ID}  {用户ID}
4) 获取点赞的用户列表
SMEMBERS like:{消息ID}
5) 获取点赞用户数 
SCARD like:{消息ID} 

集合操作实现微博微信关注模型
1) 张三关注的人: 
zhangSanSet-> {guojia, xushu}
2) 杨过关注的人:
 yangguoSet--> {zhangSan, baiqi, guojia, xushu}
3) 郭嘉关注的人: 
guojiaSet-> {zhangSan, yangguo, baiqi, xushu, xunyu)
4) 我和杨过共同关注: 
SINTER zhangSanSet yangguoSet--> {guojia, xushu}
5) 我关注的人也关注他(杨过): 
SISMEMBER guojiaSet yangguo 
SISMEMBER xushuSet yangguo
6) 我可能认识的人: 
SDIFF yangguoSet zhangSanSet->(zhangSan, baiqi} 

5. zset(有序集合)

5.1 基本命令

ZSet常用操作
ZADD key score member [[score member]…]    //往有序集合key中加入带分值元素
ZREM key member [member …]        //从有序集合key中删除元素
ZSCORE key member             //返回有序集合key中元素member的分值
ZINCRBY key increment member        //为有序集合key中元素member的分值加上increment 
ZCARD key                //返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES]    //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES]    //倒序获取有序集合key从start下标到stop下标的元素

Zset集合操作
ZUNIONSTORE destkey numkeys key [key ...]     //并集计算
ZINTERSTORE destkey numkeys key [key …]    //交集计算  

5.2 应用场景

Zset集合操作实现排行榜
1)点击新闻
ZINCRBY  hotNews:20190819  1  守护香港
2)展示当日排行前十
ZREVRANGE  hotNews:20190819  0  9  WITHSCORES 
3)七日搜索榜单计算
ZUNIONSTORE  hotNews:20190813-20190819  7 
hotNews:20190813  hotNews:20190814... hotNews:20190819
4)展示七日排行前十
ZREVRANGE hotNews:20190813-20190819  0  9  WITHSCORES

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑜伽娃娃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值