redis-配置详解(基础篇)


# 可以配置包含其他redis配置,可以使得配置更清晰化
# include /path/to/local.conf

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
################################## NETWORK #####################################

# 开启绑定ip,如果配置了,只能这个ip才能访问,建议不配置
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1(加::1表示绑定本机的ipv6 localhost)
# 接受所有来自于可用网络接口的连接
bind 0.0.0.0

# 是否可以远程连接,建议关闭
protected-mode no

# 设置端口
port 3036

# 设置参数是确定TCP连接中完成的长度(这个值不能大于linux内核/proc/sys/net/core/somaxconn值,
当系统并发量大并且客户端缓慢的时候,可以参考的设置这个值,系统一般默认是128,可以更改这个值)
tcp-backlog 511

# 设置客户端空闲超时timeout,服务端会自动断开连接;设置0,表示服务端不会主动去断开
timeout 0

tcp-keepalive 300

################################# GENERAL #####################################

# 是否使用守护线程在后台执行,yes,在后台执行 no:不在后台执行 此时redis将一直运行,除非手动kill该进程
daemonize yes

# 是否开启守护线程,开启守护线程,使用一下三种模式
#   supervised no      不监督
#   supervised upstart 使用upstart
#   supervised systemd 使用systemd
#   supervised auto    
#   没理解        
supervised no

# 设置redis,进程文件 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis_6379.pid

# 错误输出级别
loglevel error
# 日志输出目录
logfile "/xx/redis.log"
# 是否开启系统日志
# syslog-enabled no
# 日志前缀标语
# syslog-ident redis
# syslog-facility local0

# 数据库数量
databases 16

# 是否开启ascii的redis-logo
always-show-logo yes

################################ rdb快照配置  ################################

# rdb 快照频率
# 900秒内 有1个指令,快照一次
# 300秒内 有10个指令,快照一次
# 60秒内  有10000个指令,快照一次
save 900 1
save 300 10
save 60 10000

# 如果rdb持久出现错了。是否可以继续使用,yes是打开不能操作。no关闭,持久化异常后也能继续操作
stop-writes-on-bgsave-error yes

# 配置存储到本地是否需要使用lzf压缩;压缩会占用cpu超过,关闭的话,文件会过大。所以建议打开。
rdbcompression yes

# 是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的
容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes

# 指定本地数据库文件名
dbfilename dump.rdb

# 保存文件目录地址 rdb和aof都会写入到装个目录下
dir ./

################################# 主从复制 #################################

# 主库的ip及端口 5.0以上使用replica的指令
# slaveof <masterip> <masterport>

# 主库,如果设置密码,需要加主库的密码
# masterauth <master-password>

# 当从节点与主节点连接失败了。这是yes,则表示从节点继续应答客户端;设置no,所有连接到这台从节点的客户端,会提示正在与主节点进行同步
slave-serve-stale-data yes

# 从节点只读。
slave-read-only yes

# 新的从节点或者从节点与主节点长期没有增量同步,需要全量同步
# 使用磁盘模式,会在从节点上新建redis快照的文件(根据配置)
# 使用socket方式,同步数据到从节点,不落地磁盘上,效率更高, 主节点可并行传输到多个从节点上。
repl-diskless-sync no

# 从节点,配置x秒,向主节点ping一次。
# repl-ping-slave-period 10

# 同时时间设置
# repl-timeout 60

# 使用更少的宽带同步,但是会导致从节点数据延迟,建议不设置
repl-disable-tcp-nodelay no

# 当从节点与主节点断开后,主节点同步的数据会缓存到缓冲区;开启这个配置,设置大小
# 如果不开启配置,则不缓存
# repl-backlog-size 1mb

# 当从节点一直没起来,设置这个数据为了是否缓冲区,如果配置0,则永久不释放。
# repl-backlog-ttl 3600

# 选举权重,越小权重越大,设置0,不参与
slave-priority 100

# 副本同步会存在延迟,至少3个写操作,时间延迟小于等于10秒的副本,主节点就停止写入操作。这两个参数只要一个设置为0,就禁用该功能
# min-slaves-to-write 3
# min-slaves-max-lag 10
#
# redis服务没有跟哨兵在同一个网络,比如:在容器里面跑,info replication查看到IP和端口,哨兵就有可能访问不到,这时候就需要,指定对外的IP和端口,提供给哨兵检测。
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234

################################## 密码/保密设置 ###################################
# 密码设置
requirepass fe.123456

