山东建设局网站 王局,传媒有限公司,中国建设职业注册中心网站,西地那非可以长期吃吗什么是 redis 的大 key
redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值#xff0c;而是该 key 所对应的 value 过大对于 string 类型来说#xff0c;一般情况下超过 10KB 则认为是大 key#xff1b;对于set、zset、hash 等类型来说#xff0c;一般…
什么是 redis 的大 key
redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值而是该 key 所对应的 value 过大对于 string 类型来说一般情况下超过 10KB 则认为是大 key对于set、zset、hash 等类型来说一般数据超过5000条即认为是大 key redis 大 key 的场景
在抖音直播中某个头部主播当前有很多正在观看的用户假如有这样的数据结构 直播间和观看用户之间的映射关系采用 redis 存储redis 的 key 是直播间id长度可控且很小redis 的 value 是个 listlist 包含直播间里面所有用户用户可能很多就导致 list 长度不可控 大 key 带来的问题
redis 内存不断变大引发 OOM或达到 maxmemory 设置值引发写阻塞或重要 key 被逐出redis cluster 中的某个 node 内存远超其余 node但因 redis cluster 的数据迁移最小粒度为 key 而无法将 node 上的内存均衡化大 key 上的读请求使 redis 占用服务器全部带宽自身变慢的同时影响到该服务器上的其它服务删除一个大 key 造成主库较长时间的阻塞并引发同步中断或主从切换 如何查找大 key
使用命令 bigkeys bigkeys 是 redis 自带的命令对整个 key 进行扫描统计 stringlistsetzsethash 这几个常见数据类型中每种类型里的最大的 key会造成线程阻塞string 类型统计的是 value 的字节数另外 4 种复杂结构的类型统计的是元素个数不能直观的看出 value 占用字节数bigkeys 对分析 string 类型的大 key 是有用的复杂结构的类型还需要一些第三方工具 使用 memory 命令查看 key 的大小(仅支持 redis 4.0 以后的版本) memory usage keyname 使用 rdb tools 工具包 rdbtools 是 python写的 一个第三方开源工具用来解析 redis 快照文件除了解析 rdb 文件还提供了统计单个 key 大小的工具https://github.com/sripathikrishnan/redis-rdb-tools 如何解决大 key
如何存储大 key 数据结构优化 优化 redis 的数据结构使用合适的数据结构来存储数据避免出现 redis 大 key 的情况 数据分片 将大量数据分片存储到多个 key 中避免单个 key 的数据量过大 压缩数据 对于存储的大数据可以采用压缩算法来减少数据的大小redis支持多种压缩算法如 LZF、Snappy 等 分布式存储 将数据分散到多个 redis 实例中避免单个 redis 实例存储过多数据导致 redis 大 key 的问题 清理过期数据 及时清理过期数据避免数据堆积导致 redis 大 key 的问题
如何删除大 key
在系统低峰期直接使用 del 命令删除 (会造成线程阻塞)使用 scan 命令删除 (会造成线程阻塞)使用 unlink 异步删除