延迟监控(LATENCY MONITOR)系统会在运行时抽样部分命令来帮助你分析 Redis 卡顿的原因 。
通过 LATENCY命令,可以打印一些视图和报告,系统只会记录大于等于指定值的命令 。
默认配置 latency-monitor-threshold 0,设置 0 表示关闭这个功能 。没有延迟问题,没必要开启开启监控,因为会对性能造成很大影响 。
在运行过程中你怀疑有延迟性能问题,想要监控的话可以使用 CONFIG SET latency-monitor-threshold <milliseconds>开启,单位是毫秒 。
十、高级设置这部分配置主要围绕以下几个方面 。
- 指定不同数据类型根据不同条数下使用不同的数据结构存储,合理配置能做到更快和更省内存 。
- 客户端缓冲区相关配置 。
- 渐进式 rehash 资源控制 。
- LFU 调优 。
- RDB 内存快照文件、AOF 文件同步策略 。
在 Redis 7.0 版本散列表数据类型有两种数据结构保存数据,分别为散列表和 listpack 。当数据量很小时,可以使用更高效的数据结构存储,从而达到在不影响性能的情况下节省内存 。
- hash-max-listpack-entries 512:指定使用 listpack 存储的最大条目数 。
- hash-max-listpack-value 64:listpack 中,条目 value 值最大字节数,建议设置成 1024 。
hash-max-ziplist-entries 512hash-max-ziplist-value 64
2、Lists(列表)Lists 也可以使用一种特殊方式进行编码来节省大量内存空间 。在 Redis 7.0 之后,Lits 底层的数据结构使用 linkedlist 或者 listpack。
Redis 3.2 版本,List 内部是通过 linkedlist 和 quicklist 实现,quicklist 是一个双向链表,quicklist 的每个节点都是一个 ziplist,从而实现节省内存 。
元素少时用 quicklist,元素多时用 linkedlist 。listpack 的目的就是用于替代 ziplist 和 quicklist 。listpack 也叫紧凑列表,它的特点就是用一块连续的内存空间来紧凑地保存数据,同时为了节省内存空间
list-max-ziplist-size
7.0 版本之前list-max-ziplist-size 用于配置 quicklist 中的每个节点的 ziplist 的大小 。当这个值配置为正数时表示 quicklist 每个节点的 ziplist 最多可存储元素数量,超过该值就会使用 linkedlist 存储 。
当 list-max-ziplist-size 为负数时表示限制每个 quicklistNode 的 ziplist 的内存大小,超过这个大小就会使用 linkedlist 存储数据,每个值有以下含义:
- -5:每个 quicklist 节点上的 ziplist 大小最大 64 kb <--- 正常环境不推荐
- -4:每个 quicklist 节点上的 ziplist 大小最大 32 kb <--- 不推荐
- -3:每个 quicklist 节点上的 ziplist 大小最大 16 kb <--- 可能不推荐
- -2:每个 quicklist 节点上的 ziplist 大小最大 8 kb <--- 不错
- -1:每个 quicklist 节点上的 ziplist 大小最大 4kb <--- 不错
list-max-listpack-size
7.0 之后,配置修改为list-max-listpack-size -2则表示限制每个 listpack 大小,不再赘述 。
list-compress-depth
压缩深度配置,用来配置压缩 Lists 的,当 Lists 底层使用 linkedlist 也是可以压缩的,默认是 list-compress-depth 0表示不压缩 。一般情况下,Lists 的两端访问的频率高一些,所以你可以考虑把中间的数据进行压缩 。
不同参数值的含义如下 。
- 0,关闭压缩,默认值 。
- 1,两端各有一个节点不压缩 。
- 2,两端各有两个节点不压缩 。
- N,依次类推,两端各有 N 个节点不压缩 。
3、Sets(无序集合)
Sets 底层的数据结构可以是 intset(整形数组)和 Hashtable(散列表),intset 你可以理解成数组,Hashtable 就是普通的散列表(key 存的是 Sets 的值,value 为 null) 。有没有觉得 Sets 使用散列表存储是意想不到的事情?
set-max-intset-entries
当集合的元素都是 64 位以内的十进制整数时且长度不超过 set-max-intset-entries 配置的值(默认 512),Sets 的底层会使用 intset 存储节省内存 。添加的元素大于 set-max-intset-entries配置的值,底层实现由 intset 转成散列表存储 。
推荐阅读
- 职业教育|热血江湖手游:经典五大职业设定,公测火爆开启,两大门派争霸,谁能成为江湖第一?
- “魔兽”退场 两代玩家告别青春
- 华晨宇|有一种“差距”叫邓紫棋和华晨宇,分手5年后,两人现状天差地别
- 王思聪|王思聪与网红喝下午茶,女方被扒已婚有娃,两人关系引发猜测
- 华晨宇|华晨宇王悦伊高调秀恩爱,两人穿情侣装、戴情侣口罩,细节好浪漫
- 陈乔恩|陈乔恩和Alan晒照秀幸福,甜喊老公老婆示爱,两人越来越有夫妻相
- 林青霞|林青霞邀请作家莫言家中做客,吃水饺喝茅台,两人同龄像隔代人!
- 梦中的那片海|68岁林青霞看京剧,和大师交头接耳显亲密,两位友人都戴千万翡翠
- 王思聪|王思聪带俩美女玩剧本杀,大热天套两件T恤,同回酒店当护花使者
- 李明|女同事请吃饭,喊两位闺蜜一起,吃完准备离开就被服务员拦了下来!