redis优化小建议
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.尽量使用整数对象以节省内存。
有共享空间,比较节约内存。但是开始maxmemroy和LRU后,对象池无效。因为怕LRU字段被共享清除。
10.尽量使用散列表
尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。不过要控制哈希在ziplist和 hashtable两种内部编码的转换,hashtable会消耗更多内存。
11.尽量减少字符频繁修改操作如append、setrange,改为直接使用 set 修改字符串,降低预分配带来的内存浪费和内存碎片化。
12. 慢查询日志开启
13. Redis建议设置密码,不要开放外网访问。
14. 记录热点key,并进行优化
15.vm.overcommit_memory设置,使redis可以超量使用内存。
16.禁用THP
当开启时可以降低fork 子进程的速度,但 fork 操作之后,每个内存页从原来4KB变为2MB, 会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。
17.设置合理的数据压缩值
redis为每种数据类型都提供了几种内部编码方式,在不同的情况下redis会自动调整合适的编码方式。设置过大导致解码是cpu消耗过大,设置合理值可以更好的节省内存。