您的位置:首页 > 科技 > IT业 > Redis5优化-Redis

Redis5优化-Redis

2024/10/6 6:04:24 来源:https://blog.csdn.net/m0_63603104/article/details/141212216  浏览:    关键词:Redis5优化-Redis

1、Redis关键参数

        a、客户端最大连接数

maxclients 60000
注意该参数受到操作系统最大文件句柄的限制(ulimit -n)

        b、响应

repl-ping-slave-period/repl-timeout
repl-timeout 60
1)、说明:slave 会每隔 repl-ping-slave-period(默认10秒)ping一次master,如果查过repl-timeout(默认60秒)都没有收到响应,就会认为Master挂掉。
2)、优化:如果 Master 明明没挂掉但被阻塞住了也会报这个错。可以适当调大 repl-timeout

        c、缓冲区

client-output-buffer-limit
client-output-buffer-limit slave 256mb 64mb 60
1)说明:客户端输出缓冲区大小。
2)、当使用主从复制时,性能压测下,数据量会急剧增长,导致从节点需要复制的数据很大,消耗时长增加。slave 没挂但被阻塞住了,比如正在 loading Master 发过来的 RDB,Master 的指令不能立刻发送给 slave,就会放在 output-buffer 中

        d、使用 lazy free 特性

lazyfree-lazy-eviction:表示当 Redis 运行内存超过 maxmeory 时,是否开启 lazy free 机制删除;
lazyfree-lazy-expire:表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除;
lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;
slave-lazy-flush:针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。
建议开启其中的 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-server-del 等配置,这样就可以有效的提高主线程的执行效率。

        e、内存大小及淘汰机制

maxmemory 1024*1024*1024*(物理内存*0.5)
maxmemory-policy allkeys-lru

        f、慢命令配置

slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。默认10,000
slowlog-log-slower-than=0 #记录所有命令
slowlog-log-slower-than<0 #不记录任何命令
slowlog-max-len ,它决定 slow log 最多能保存多少条日志slowlog-log-slower-than 100
slowlog-max-len 500

2、内存碎片优化

        a、内存碎片如何判断

info memory
Redis 重要内存参数解读
used_memory:Redis 已使用的内存大小,单位 Byte
used_memory_human:Redis 已使用的内存大小,单位 Mb
used_memory_rss:操作系统实际分配给 Redis 的物理内存空间,单位 Byte
used_memory_rss_human:操作系统实际分配给 Redis 的物理内存空间,单位 Mb
mem_fragmentation_ratio:Redis 当前的碎片率(减去 1 表示内存碎片比例)
mem_fragmentation_bytes:Redis 当前的碎片大小,单位 Byte

b、内存碎片率的计算公式

内存碎片率 = 已分配的内存 / 实际使用的内存
mem_fragmentation_ratio = used_memory_rss / used_memory
1 < mem_fragmentation_ratio <= 1.5 经验值一般保持在 1~1.5 之间是最合理的
mem_fragmentation_ratio > 1.5 这表明内存碎片率已经超过了 50%

c、内存碎片解决方案--空间置换

activedefrag yes #开启Redis自动内存碎片整理机制
active-defrag-cycle-max 75 #设置内存碎片清理所占用CPU时间的比例不高于75%
active-defrag-cycle-min 25 #设置内存碎片清理所占用 CPU 时间的比例不低于25%
active-defrag-threshold-lower 5 #设置启动活动碎片整理的最小碎片百分比,内存碎片率大于0.05的时候开始清理
active-defrag-threshold-upper 100 #设置内存碎片超过100%,尽最大清理
active-defrag-ignore-bytes 256mb #设置内存碎片的字节数达到256M时开始清

d、内存碎片扩展技能

memory purge #手动清理内存碎片
memory malloc-stats #内存分配情况内部统计报表

3、性能测试

a、25000个并发连接,500000个请求,检测host为127.0.0.1 端口为 6379 的 redis 服务器性能

-h 指定要进行测试的 Redis 服务器所在的主机 IP (默认 127.0.0.1)
-p 指定 Redis server 运行的端口 (默认 6379)
-a 指定与 Redis server 连接进行操作的密码 Auth
-c 指定本次测试每个指令的并行连接 Redis server 的客户端数量 (default 50)
-n 指定本次测试每个指令的请求总数 (default 100000)
-d 本次测试 set/get 数据大小,单位字节 (default 3)
./redis-benchmark -h 192.168.0.191 -p 6379 -c 10000 -n 5000000 -d 100 -a 123456

b、测试指定操作命令的性能

./redis-benchmark -t set,lpush -n 500000 -q

c、慢日志查询

slowlog get [n]:获取慢查询队列
slowlog len:可以查看当前日志的数量
slowlog reset:清空日志

注意:一定要先设置好Linux的文件句柄限制数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com