reidis服务优化

redis优化策略

1 根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
2 当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。
3 如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。
4 不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。

系统和应用优化

修改linux中TCP监听的最大容纳数量

somaxconn默认的是128

不足会报WARNING: The TCP backlog setting of 511 cannot be enforced because
/proc/sys/net/core/somaxconn is set to the lower value of 128.
在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核默默地将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值来达到想要的效果。

echo 10024 > /proc/sys/net/core/somaxconn

注意:这个参数并不是限制redis的最大链接数。如果想限制redis的最大连接数需要修改maxclients,默认最大连接数为10000

最大文件描述符

ulimit -SHn 65535  临时修改

echo '  *           -      nofile    65535' >> /etc/security/limits.conf   ##退出重新登陆后生效

修改linux内核内存分配策略

报错 :

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
 To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or
 run the command 'sysctl vm.overcommit_memory=1'

内核参数overcommit_memory是 内存分配策略

可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

解决方法:

sysctl vm.overcommit_memory=1
echo 1 > /proc/sys/vm/overcommit_memory

redis配置项

1 禁用vm-enabledredis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。

redis.conf文件中 vm-enabled 为 no

2 数据持久化策略

数据落磁盘尽可能减少性能损坏,以空间换时间。设置如下命令:

rdbcompression no # 如果你不想消耗CPU来进行压缩的话

rdbchecksum no # 数据不校验 大约提高cpu10%的性能消耗

3 优化AOF和RDB,减少占用CPU时间

主库可以不进行dump操作或者降低dump频率。

取消AOF持久化。命令如下:

appendonly no

4 客户端timeout

设置一个超时时间,防止无用的连接占用资源。设置如下命令:

timeout 150

tcp-keepalive 150

另外可以 查看redis的慢日志redis监控 来看业务情况。进行业务相关redis优化

关闭Transparent Huge Pages

THP会造成内存锁影响redis性能,建议关闭

Transparent HugePages :用来提高内存管理的性能
Transparent Huge Pages在32位的RHEL 6中是不支持的

该特性开启时,虽然可以降低 fork 子进程的速度。但 fork 之后,每个内存页从原来 4KB 变为 2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了 512 倍,会拖慢写操作的执行时间,导致大量写操作慢查询。

执行以下命令可以禁用 THP,如果需要保证重启后也生效,建议将该命令写入 /etc/rc.local 文件中。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

把这条命令添加到这个文件中/etc/rc.local

redis相关配置

项目说明
List 数据类型没有 List 个数限制,单个元素最大值为 512 MB,推荐 list的元素个数小于 8192, value 最大长度不超过 1 MB。
Set 数据类型没有 set 个数限制,单个元素最大值为 512 MB,推荐 set 的元素个数小于 8192, value 最大长度不超过 1 MB。
Sorted set 数据类型没有 sorted set 个数限制,单个元素最大值为 512 MB,推荐 sorted set 的元素个数小于 8192, value 最大长度不超过 1 MB。
Hash 数据类型没有 field 个数限制,单个元素最大值为 512 MB,推荐元素个数小于 8192, value 最大长度不超过 1 MB。
DB 数限制每个实例支持 256 个 DB。
Redis 命令支持详情请参见文档。
监控报警数据库 Redis 版未提供容量告警,需要用户到云监控中进行配置。配置方法请参见文档。
建议设置好以下监控的报警:实例故障、实例主备切换、已使用连接百分比、操作失败数、已用容量百分比、写入带宽使用率、读取带宽使用率。
数据过期删除策略– 主动过期,系统后台会周期性的检测,发现已过期的key时,会将其删除。
– 被动过期,当用户访问某个key时,如果该key已经过期,则将其删除。
空闲连接回收机制服务端不主动回收 Redis 空闲连接,由用户管理。
数据持久化策略采用 AOF_FSYNC_EVERYSEC 方式,每秒 fysnc。

赞(2) 打赏
特别声明:除特殊标注,本站文章均为原创,遵循CC BY-NC 3.0,转载请注明出处。三伏磨 » reidis服务优化

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