这是我参与「第五届青训营 」伴学笔记创作活动的第16天。
个人阐述
redis作为高效的单线程存储中间件,在一般情况下是用不上的,他真正派上用场是百万级以上的高并发存储,这对于大多数的我们可能很遥远,但了解其原理与其独特的思想尤为重要。
为什么要使用redis
redis基本工作原理
string数据结构
redis使用list作为消息队列
redis的list并不是Linklist而是quicklist,quicklist由双向链表和listpack实现。
Listpack
对于统计需求的处理
使用hash,类似java中的hashmap一样。
zset数据结构
限流
分布式锁
redis使用注意事项
大key
消除大Key的方法
- 集合类结构hash、list、 set、 set
- (1)拆分:可以用hash取余、位掩码的方式决定放在哪个key中
- (2)区分冷热:如榜单列表场景使用zset,只缓存前10页数据,后续数据走db
热key
慢场景查询
容易导致redis慢查询的操作
- (1)批量操作一次性传入过多的key/value,如mset/hmset/sadd/zadd等 O(n)操作建议单批次不要超过100,,超过100之后性能下降明显。
- (2) zset大部分命令都是O(log(n)),当大小超过5k以 上时,简单的zadd/zrem也可能导致慢查询
- (3)操作的单个value过大,超过10KB。 也即,避免使用大Key
- (4)对大key的delete/expire操作也可能导致慢查询,Redis4.0之 前不支持异步删除unlink,大key 删除会阻塞Redis