redis常用数据类型的场景,你真的用对了么?

关注微信公众号“虾米聊吧”,每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流。

 

redis常用数据类型的场景,你真的用对了么?

 

redis常用数据类型包含string、hashmap、list、set、sorted set。

 

string类型

1) 单值缓存

set key value

这个没啥好说的

2) 对象缓存

set  user:1  value(json格式)

3)分布式锁

setnx product:10001  true //返回1代表获取锁成功

setnx product:10001  true //返回0代表获取锁失败

del product:100001       //执行业务完毕删除key释放锁

set product:100001       //设置过期时间(防止程序意外终止导致死锁)

4)redis 分布式session

5)计数器

文章浏览量计数(每浏览一次文章浏览量+1)

incr article:readcount:{文章id}

6)分布式全局id序列号

可以通过redis提前批量生产唯一序列号提升性能,比如高并发下的订单id序列

incrby orderId 100001        

 

hash类型

1) 对象存储

hset key field value

hset user {userId}  {user object}

 

hash类的数据结构,主要用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

 

典型场景:用户购物车

 

 

list类型

注:list是一个有序列表,使用得好是可以玩出很多花样的

使用场景1:栈、队列

 

使用场景2:微博大V粉丝列表,微博关注消息推送,订阅号关注消息推送等

 

key=大v  value=[a,b,c…]

可以用list存储一些列表型的数据结构,如:粉丝列表、文章评论列表之类。

另外可以通过lrange命令,从某个元素开始读取某段范围的数据,可以基于list实现分页查询,基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的效果,性能很高。

 

set类型

注:set集合是一个无序集合,自动去重,因此可以通过set做数据的全局去重。

使用场景1:微信抽奖小程序

srandmember key [count]:从集合中随机获取count名用户(不会删除)

spop key [count]:随机从集合中移除并返回这个被移除的元素

 

使用场景2:微信微博点赞、收藏、标签

使用场景3:关注模型

 

通过sdiff、sinter、sunion实现集合的交集(比如微博的共同关注列表)、并集差集(可能感兴趣的人)等

 

 

sorted set类型

这是一个排序的set,可以去重也可以排序,比如存储的时候设置一个分数,则可以自动根据分数排序,最大的特点就是有个分数可以通过自定义排序规则。

最常见的使用场景:排行榜

即将每个用户以及对应的分数写入,就可以获取top 10的用户,也可以获取到排行榜里的排名情况。

命令:zadd、zrevrange

 

图片摘自网络。

 

关注微信公众号“虾米聊吧”,获取更多知识资料干货~,一起交流,一起学习~,

一起打卡学习,一起交流进步吧!

微信扫描二维码,关注我的公众号

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值