# 因为这些指令比较的危险,不能再生产执行,所以可以改写指令改成其他的。
# 比如:rename-command 原指令  改写后的指令
# 在配置文件中添加 ,使用"" 表示禁用
#rename-command KEYS ""
#rename-command SHUTDOWN ""
#rename-command CONFIG ""
#rename-command FLUSHALL ""
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

################################### CLIENTS ####################################

# 所有连接server连接,超过10000,就会报连接数量不足,拒绝连接。
# maxclients 10000

############################## redis内存管理(内存淘汰策略和算法) ################################

# 设置内存使用大小,默认不设置,就是系统内存大小,不建议不设置
# 因为操作redis,有些操作是不计算到redis内存的。默认不设置,超过内存就报错
# maxmemory <bytes>

# 内存清除策略, 超过内存,会不接受更新指令,但是可以操作get指令
# maxmemory-policy noeviction

# LRU、LFU和最小TTL算法不是精确算法,而是近似算法
算法(为了节省内存),因此您可以根据速度或精确默认情况下,Redis将检查五个键并选择最近使用较少,可以使用以下命令更改样本大小
配置指令。默认值为5会产生足够好的结果。10非常接近真正的LRU,但成本更高的CPU。3更快,但不是很准确。
# maxmemory-samples 5

############################# LAZY FREEING ####################################
# lazy free可以认为是惰性删除或延迟释放,针对bigkey也有很好的释放策略,有效的针对bigkey带来的性能问题
# lazyfree-lazy-eviction 针对redis的超过了maxmeory,并设置了meory-prolicy情况下,在淘汰,释放使用lazy-free
lazyfree-lazy-eviction no
# lazyfree-lazy-expire 针对redis设置ttl淘汰策略,达到过期后,是否使用lazy-free
lazyfree-lazy-expire no
# lazyfree-lazy-server-del 是针对已经存在的key,会存在隐式的带来del操作,比如rename操作,就是先del操作。如果有bigkey,就可能会带来阻塞的情况
lazyfree-lazy-server-del no
# slave-lazy-flush 针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景, 参数设置决定是否采用异常flush机制
slave-lazy-flush no

############################## aof的配置 ###############################

# 是否开启aof
appendonly yes

# The name of the append only file (default: "appendonly.aof")
# aof文件名
appendfilename "appendonly.aof"

# redis aof刷盘策略 
# 设置no,则由操作系统来保证数据刷盘
# 设置always,这里有xa的操作。先执行更新到redis缓存,在执行刷盘操作,特别是有主从
# 设置everysec,先保存到缓冲区,一每秒的时间刷盘,如果能接受一秒丢失,建议使用这个。如果是磁盘io过多,其实设置这个也是弊端很大
appendfsync always
# appendfsync everysec
# appendfsync no

# aof设置内存淘汰策略是always/everysec,在刷盘的时候,有大量的磁盘io,导致刷盘的时候,阻塞时间过长,
#如果这里开启,表示在aof重写的时候会把需要刷盘的数据暂存到缓冲区里面;等磁盘io降下来后,在进行刷盘,设置开启,也会有弊端,如果redis宕机了,就会丢失数据。
# aof设置none,会根据linux上刷盘时间默认 30秒,刷新到缓冲区。
no-appendfsync-on-rewrite no

# aof重写配置,当目前的aof文件大小超过上一次的aof重写的百分比,就进行重写;即当aof文件增长到一定的大小
# 就会调用bgrewriteof进行重写aof文件
auto-aof-rewrite-percentage 100
# 设置重写的最小标准大小,防止重写的时候文件过小,进行重写。
auto-aof-rewrite-min-size 64mb

# aof文件末尾可能会被截断,如果这里不设置yes,被截断,在重启的时候,重新加载aof文件,就会加载失败,拒绝重启
# 设置yes,会触发用户事件,通知到用户,告知错误。并且可以进行重启redis
aof-load-truncated yes

# 加载aof文件,识别aof以redis前缀的开头,字符串并加载带有前缀rdb的文件,作为aof文件的尾巴。进行加载
aof-use-rdb-preamble no

################################ lua 脚本  ###############################

# lua脚本执行最大的时间
# lua脚本的好处①高效,在服务器上执行,节省了网络传输开销等,特别lua脚本,执行多个脚本,好处就体现出来了。
# lua脚本的好处②原子性;一个业务需要多个指令完成,lua脚本比较好的选择
# lua脚本的坏处:那就是如果你lua过于复杂,假如在里面取bigkey操作了,就会阻塞;执行时间过长;
lua-time-limit 5000

################################ redis cluster 集群 ###############################
#
# 是否开启集群
# cluster-enabled yes

