作为一名DBA,我希望自己的数据库有一个合适的参数,即便他不是针对我100%匹配,至少得是一个适用于大多环境的“最佳实践”
接下来是干货,请注意,为大家准备的实践参数:
- 持久化相关:
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如何处理




