1.优化的一些小建议
1.尽量使用短的key
当然在精简的同时,不要为了key的“见名知意”。对于value有些也可精简,比如性别使用0、1。
2.每个redis设置合理内存
每个GB在save fork子进程的时候会消耗20毫秒左右。
3.尽量保证只有一个子进程在工作
避免出现抢占资源的情况
4.避免在大量写入时做子进程重写操作
避免资源抢占以及过度消耗
5.不要和高硬盘负载服务部署在一台服务器上
6.对于开启了持久化或参与复制的主节点不建议绑定CPU,会有CPU竞争
7.内存碎片由于经常apped,更新,大量过期删除,安全重启就可以解决
8.可以使用scan + object idletime 命令批量查询哪些键长时间未被访问,找出长时间不访问的键进行清理,可降低内存占用。
9.尽量使用整数对象以节省内存。
有相同的引用空间,比较节约内存
10.尽量减少字符频繁修改操作如append、setrange,改为直接使用 set 修改字符串,降低预分配带来的内存浪费和内存碎片化。
11. 慢查询日志开启
12. Redis建议设置密码,不要开放外网访问。
13. 记录热点key,并进行优化
14.vm.overcommit_memory设置,使redis可以超量使用内存。
15.禁用THP
当开启时可以降低fork 子进程的速度,但 fork 操作之后,每个内存页从原来4KB变为2MB, 会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。
16.设置合理的数据压缩值
redis为每种数据类型都提供了几种内部编码方式,在不同的情况下redis会自动调整合适的编码方式。设置过大导致解码是cpu消耗过大,设置合理值可以更好的节省内存。