redis配置详解

《redis配置详解》 redis配置详解

redis配置文件

redis配置文件在mac中的默认位置在/usr/local/etc/redis.conf,可以在服务启动时指定,也支持服务启动后的动态修改。配置项的内容具体如下:

# *********************************常用配置*********************************

# 是否作为守护进程运行。当为yes时它会写一个pid到/var/run/redis.pid文件里面
daemonize yes or no

# 当运行多个server实例的时候,需要指定不同的pid文件和端口
pidfile /var/run/redis.pid
port 6379 # 默认端口号

# TCP监听的最大容纳数量
tcp-backlog 511

# 绑定ip
bind 127.0.0.1 

# 客户端和Redis服务端的连接超时时间(单位是秒),默认0代表永不超时
timeout 0

# socket心跳包(单位是秒),默认0代表使用SO_KEEPALIVE方式检测连接
tcp-keepalive 0

# 日志级别
# debug 开发or测试
# verbose
# notice 生产环境
# warning
loglevel notice

# 指定日志文件地址
logfile "/data/logs/redis/redis.log"

# 是否记录到系统日志
syslog-enabled no

# 设置syslog的identity
# syslog-ident redis

# 可用数据库数量,默认16个,默认当前数据库为0,范围0到databases-1,可通过select num切换数据库
databases 16

# *********************************快照*********************************

# 在n秒内有m次改动就触发保存动作,可以配置多个条件,关系相当于if、else if
save 900 1
save 300 10
save 60 10000

# 当发生第一次写保存失败后是否强制关闭写通道
# 这是强制通知用户写错误的方式,如果有靠谱的监控,可以设置成no
stop-writes-on-bgsave-error yes

# 备份时是否进行数据压缩
rdbcompression yes

# 读写时是否进行crc校验
rdbchecksum yes

# 备份时的文件名
dbfilename dump.rdb

# 数据库备份文件的位置
dir /data/data/redis/

# *********************************主从配置*********************************

# 设置该数据库为其他数据库的从数据库,参数为主库ip和端口
# slaveof <masterip> <masterport>

# 指定与主数据库连接时需要的密码验证,本地为从库时需要设置访问主库服务器的密码
# masterauth <master-password>

# 当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”,除了INFO,SLAVEOF这两个命令
slave-serve-stale-data yes

# 是否设置slave服务器节点只提供读服务
slave-read-only yes

# 新的从站和重连后不能继续备份的从站,需要做所谓的“完全备份”,即将一个RDB文件从主站传送到从站。这个传送有以下两种方式: 
# 1)硬盘备份:redis主站创建一个新的进程,用于把RDB文件写到硬盘上。过一会儿,其父进程递增地将文件传送给从站。 
# 2)无硬盘备份:redis主站创建一个新的进程,子进程直接把RDB文件写到从站的套接字,不需要用到硬盘。 
# 在硬盘备份的情况下,主站的子进程生成RDB文件。一旦生成,多个从站可以立即排成队列使用主站的RDB文件。在无硬盘备份的情况下,一次RDB传送开始,新的从站到达后,需要等待现在的传送结束,才能开启新的传送。 
# 如果使用无硬盘备份,主站会在开始传送之间等待一段时间(可配置,以秒为单位),希望等待多个子站到达后并行传送。 
# 在硬盘低速而网络高速(高带宽)情况下,无硬盘备份更好。
repl-diskless-sync no

# 当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 
# 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段时间以期更多的从站到达。 
# 延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。
repl-diskless-sync-delay 5

# 从站以一个预先设置好的时间间隔向服务器发送PING。这个时间间隔可以通过repl_ping_slave_period选项改变。默认值是10秒。
# repl-ping-slave-period 10

# 设置主从复制过期时间
# 这个值一定要比 repl-ping-slave-period 大
# repl-timeout 60

# 指定向slave同步数据时,是否禁用socket的NO_DELAY选 项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。
repl-disable-tcp-nodelay no

# 设置主从复制容量大小。这个 backlog 是一个用来在 slaves 被断开连接时存放 slave 数据的 buffer,所以当一个 slave 想要重新连接,通常不希望全部重新同步,只是部分同步就够了,仅仅传递 slave 在断开连接时丢失的这部分数据。
# 这个值越大,salve 可以断开连接的时间就越长。
# repl-backlog-size 1mb

# 在某些时候,master 不再连接 slaves,backlog 将被释放。
# 如果设置为 0 ,意味着绝不释放 backlog 。
# repl-backlog-ttl 3600

# 指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。
# 这个值越小,就越会被优先选中,需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。
slave-priority 100

# 主站可以停止接受写请求,当与它连接的从站少于N个,滞后少于M秒。N个从站必须是在线状态。 延迟的秒数必须<=所定义的值,延迟秒数是从最后一次收到的来自从站的ping开始计算。ping通常是每秒一次。 
# 这一选项并不保证N个备份都会接受写请求,但是会限制在指定秒数内由于从站数量不够导致的写操作丢失的情况。 
# 如果想要至少3个从站且延迟少于10秒,这样写
# min-slaves-to-write 3
# min-slaves-max-lag 10

# *********************************安全配置*********************************

# 设置连接redis的密码
# redis速度相当快,一个外部用户在一秒钟进行150K次密码尝试,需指定强大的密码来防止暴力破解
requirepass set_enough_strong_passwd

# 重命名一些高危命令,用来禁止高危命令
rename-command FLUSHALL ZYzv6FOBdwflW2nX
rename-command CONFIG aI7zwm1GDzMMrEi
rename-command EVAL S9UHPKEpSvUJMM
rename-command FLUSHDB D60FPVDJuip7gy6l

