Redis配置文件示例与说明

一、Redis配置文件示例

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511  #在高并发环境下需要调高该值避免客户端连接问题。该值受/proc/sys/net/core/somaxconn系统参数影响,需一起调整
timeout 0 #客户端空闲时间达到多少秒就被关闭,0为不关闭
tcp-keepalive 300
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/data/redis/logs/redis.log"
databases 16
requirepass 123456  #redis密码
# rename-command CONFIG ""  #命令别名
maxclients 10000  #最大客户端连接数
maxmemory 1GB  #redis最大占用内存,可写为1kb,5GB,4Mb等常见格式,不区分大小写
maxmemory-policy volatile-lru  #内存淘汰策略,见后文详细解释
# maxmemory-samples 5  #LRU和最小TTL算法精确度不高,但是很接近(为了省内存),这里可以设置用N个样本做检测

# RDB持久化配置 
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes  #如果快照保存失败,所有节点停止写入
rdbcompression yes    #RDB是否压缩
rdbchecksum yes       #校验RDB文件
dbfilename dump.rdb   #RDB文件名
dir /data/redis/rdb/  #RDB存放目录
rdb-save-incremental-fsync yes  #当Redis保存RDB文件时,每生成32MB数据就执行一次fsync操作,这样分批提交可以避免高延迟

# 主从配置
slaveof <masterip> <masterport>  #如果填写了其他节点ip与端口,本节点就作为那个节点的从库
masterauth <master-password>     #主库的密码
slave-serve-stale-data yes       #如果从库与主库失联,是否继续响应客户端请求,No则响应SYNC with master in progress
slave-read-only yes              #从库开启只读
repl-ping-slave-period 10        #从库向主库发送ping请求的间隔
repl-timeout 60                  #主从超时时间
repl-disable-tcp-nodelay no      #是否用nodelay方式传输数据,no可以降低数据传输到从库的延迟,但使用更多的带宽
repl-backlog-size 10mb  #从服务离线之后,主服务器会把离线之后的写入命令存储在一个特定大小的队列中,避免短时间断开服务却进行全量同步的问题
repl-backlog-ttl 3600  #当所有从库都与主库断开连接后达到多少秒释放backlog
slave-priority 100  #从库优先级,数字越小优先级越高,0代表不会被哨兵选为主
# min-slaves-to-write 3  #如果从库少于N个,主库就停止写入,需配合min-slaves-max-lag一起使用。比如至少需要3个从库、并且延时小于等于10秒的,主库才能写入
# min-slaves-max-lag 10  #如果从库延迟小于N秒,主库才能写入数据,需配合min-slaves-to-write一起使用。比如至少需要3个从库、并且延时小于等于10秒的,主库才能写入
repl-diskless-sync yes  #开启无盘复制,主从全量同步时,主库并不会在本地创建RDB 文件,而是创建一个子进程通过Socket将RDB文件写入到从服务器,节约IO资源
repl-diskless-sync-delay 5

# AOF持久化配置
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
# appendfsync always
# appendfsync no
no-appendfsync-on-rewrite no  #如果正在导出rdb数据则停止aof的写入,aof将保存在一个队列中,等rdb备份完成后再执行队列,不会丢失数据
auto-aof-rewrite-percentage 100  #aof文件体积与上次相比增长率达到100%就进行重写(重写相当于记总账,比如对同一个key做了100次操作,我们只需要最后一次的操作,重写就会把多余的操作给忽略掉,节省内存
auto-aof-rewrite-min-size 64mb  #和auto-aof-rewrite-percentage组合使用,aof文件达到64M时进行重写
aof-load-truncated yes
aof-rewrite-incremental-fsync yes  #当Redis保存AOF文件时,每生成32MB数据就执行一次fsync操作,这样分批提交可以避免高延迟

#慢日志配置
slowlog-log-slower-than 1000000  #慢查询的评定时间,单位为微妙,这里代表1秒
slowlog-max-len 1000  #慢日志最大记录条数

#当hash\list\set类型的键只有少量数据时会用一种更节省内存的数据结构来编码
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes  #启用hash刷新,尽快释放内存

#客户端输出缓冲区配置
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10  #默认10,可选范围1到500,通常不建议调整该值。该值决定了Redis处理后台任务的频率,比如清理过期Key、关闭超时连接等。调高该值可以让CPU空闲时间更频繁的去处理后台的任务,但通常不建议调高到100以上
dynamic-hz yes  #动态调整hz的值

二、Redis客户端缓冲区说明

在Redis中有输入缓冲区和输出缓冲区机制。缓冲区的主要作用是避免Redis处理速度慢于发送速度,导致数据积压最后丢失和性能上的问题。但是缓冲区随着使用增多,需要的内存也就越来越多。如果缓冲区占用的内存超出了设定的上限阈值,就会出现缓冲溢出。但是缓冲区也不能设置得太大或者不限制,因为随着累积的数据越来越多,缓冲区占用内存空间越来越大,一旦耗尽了 Redis 实例所在机器的可用内存,就会导致 Redis OOM。

  • 输入缓冲区(无法通知参数调整):暂存了客户端发送过来的命令,导致输入缓冲区溢出的情况主要是写入bigkey或Redis主线程阻塞。这样Redis就无法及时处理正常发送的请求,导致客户端发送的请求在缓冲区越积越多。客户端输入缓冲区大小在代码中设定为1G(无法直接修改),也就是说允许每个客户端暂存1GB的命令和数据。如果要避免输入缓冲区溢出就只能从数据命令的发送和处理速度入手,避免写入大量bigkey以及Redis主线程阻塞。
redis > client list  #关注qbuf和qbuf-free的值,如果qbuf快接近qbuf-free代表没有什么缓冲区可用了,如果该客户端继续大量写入,则会被关闭
  • 输出缓冲区:暂存了Redis需要返回给客户端、从库或者订阅频道的数据。如果存放的数据超过了限制,就会发生缓存溢出,可能导致溢出的原因主要有服务器端返回bigkey的大量结果、持续monitor、缓冲区大小设置不合理三种情况 
client-output-buffer-limit normal 0 0 0 
client-output-buffer-limit slave 256mb 64mb 60  #如果超过这个限制就会触发全量复制
client-output-buffer-limit pubsub 32mb 8mb 60

三、Redis淘汰策略说明
如果看到客户端提示command not allowed when used memory > 'maxmemory'的提示,代表当前redis服务使用内存已经达到设置的上限。根据Redis默认的内存淘汰策略,达到最大内存后redis对后续操作会直接返回错误。要设置删除算法的话需要修改maxmemory-policy选项的值,以下是该选项常用值含义:

  • · volatile-random:随机删除设有过期时间的key
  • · volatile-ttl:优先淘汰设有过期并且即将过期的key
  • · volatile-lru:从所有设置了过期时间的键值中淘汰最长时间未使用的Key,即保留最近访问过的数据。但是会存在一个很久没有被用到的Key因为最近被访问了一次而不被淘汰的问题。
  • · volatile-lfu优先保留访问次数最频繁的数据(4.0+版本支持)
  • · allkeys-lru:LRU算法是4.0之后的新算法,根据总访问次数来淘汰数据,解决了偶尔被访问一次之后数据就不会被淘汰的问题
  • · allkeys-random:随机在所有key中进行删除
  • · noeviction:默认删除算法,不进行任何操作,直接返回错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值