redis 应用场景
字符串键-计数器
第一个如图的阅读量或者收藏或者点赞
通过字符串的2个API可以实现
set key 0 //set readcount::{帖子id} 0 设置阅读键
incrby key 1//incrby readcount::{帖子id} 每阅读一次
get key //get readcount::{帖子id} 获取阅读量
如图:
Hash结构键的设计
如下面的图一张表teacher:
Hash键的意义
这个在面试的过程中经常问道
- hash键可以将信息凝聚在一起,而不是直接分散的存储在整个redis中,这不仅方便了数据管理,还可以尽量避免一定的误操作;
- 避免键名冲突
- 减少cpu和内存占用;因为redis定期扫描对最外层的键定期进行维护和管理,比如:过期的键
不适合使用hash键的情况
- 过期功能的使用,过期功能只能使用在key上;
- 二进制的操作命令如:setbit 、getbit、bittop
- 需要考虑数据量分布的问题如下面图,如果用String 会根据计算分布在不同的节点上
而hash 最外层的是一个键比如teacher,里面的数据结构相当于表内容,如果teacher有100万,只能根据最外成的键分布到一个节点上。这个是不允许的。
列表List键
列表键常见操作
如果往list中lpush 键值得时候,最后放进去的,如果取值的话我们会第一个取到。
基于List键,实现阻塞消息队列
基于列表键,实现新浪、Twitter用户消息列表功能
实现了最新的几十条消息或者评论,就可以在消息列表
因为lpush {消息_id} 最新消息列表 在消费获取的是第一个
同样认证了,一个明星的博客,发表一个博文,粉丝瞬间有上百万,关系型数据库是扛不住的
Set
我们可以类比java中的set 无序、唯一(不重复)
集合键常见操作
基于集合键,实现直播刷礼物,转发参加抽奖活动
基于集合键,实现点赞、签到、like等功能
8001 是博客id 1001是用户id
集合Set运算
注意:sinter set1 set2 set3 为什么是第一个得出的值是c ,是因以第一个集合为主去比较后面的,结合下面的图交集、并集、差集来理解,针对这个我们可以实现QQ关注模型(往下面看)
实现关注模型
利用上面的运行算 可以实现QQ空间关注的人:如图
实现电商的商品筛选
如图:根据品牌、屏幕尺寸、处理器、内存几个指标 来求并集 筛选出电脑
实现支付系统的对账
如图:第一、订单sdiff 支付 得到订单的数据不对,第二、用支付sdiff订单可以得到 支付中数据不对的
通过两次比较就可以得到有问题的对账