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消耗过大,设置合理值可以更好的节省内存。

 

作者:​​小家电维修​

转世燕还故榻,为你衔来二月的花。