# 集群配置文件名,这个文件不需要人为配置,集群会自动更新这个配置
# cluster-config-file nodes-6379.conf

# 节点连接超时时间(毫秒)
# cluster-node-timeout 15000

# 在master宕机后,所有slave节点都会申请成为master;当由于redis节点与master连接过久,数据过于陈旧了。可能不适合做为master
#  通过过下公式可以来判断是否不适合
#   (node-timeout * slave-validity-factor) + repl-ping-slave-period
#  假设15秒超时 * 这个默认配置10 + 从节点配置ping一次时间
# 15 * 10 + 10  = 160
# cluster-slave-validity-factor 10

# master的slave节点大于这个配置,则尝试把这个节点迁移到其他的master上。
# cluster-migration-barrier 1

# 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全
部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而
造成很长时间数据不一致
# cluster-slave-no-failover no

########################## CLUSTER DOCKER/NAT support  ########################

# In certain deployments, Redis Cluster nodes address discovery fails, because
# addresses are NAT-ted or because ports are forwarded (the typical case is
# Docker and other containers).
#
# In order to make Redis Cluster working in such environments, a static
# configuration where each node knows its public address is needed. The
# following two options are used for this scope, and are:
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port
#
# Each instruct the node about its address, client port, and cluster message
# bus port. The information is then published in the header of the bus packets
# so that other nodes will be able to correctly map the address of the node
# publishing the information.
#
# If the above options are not used, the normal Redis Cluster auto-detection
# will be used instead.
#
# Note that when remapped, the bus port may not be at the fixed offset of
# clients port + 10000, so you can specify any port and bus-port depending
# on how they get remapped. If the bus-port is not set, a fixed offset of
# 10000 will be used as usually.
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

################################## SLOW LOG ###################################

# 记录执行慢的指令,建议开启,这里单位是微妙
# 1000000 这里就是1秒;10000 = 100毫秒 = 0.1秒
# 设置0,强制记录所有,设置 < 0 则不记录慢日志
slowlog-log-slower-than 10000

# 慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足
够的内存就行。你可以通过 SLOWLOG RESET 来释放内存
# Redis使用了一个列表来存储慢查询日志。Redis 使用了一个List 实现了一个先进先出的队列
slowlog-max-len 128

# 可通过slowlog get 数量 slowlog len | slowlog reset

################################ LATENCY MONITOR ##############################

# 延迟监控,设置为0,关闭延迟监控
latency-monitor-threshold 0

############################# 事件通知 ##############################
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# key事件通知:分为键空间 & 键事件通知
# __keyspace#第几个库_: keyPattern 操作类型del,set 
# 这里设置key
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################

# hash命令,个数及长度大于阈值就进行压缩,这里内部是为了节省空间
hash-max-ziplist-entries 512
hash-max-ziplist-value 64


list-max-ziplist-size -2

# list指令,是否可以进行压缩 0:表示禁止列表压缩 1:表示内部节点压缩
# 头部 -> 节点 -> 节点 ...> 尾部;内部节点进行压缩
list-compress-depth 0

set-max-intset-entries 512

# zset指令,个数及长度大于阈值就进行压缩,这里内部是为了节省空间
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog 指令设置
activerehashing yes

# 客户端输出缓冲区阈值设置,达到这些上限,客户端会断开连接
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
 
# client-query-buffer-limit 1gb

# proto-max-bulk-len 512mb

hz 10

aof-rewrite-incremental-fsync yes

# lfu-log-factor 10
# lfu-decay-time 1

########################### ACTIVE DEFRAGMENTATION #######################
# 为什么会有redis内存碎片?
# Redis存储存储数据的时候向操作系统申请的内存空间可能会大于数据实际需要的存储空间或者频繁的进行修改 就会导致内存碎片
# redis 内存碎片整理,默认是关闭,打开就开启内存碎片整理;要么就直接重启
# 要么设置这个地方
# activedefrag yes

# 内存碎片大于100m的时候就进行清理
# 内存碎片:used_memory_rss - used_memory
# active-defrag-ignore-bytes 100mb

# 内存碎片率计算:used_memory_rss(从操作角度来看,给redis分配的空间)/used_memory (redis使用的内容) ; 如果这里超过1.5,内存碎片就比较严重 
# active-defrag-threshold-lower 10

# Maximum percentage of fragmentation at which we use maximum effort
# active-defrag-threshold-upper 100

# 内存碎片清理占用cpu比例不读与25
# active-defrag-cycle-min 25

# 内存碎片清理占用cpu比例不读与75
# active-defrag-cycle-max 75

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值