alicelmx 2019-12-07
前言
这篇主要是记录一下之前看到的一个公开课视频内容,大体讲解的是Redis各种数据结构的应用场景;
如视频所说,一些中小型公司使用Redis的应用场景比较单一, 使用的数据结构大部分是string,或者是hash, 其他数据结构基本使用的很少, 至少我呆过的公司目前是这样的,尴尬!!!
数据结构
Redis中基本的五种数据结构,分别是字符串string、哈希hash、列表list、集合set、有序集合zset,各种数据结构基本使用请参考http://redisdoc.com/,这里就主要记录应用场景,数据存放结构如下图:
String 结构--具体命令使用参考http://redisdoc.com/string/
String应用场景
Session共享,根据编程环境提供的对应的RedisSession库可以实现Session共享,这里应该都使用过;
对象缓存,相信很多小伙伴和我一样,也是用Json字符串或者Hash存储, 其实这里说的用MSET和MGET也是一个不错的选择;
分布式锁,主要利用SETNX命令限制,<span>SETNX</span>
是『SET if Not eXists』(如果不存在,则 SET)的简写,但光用这个远远不够,还需要考虑业务其他相关场景;
计数器,主要用作文章的浏览次数,页面访问量等;
Hash数据结构 具体命令使用参考http://redisdoc.com/hash/index.html
Hash应用场景
做对象缓存
电商购物车
每个人的购物车,以用户id为key,商品id为field,商品数量为value,其他信息可以通过商品id到数据库中获取详细信息,前端异步调用接口即可。
Hash优缺点:
List 数据结构 --具体命令使用参考http://redisdoc.com/list/index.html
List应用场景
通过命令组合,和模拟实现常用数据结构,栈、队列、阻塞队列
实现模拟
消息流,关注多个人,消息时间不一样,后台会根据发送消息时间顺序,定时给每个关注用户一条一条发信息,而不是一下发送。
Set数据结构--具体命令参考http://redisdoc.com/set/index.html
Set应用场景
抽奖活动ID为LuckyDraw,点击参与抽奖的时候,将对应用户加到抽奖集合中,通过SMEMBERS 抽奖活动ID 获取参与人数,通过SRANDMEMBER 抽奖活动ID或SPOP 抽奖活动ID 进行抽奖。 这样的设计真的比用程序方便多,之前做过一个抽奖程序,用代码和数据库实现,做的东西挺多的。
这里是把所有维度的内容都预先加载到集合中,然后通过集合运算进行过滤,这里只是一种思路,真正这样做的话其实得考虑可行性。
有序集合zset数据结构--具体命令请参考http://redisdoc.com/sorted_set/index.html
有序集合zset的使用场景
总结
Redis基本的数据结构应用场景先记录那么多,以上记录的使用场景,我觉得给大家提供的是一种思路,希望大家不要局限于这些,大家根据自己的业务使用吧!!!