Redis缓存数据结构,数据同步问题(双删策略),缓存雪崩,缓存穿透,热点缓存重构,缓存失效,哨兵机制,持久化,redis 淘汰机制
熟悉掌握Redis数据结构的使用场景,熟悉Redis缓存高并发的使用场景。比如,缓存雪崩,缓存穿透。
五种数据结构:
字符串string
应用场景:
一,单值缓存:
- set key value
- get key
二,对象缓存:
- set user:1 value(json数据)
说明:一次存入,后面修改不方便,胜在简单
- mset user:1:name zhuge user:1:balance 1888
- mget user:1:name user:1:balance
说明:多个字段修改方便一些
三,分布式锁:
- setnx product:10001 true //返回1表示获取锁成功
- setnx product:10001 true//这个值已经被设置过,则返回0表示获取锁失败
- 。。。执行业务操作
- del product:10001 //执行完业务释放锁
- setnx product:10001 true ex 10 nx //防止程序意外终止导致死锁
四,计数器:例如文章阅览次数
- incr acticle:readcount{文章id} //每执行一次加一
- get acticle:readcount{文章id}
五,Web集群session共享
- spring session + redis实现session共享
六,分布式系统全局序列号
- incrby orderId 1000 //一次性拿1000个序列号,在redis里面加一,批量生成序列号提升性能
哈希hash
一,对象缓存:多个字段修改方便一些,大数据量要进行分段存储
- hmset user {userId}:name zhuge {userId}:balance 1888
- hmset user 1:name zhuge 1:balance 1888
- hmget user 1:name 1:balance
二,电商购物车
说明:
1001为用户
10088商品
cart:1001为key
优缺点:
列表list
微博消息和微信公众号文章
我关注了MacTalk和备胎说车,MacTalk先发了一篇文章,文章id为10018,备胎说车后发了一篇文章,文章id为10086
LPUSH msg:{我的用户id} 10018
LPUSH msg:{我的用户id} 10086
查看最新消息:
LRANGE msg:{我的用户id} 0 4//查看自己订阅文章的最新五篇
集合set
srandmember key [count]随机获取count个的中奖者,获取的元素还在集合里
spop key [count]随机获取count个的中奖者,获取的元素不在集合里了
SINTER 交集 取共同的元素
SUNION 并集 取所有的元素
SDIFF 差集 以第一个集合为基准减去后面所有集合的并集,最后看第一个集合还剩下的元素
集合实现微博微信关注模型
集合实现微博微信关注模型
张三关注的人:
zhangsanSet - >{lisi,liaozhiwei}
王五关注的人:
wangwuSet -> {lisi,liaozhiwei,zhangsan,shuaige}
李四关注的人:
lisiSet -> {zhangsan,liaozhiwei,wangwu,shuaige,xunyu}
我与王五共同关注的人:交集
SINTER zhangsanSet wangwuSet -> {lisi,liaozhiwei}
我关注的人也关注他:
SISMEMBER listSet wangwu
SISMEMBER liaozhiwei wangwu
我可能认识的人:进到王五的主页,拿王五的集合和自己的集合对比,取差集
SDIFF wangwuSet zhangsanSet ->{zhangsan,shuaige}
有序集合zset