关注微信公众号“虾米聊吧”,每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流。
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
图片摘自网络。
关注微信公众号“虾米聊吧”,获取更多知识资料干货~,一起交流,一起学习~,
一起打卡学习,一起交流进步吧!
微信扫描二维码,关注我的公众号