reidis服务优化
1 redis优化策略
1 根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
2 当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。
3 如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。
4 不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。
2 系统和应用优化
2.1 修改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
2.2 最大文件描述符
ulimit -SHn 65535 临时修改
echo ' * - nofile 65535' >> /etc/security/limits.conf ##退出重新登陆后生效
2.3 修改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
3 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优化
4 关闭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
5 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。 |