Redis 配置详解
3293 字
16 分钟
Redis 配置详解
1 基础配置
#带配置文件的启动方式cd /usr/local/redis./bin/redis-server redis.node1.6379.conf
#将指定配置文件包含进当前配置文件include /usr/local/redis/redis-pub.conf
#在redis配置文件中# 1k = 1000 bytes# 1kb = 1024 bytes# 1m = 1000000 bytes# 1mb = 1024*1024 bytes# 1g = 1000000000 bytes# 1gb = 1024*1024*1024 bytes# 并且这些单位字符不分大小写, 1MB 1mb 1mB 1Mb都是一样。2 网络配置
#绑定ipbind 0.0.0.0#绑定端口port 6379#是否保护模式#no,外部可以直接访问#yes则按照绑定ip、端口,如果设置了密码,还需匹配密码protected-mode yes#客户端连接,空闲多少秒关闭,0不关闭timeout 0#定时向client连接发送tcp ack探测是否存活tcp-keepalive 300#TCP完成3次握手的连接, 连接队列总数#但最终由linux内核决定最终的队列总数#/proc/sys/net/ipv4/tcp_max_syn_backlog 半连接未完成3次握手的 连接队列总数#/proc/sys/net/core/somaxconn 已建立连接的 连接队列总数#此值须与somaxconn保持一致,建议设为2048,同时适当提高tcp_max_syn_backlog 半连接数量tcp-backlog 5113 通用配置
#守护进程方式启动,后台运行,并将进程pid号写入指定文件daemonize yes#管理守护进程的方式,默认no,一般无需改动#可选linux的upstart/systemdsupervised no#守护进程方式启动时,pid号写入的文件pidfile /usr/local/redis/redis.noed1.6379.pid
#日志等级,按日志量debug > verbose > notice(生产) > warning#debug,输出打量调试信息#verbose,冗长的,但是比debug输出信息少#notice,生产模式#warning,只输出警告信息loglevel notice#日志文件路径logfile "/usr/local/redis/logs/redis.node1.6379.log"#数据库数量,默认16databases 16#启动时,是否输出logo信息always-show-logo yes4 快照配置(RDB 持久化)
RDB 持久化,即按频率规则配置,定期将数据快照写入磁盘,格式为 rdb
#默认持久化配置save 900 1 #900秒内,操作了1个key则持久化save 300 10 #300秒内,操作了10个key则持久化save 60 10000 #60秒内,操作了1w个key则持久化
#持久化出现错我是否继续工作,默认yesstop-writes-on-bgsave-error yes#是否压缩rdd文件,会消耗一定CPU资源,默认yes, 可根据实际情况关闭rdbcompression yes#是否校验rdb文件的数据,会消耗一定CPU资源,默认yes,可根据实际情况关闭rdbchecksum yes#rdb文件名称dbfilename dump.rdb#主从模式,是否同步删除rdb文件,默认no,也不推荐开启rdb-del-sync-files no#磁盘数据文件保存目录,默认redis运行时根目录dir /usr/local/redis/data/5 AOF 持久化
定期将所有指令写到磁盘,默认关闭。作为 rdb 的辅助,最大程度避免数据丢失
#是否开启AOF持久化,默认关闭appendonly no
#aof持久化文件的名称,路径跟随dir参数appendfilename "appendonly.aof"
#aof频率,默认everysec,每秒写一次磁盘(fsync)#always 每一个指令都写一次磁盘,耗费资源,效率低#no 完全由linux的fsync决定,大部分linux是30秒一次fsyncappendfsync everysec
#aof文件正在后台rewrite期间是否调用fsync写磁盘#默认no,表示调用no-appendfsync-on-rewrite no
#aof文件增长百分比,即当前aof文件比上次重写的文件,增长大小的比例#默认100% 倍数增长auto-aof-rewrite-percentage 100#aof文件重写条件,至少达到此参数大小,作用于首次重写文件,默认64mbauto-aof-rewrite-min-size 64mb#redis恢复数据时,忽略最后一条有错误的指令,默认yes#配置no的话,如果aof文件最后一条指令有问题,直接恢复失败aof-load-truncated yes
#AOF重写的时候,将把rdb快照和aof记录的指令一起写入,默认yes#这种混合持久化,可以大大提高数据多的实例,重启加载数据的速度aof-use-rdb-preamble yes6 安全配置
#访问密码,默认未开启此配置,无需匹配密码requirepass 12345567 客户端配置
# 同一时间最大的客户端连接数,默认不开启maxclients 100008 内存管理配置
#设置最大内存,推荐物理内存的3/4,默认未开启配置,不限制内存上限maxmemory 1gb
#内存达到上限后的策略,默认noeviction策略#volatile-lru 使用LRU算法,在设置了过期时间的key中选择,淘汰最后使用时间最远的#allkeys-lru 使用LRU算法,在所有key中选择,淘汰最后使用时间最远的,推荐#volatile-lfu 使用LFU算法,在设置了过期时间的key中选择,淘汰最不常使用的#allkeys-lfu 使用LFU算法,在所有key中选择,淘汰最不常使用的,推荐#volatile-random 在#allkeys-random 在所有key中进行随机淘汰#volatile-ttl 淘汰过期时间最近的key#noeviction 不淘汰任何key,对继续写入请求响应错误# 如OOM command not allowed when used memorymaxmemory-policy allkeys-lru
#LRU/LFU/TTL淘汰策略算法,不是精准算法,是近似算法#设置样本数量,提高准确度。默认5折中,3最快,10最精确#如果是LRU,样本数量会增加一定的CPU资源占用maxmemory-samples 5
#从节点,忽略内存上限。#由于从节点不会主动写数据 删数据 自动淘汰,这些操作是通过主节点实现然后将命令发送给从节点#如果从节点不忽略内存上限,会有数据一致性的问题。replica-ignore-maxmemory yes
#在一个过期key扫描周期内,过期的key,仍然保留在内存的比例#默认1即一个过期key的淘汰周期里,保留10%#值越小,代表保留的key越少,需要删除的key更多,因此消耗CPU资源增加#参数hz默认10,1秒10次异步线程扫描过期key,即每100ms扫描一次过期keyactive-expire-effort 19 惰性释放配置
惰性释放(懒删除),即先摘除 key 的索引,实际删除操作使用异步线程去执行。在惰性删除机制之前,如一个元素非常多的集合,直接删除会很低效,导致其它连接发起的指令阻塞。
#针对内存达到上限后,触发淘汰策略时, 进行懒删除# 默认no,建议no,毕竟已经达到内存上限# 如果大key较多的库,也可以yes,尽快减轻阻塞azyfree-lazy-eviction no
#针对设置自动过期的key,进行懒删除,默认no#建议开启lazyfree-lazy-expire yes
#针对隐式del指令,进行懒删除#如rename 改名, mv 移库,都是隐式删除原key#建议开启lazyfree-lazy-server-del yes
#此配置针对 从节点的flush的操作,是否进行懒删除#比如 从节点全量同步主节点数据时,会先flush清空数据#如果是迁移或预扩节点准备数据,可以开启,但生产使用后建议关闭replica-lazy-flush no
#使del指令和unlink一样,异步线程做实际删除lazyfree-lazy-user-del no10 多线程配置
6.0 后,Redis 开始引入多线程配置,但不是真正多线程读写内存数据,执行指令扔是单线程顺序执行。多线程部分只是优化网络 I/O,
# 是否开启多线程模式,默认no,io-threads-do-reads no
#线程数,官方建议4核时,2-3个线程;8核时6个线程io-threads 411 主从复制
实践中一般不单独使用主从复制,需要配合哨兵模式,便于故障后自动选新 master 节点。
实践中的高可用方式,一般是 主从+哨兵,或者 Cluster集群模式,以及三方中间件代理,类似数据分片中间件,如 codis。
####################### 主从复制 START ###########################
#slave节点配置此参数,启动时便与master建立主从关系#也可以在实例运行后,在slave节点使用slaveof命令建立关系replicaof masterIp masterPort#5.0之前slaveof ip port
#如果使用此配置启动的节点作为slave从节点,此参数填master节点的密码masterauth masterPwd#从节点与主节点断连,或从节点正在拷贝数据时,是否提供查询服务#默认yes 提供服务replica-serve-stale-data yes#从节点是否只读,默认yes,推荐yesreplica-read-only yes
#主从同步,新节点需要完整数据,#此参数决定数据快照rdb传输的方式#默认no,不使用无磁盘,即master先写盘rdb文件,再将文件传送到从节点#yes表示使用无盘,master创建一个新进程,直接把rdb ,socket到从节点repl-diskless-sync no#无盘同步数据的延时参数,默认5#即master 延迟多少秒后开始传送数据流repl-diskless-sync-delay 5
#新节点同步数据,是否无盘加载数据#disabled 不要使用无磁盘加载,先将rdb文件存储到磁盘,推荐#on-empty-db 只有在完全安全的情况下才使用无磁盘加载#swapdb 直接从Scoket套接字加载数据repl-diskless-load disabled
#从节点向master节点进行心跳检测的周期,默认10srepl-ping-replica-period 10# 从节点向master节点检查心跳,超时时间,默认60秒repl-timeout 60
#同步是否禁用TCP_NODELAY#默认no 不禁用,即开启TCP_NODELAY,禁用TCP Nagle算法#同步传输的TCP连接会按TCP_NODELAY拆成小包,降低延迟repl-disable-tcp-nodelay no
#从节点端口后这段期间的变更的数据缓冲,默认1mb#断开的从节点重新连接,只需同步部分数据即可repl-backlog-size 1mb#主从断开多少秒后,清理这期间的数据缓冲# 默认3600秒,设0表示永不清理repl-backlog-ttl 3600
#哨兵选举新master时,这个值越小越容易被选中#0 表示永不被选中replica-priority 100#5.0之前 slave-priority
#组合参数,3和10为例表示:#若master节点统计出连续3个从节点的连接,延迟都超过10秒#则master节点不再接受写请求#建议 设为0min-replicas-to-write 3min-replicas-max-lag 10
#真实ip,比如Docker NAT环境replica-announce-ip 127.0.0.1#真实端口replica-announce-port 6379
####################### 主从复制 END ###########################12 哨兵配置
哨兵是配合主从复制使用的,动态管理各个节点主从关系。
部署参考: [[RedisSentinel笔记]]
#哨兵启动方式:cd /usr/local/redis./bin/redis-sentinel sentinel-node1.conf
#作为守护进程运行daemonize yes
#守护进程运行时,pid号写入的文件pidfile /usr/local/redis/cluster/sentinel/node01.pid
#日志文件路径logfile "/usr/local/redis/cluster/sentinel/log/node01.log"
#工作目录dir "/usr/local/redis/cluster"
# 绑定ipbind 0.0.0.0# 绑定端口port 4001
#定义监听的集群,指向master节点ip和端口,# 2代表,2个哨兵节点都确认master主观下线,则标记为正式的客观下线,触发故障转移sentinel monitor masterName masterIp masterPort 2
#哨兵判定master失效的时间,单位秒#超过这个时间仍检查不到心跳则判断master故障sentinel down-after-milliseconds 60000
#故障转移时,新的slave节点,从新的master同步数据的超时时间#单位毫秒,超时不影响slave节点和master的关系sentinel failover-timeout masterName 180000
#故障转移时,多少个slave可以同时从新的master节点同步数据#数字越小,故障转移时间越长#数字越大,意味着更多的slave节点不可用#可以将从节点参数replica-serve-stale-data yes开启# 复制时可读,但不能保证数据一致性( 该参数5.0之前使用slave-serve-stale-data)sentinel parallel-syncs masterName 3
#主节点密码sentinel auth-pass sineMaster 12312345613 Cluster 集群
一般情况,除非主从+哨兵无法满足需求,才考虑 Redis Cluster 集群模式(数据分片)
部署参考: RedisCluster笔记
#开启集群模式的节点实例都启动后,使用redis-cli命令建立集群关系#./redis-cli --cluster create ip1:port ip2:port ip3:port --cluster-replicas 1 -a 密码
####################### 集群 START ##########################开启集群, 默认单例cluster-enabled yes
#集群节点自从持久化的配置文件, 非编辑的配置cluster-config-file /usr/local/redis/cluster/nodes1-6379.conf
#集群节点的失联时间,单位毫秒,默认15秒#超过时间,则标记节点故障#如果是master节点超时,则触发master选举cluster-node-timeout 15000
#从节点,配合cluster-node-timeout参数#表示从节点与故障主节点断开时长, 如果 此参数为5,表示超过 5次 * 15000毫秒之后#这个从节点的数据将不参与故障恢复#一般为了高可用,设为0,始终可以参与故障恢复cluster-replica-validity-factor 5#6.0前cluster-slave-validity-factor
#master节点,必须有多少个slave从节点cluster-migration-barrier 1
#redis集群需要把16384个分片槽点放到不同达到节点#默认yes 分片槽点都正常才能对外提供服务#建议设为no,保证没有分片问题的节点能够提供服务cluster-require-full-coverage yes
#当集群节点被标记为失败,或者无法满足master要求的从节点数量时#该节点不提供服务,避免数据不一致。默认不提供服务 nocluster-allow-reads-when-down no####################### 集群 END #########################文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
Redis 杂七杂八
📑数据库 Redis 乱七八糟不好分类的知识点都写到这里了
2
Redis 常用命令
📑数据库 使用 Redis 中经常使用到的命令
3
Redis 哨兵模式笔记
📑数据库 Redis 哨兵模式部署与高可用测试
4
Redis 备份与恢复
📑数据库 Redis 备份与恢复,保证数据完整
5
Redis 集群模式笔记
📑数据库 Redis 集群模式部署与高可用测试
随机文章 随机推荐