# *********************************限制*********************************

# 限制同时连接的客户数量,默认是10000
# 当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息
# maxclients 10000

# 设置redis能够使用的最大内存。
# 达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key(设置过expire信息的key)
# 在删除时,按照过期时间进行删除,最早将要被过期的key将最先被删除
# 如果已到期或即将到期的key删光,仍进行set操作,那么将返回错误
# 此时redis将不再接收写请求,只接收get请求。
# maxmemory的设置比较适合于把redis当作于类似memcached 的缓存来使用
# maxmemory <bytes>

# 当内存达到最大值的时候Redis会选择删除哪些数据?有六种方式可供选择
# volatile-lru:只对设置了过期时间的key进行LRU(默认值) 
# allkeys-lru :删除lru算法的key   
# volatile-random:随机删除即将过期key   
# allkeys-random:随机删除   
# volatile-ttl : 删除即将过期的   
# noeviction :永不过期,返回错误 
# maxmemory-policy noeviction

# LRU和 minimal TTL 算法都不是精准的算法,而是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。
# Redis默认的会选择3个样本进行检测,你可以通过maxmemory-samples进行设置
# maxmemory-samples 3

# *********************************append only*********************************

# redis 默认每次更新操作后会在后台异步的把数据库镜像备份到磁盘,但该备份非常耗时,且备份不宜太频繁
# redis 同步数据文件是按上面save条件来同步的
# 如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失
# 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式
# 开启appendonly 模式后,redis将每一次写操作请求都追加到appendonly.aof文件中
# redis重新启动时,会从该文件恢复出之前的状态。
# 但可能会造成 appendonly.aof 文件过大,所以redis支持BGREWRITEAOF指令,对appendonly.aof重新整理,默认是不开启的。
appendonly no

# 默认为appendonly.aof。
appendfilename "appendonly.aof"

# 设置对appendonly.aof 文件进行同步的频率,有三种选择always、everysec、no,默认是everysec表示每秒同步一次。
# always 表示每次有写操作都进行同步
# everysec 表示对写操作进行累积,每秒同步一次
# no表示等操作系统进行数据缓存同步到磁盘,都进行同步,everysec表示对写操作进行累积,每秒同步一次
# appendfsync always
# appendfsync everysec
# appendfsync no


# 指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞
no-appendfsync-on-rewrite yes

# 指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次afo文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite
auto-aof-rewrite-percentage 100

# 指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite
auto-aof-rewrite-min-size 64mb

# Redis启动加载aof文件,如果发现末尾命令不完整则自动截掉,成功加载前面正确的数据。如果设置为no,遇到此类情况,Redis启动失败,用redis-check-aof工具手工修复
aof-load-truncated yes

# *********************************Lua*********************************

# 一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000
lua-time-limit 5000

# *********************************集群配置*********************************

# 打开redis集群  
# cluster-enabled yes

# cluster配置文件(启动自动生成)  
# cluster-config-file nodes-6379.conf

#节点互连超时时间
# cluster-node-timeout 15000

# 如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点
# 如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移
# 假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点
# 注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作
# cluster-slave-validity-factor 10

# 主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移
# cluster-migration-barrier 1

# 在部分key所在的节点不可用时,如果此参数设置为”yes”(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作
# cluster-require-full-coverage yes

# *********************************慢日志部分*********************************

# slowlog-log-slower-than表示slowlog的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微妙,也就是10ms 
slowlog-log-slower-than 10000

# slowlog-max-len表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列
slowlog-max-len 128

# 服务端内部的延迟监控稍微麻烦一些,因为延迟记录的默认阈值是0。尽管空间和时间耗费很小,Redis为了高性能还是默认关闭了它。所以首先我们要开启它,设置一个合理的阈值,例如下面命令中设置的100ms:
latency-monitor-threshold 0

# keyspace事件通知
notify-keyspace-events ""

# *********************************高阶配置*********************************

# 当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# list数据类型多少节点以下会采用去指针的紧凑存储格式
# list数据类型节点值大小小于多少字节会采用紧凑存储格式
list-max-ziplist-entries 512
list-max-ziplist-value 64

# set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储
set-max-intset-entries 512

# zsort数据类型多少节点以下会采用去指针的紧凑存储格式
# zsort数据类型节点值大小小于多少字节会采用紧凑存储格式
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog 稀疏表示字节限制,这个限制包含了16个字节的头部,当一个HyperLogLog使用sparse representation超过了这个显示,它就会转换到dense representation上
hll-sparse-max-bytes 3000

# Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用
# 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。
# 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存
activerehashing yes

# 客户端buffer控制。在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力。如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除
# 指令格式:client-output-buffer-limit <class> <hard> <soft> <seconds>,其中hard表示buffer最大值,一旦达到阀值将立即关闭连接
# soft表示"容忍值",它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也将立即关闭连接,如果超过了soft但是在seconds之后,buffer数据小于了soft,连接将会被保留
# 其中hard和soft都设置为0,则表示禁用buffer控制.通常hard值大于soft
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内部调度(进行关闭timeout的客户端,删除过期key等等)频率
hz 10

# aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数
aof-rewrite-incremental-fsync yes

redis的主从设置、集群搭建、性能监控以及安全设置等都需要通过配置来进行管理,配置文件的重要性不言而喻。后边的实战将详细讲解这些方面的内容,敬请期待~

    原文作者:Uncle阳
    原文地址: https://www.jianshu.com/p/22cb849c2bb4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