本站所有文章均为原创,如您有所获益,恳请帮忙点击站内广告支持一下,您的帮助是我持续更新的动力!
  • 首页
  • Redis
  • 【Redis运维】Redis配置文件示例与说明

【Redis运维】Redis配置文件示例与说明

发布:TangLu2021-3-23 9:41分类: Redis 标签: redis nosql

一、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:使用LRU算法删除设有过期时间的key,即保留最近访问过的数据

· volatile-lfu优先保留访问次数最频繁的数据(4.0+版本支持)

· allkeys-lru:使用LRU算法在所有key中进行删除,LRU算法是删除使用次数最小的KEY

· allkeys-random:随机在所有key中进行删除

· noeviction:默认删除算法,不进行任何操作,直接返回错误

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
版权所有:《Linux运维技术学习站点
文章标题:《【Redis运维】Redis配置文件示例与说明
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-649.html  [生成短网址]
et_highlighter51

已有 0/227 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~