避免使用On的操作
例如sort/sunion/smembers
缩短键值对的存储长度
严格控制key的长度
严格控制value的长度
严格控制hash set 等结构的数据大小
限制redis内存大小
开启内存淘汰策略
- noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis 默认内存淘汰策略;
- allkeys-lru:淘汰整个键值中最久未使用的键值;
- allkeys-random:随机淘汰任意键值;
- volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;
- volatile-random:随机淘汰设置了过期时间的任意键值;
- volatile-ttl:优先淘汰更早过期的键值。
- volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值;
- allkeys-lfu:淘汰整个键值中最少使用的键值。
禁用keys命令
使用lazy free
异步释放键值对
把键值对的释放放在单独的线程处理
减少堆Redis主线程的阻塞
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
- lazyfree-lazy-eviction:表示当 Redis 运行内存超过 maxmeory 时,是否开启 lazy free 机制删除;
- lazyfree-lazy-expire:表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除;
- lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;
- slave-lazy-flush:针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。
设置随机过期时间
持久化策略
- 禁用持久化
- 使用RDB快照
- AOF与RDB策略
- 检查条数触发持久化,时间触发持久化
使用高速固态硬盘作为日志写入
使用物理机而不是虚拟机
增加内存,使用redis集群
禁用swap
使用pipeline
使用redis连接池
避免内存碎片
-
自动清除碎片
config set activedefrag yes
-
手动清除碎片
memory purge
禁用THP特性
THP:支持大内存页2M分配
开启了THP时,fork的速度会变慢,每个内存页从原来的4k变为2m,会大幅增加父进程内存消耗
写命令引起的内存复制放大了512倍
网友评论