暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis最佳实践参数

原创 黄堋 2020-05-26
4022

作为一名DBA,我希望自己的数据库有一个合适的参数,即便他不是针对我100%匹配,至少得是一个适用于大多环境的“最佳实践”

接下来是干货,请注意,为大家准备的实践参数:

  1. 持久化相关:

aof-load-truncated yes
加载AOF文件时,忽略AOF文件不完整的情况,让Redis正常启动
appendonly yes
是否开启AOF
aof-rewrite-incremental-fsync yes
AOF重写过程中,采取增量文件同步策略,增加持久化性能
appendfilename “appendonly-{port}.aof”
AOF文件
appendfsync everysec
always:把每个写命令都立即同步到aof,安全性高,但是对性能影响较大
everysec:每秒同步一次,是折中方案
no:redis不处理交给OS来处理,非常快,安全性较低

auto-aof-rewrite-min-size 64mb
auto-aof-rewrite-percentage 100
BGREWRITEAOF命令会通过移除AOF文件中的冗余命令来重写AOF文件,使得AOF文件的体积变得尽可能的小,设置auto-aof-rewrite-percentage和auto-aof-rewrite-min-size来自动触发BGREWRITEAOF命令,当AOF的体积大于64M,并且比上一次重写之后的体积大了至少一倍(100%)的时候,Redis将执BGREWRITEAOF命令。

no-appendfsync-on-rewrite yes
磁盘操作竞争时(bgrewriteaof和主进程写aof文件同时进行时),进行阻塞,提高数据安全性,但是会导致一定程度的延迟。

rdbchecksum yes
对rdb数据进行校验

rdbcompression yes
启动rdb文件压缩

stop-writes-on-bgsave-error yes
当无法进行RDB快照创建时,停止对数据的操作

2.客户端缓冲区

client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
client-output-buffer-limit normal 0 0 0
客户端的输出缓冲区的限制,包括slave、pubsub、normal三种,以salve为例:当客户端缓冲区大小大于256M或者持续60秒超过64M,则关闭客户端连接。

3.底层存储转换

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
hash底层结构注意说ziplist和dict,数据量小的时候优先选择ziplist,数据量大的时候应该转换dict,转换阈值由这两个参数指定,参数意义为:表示当hash项(field,value)数>512即ziplist项>1024的时候转为dict以及hash中的value长度超过64的时候转为dict。

list-max-ziplist-entries 512
list-max-ziplist-value 64
ziplist和linkedlist的转换阈值

set-max-intset-entries 512
Intset转成dict的阈值

zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zset转换成dict的阈值

hll-sparse-max-bytes 3000
HyperLogLog 将有稀疏模式转为稠密模式的阈值,可以节约空间。

4.Slave相关

repl-disable-tcp-nodelay no
在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY
假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致
假如设置成no,则redis master会立即发送同步数据,没有延迟

slave-priority 100
slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举

slave-serve-stale-data yes
当主master服务器挂机或主从复制在进行时,是否依然可以允许客户访问可能过期的数据。在"yes"情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期;在"no"情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知"error"

5.其他

daemonize yes
开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程

activerehashing yes
开启重置Hash表,设置以后会周期性的对hash表进行重新hash,起到内存释放的作用,会有一定性能消耗,除非在实时性要求非常高的(2毫秒以内)的环境中,都建议使用。

hz 10
Redis 会通过调用内部函数来完成很多后台任务,比如关闭超时的客户端的连接,清除过期的 key,等等。Redis 通过 hz 设置的值来决定执行这些任务的频繁程度。

latency-monitor-threshold 0
关闭延时监控系统

loglevel notice
日志级别
debug:会打印出很多信息,适用于开发和测试阶段
verbose(冗长的):包含很多不太有用的信息,但比debug要清晰一些
notice:保留了比较重要的信息,适用于生产模式
warning : 警告信息

lua-time-limit 5000
参数限制脚本的最长运行时间,默认为5秒钟。当脚本运行时间超过这一限制后,Redis将开始接受其他命令但不会执行

slowlog-log-slower-than 10000
当语句执行时间大于0.01S时,记录到慢日志中

slowlog-max-len 128
慢日志最大的语句数量,超过后会删掉最老的日志

tcp-backlog 65535
TCP连接中已完成队列(完成三次握手之后)的长度,系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。
net.core.somaxconn = 2048

tcp-keepalive 300
redis服务端主动向空闲的客户端发起ack请求,以判断连接是否有效,0位关闭该特性

timeout 0
client连接空闲多久会被关闭(这个配置容易被误导为:连接超时和操作执行超时),0位关闭该特性

databases 16
可用的数据库数

port 9000
端口号

maxmemory 21474836480
指定Redis最大内存限制

requirepass 123456
客户端连接密码

masterauth 123456
备库连接密码

pidfile /app/ctgcache/cache_apps/redisEntites/9000/redis9000.pid
当Redis以守护进程方式运行时,Redis默认会把pid写入文件,可以通过pidfile指定

logfile /app/ctgcache/cache_apps/redisEntites/9000/redis9000.log
日志文件

dir /app/ctgcache/cache_apps/redisEntites/9000/
指定本地数据库存放目录

maxclients 10000
最大连接数

maxmemory-policy volatile-lru
当到达maxmemory的限制,redis如何处理

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论