Redis| 青训营笔记

103 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第16天。

个人阐述

redis作为高效的单线程存储中间件,在一般情况下是用不上的,他真正派上用场是百万级以上的高并发存储,这对于大多数的我们可能很遥远,但了解其原理与其独特的思想尤为重要。

为什么要使用redis

image.png

redis基本工作原理

image.png

string数据结构

image.png

redis使用list作为消息队列

redis的list并不是Linklist而是quicklist,quicklist由双向链表和listpack实现。

image.png

Listpack

image.png

对于统计需求的处理

使用hash,类似java中的hashmap一样。 image.png

image.png

zset数据结构

1676474314964.png

限流

image.png

分布式锁

image.png

redis使用注意事项

大key

image.png

image.png

image.png

消除大Key的方法
  • 集合类结构hash、list、 set、 set
  • (1)拆分:可以用hash取余、位掩码的方式决定放在哪个key中
  • (2)区分冷热:如榜单列表场景使用zset,只缓存前10页数据,后续数据走db

热key

image.png

慢场景查询

容易导致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