一份配置搞懂redis

一份配置搞懂redis

#启动命令
# ./redis-server /path/to/redis.conf

################################## 配置文件包含 ###################################

#抽取公共配置用于包含
# include /path/to/local.conf
# include /path/to/other.conf

################################## 模块配置 #####################################

# 加载模块linux动态库
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## 网络配置 #####################################

# 默认如果不设置bind redis将监听所有范围。这样是不安全的,建议绑定内网访问地址
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1

##保护模式,如果开启则假如没有设置bind 和密码的情况下将只允许回环地址连接。即127.0.0.1
protected-mode yes

#端口配置,默认6379
port 6379

#此参数与内核参数net.core.somaxconn相关,通过sysctl -n net.core.somaxconn命令查看内核值为128
#可通过sysctl.conf文件进行修改
#此参数必须不大于该内核参数。此参数定义TCP连接队列大小。tcp三次握手时产生半连接和全连接在两个
#不同的队列中SYN QUEUE队列,和accept queue。
#说的直白点就是支持的连接数。支持多少客户端接入。假如你程序经常出现连接报错,可以尝试调整系统
#内核参数和这个值
tcp-backlog 511

# 在unix系统下需要指定redis.sock连接文件并指定权限为700
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# 连接空闲N秒后释放客户端连接,0为不释放
timeout 0

# 与客户端维持TCP心跳时间间隔300秒
tcp-keepalive 300

################################# 通用配置 #####################################

# 守护进程运行redis将会默认打印pid到该目录 /var/run/redis.pid
daemonize yes 

# 如果使用upstart or systemd运行redis,redis可以与supervisor交互
supervised no

# 配置指定pidfile打印的目录
pidfile /var/run/redis.pid

# 指定日志等级 debug/verbose即info/notice/warning
loglevel notice

# 配置日志文件位置和名称
logfile /home/redis/redis.log 

# 启用syslog标准logger,这是一个标准内容不扩展。相关扩展https://datatracker.ietf.org/doc/rfc3164/?include_text=1
# syslog-enabled no

# 指定系统日志身份
# syslog-ident redis

# 指定日志级别. 必须是USER或者在LOCAL0-LOCAL7之间
# syslog-facility local0

# 指定redis库数量,默认是16个。这个库数量是可配置的,集群模式下多库不可使用
databases 16

# 显示logo
always-show-logo yes

################################ 快照配置  ################################
# 快照RDB配置save等同于bgsave命令异步fork子进程使用copy-on-write写时复制技术保障生成的
# RDB文件时点性。而命令中的save会阻塞父进程,导致服务不可用。
#   save ""

save 900 1
save 300 10
save 60 10000

# 在执行RDB时可能会返回错误,当返回错误时是否停止。三种错误情况
# 1、内存分配失败时
# 2、aof正在写入日志时
# 3、当前已经有一个bgsave正在执行时
stop-writes-on-bgsave-error yes

# 使用lzf压缩rdb文件
rdbcompression yes

# 对RDB数据进行CRBC64校验。设置为yes时 校验码会写入RDB文件尾
rdbchecksum yes

# 生成的RDB文件名称
dbfilename dump.rdb

# 指定RDB和AOF生成路径
dir /home/redis/redis-cluster/ 

################################# 副本配置 #################################

# 主从复制是异步的
#设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
# slaveof <masterip> <masterport>

# 当 master 服务设置了密码保护时,slav 服务连接 master 的密码
masterauth xxxpassword

# 参数设置成yes,主从复制中,从服务器可以响应客户端请求;
# 参数设置成no,主从复制中,从服务器将阻塞所有请求,有客户端请求时返回“SYNC with master in progress”;
slave-serve-stale-data yes

# 集群下设置从节点是否可写在redis2.6之后默认是只读
slave-read-only yes


#主从复制策略的两种模式
#1、Disk-backed 主节点fork一个进程写RDB文件到磁盘,然后通过父进程传给所有从节点
#2、Diskless redis主节点fork一个进程直接通过socket写到从节点的RDB文件中。
#默认是先写入磁盘
repl-diskless-sync no

# 当复制开始时新接入的从节点是无法复制的,所以这里需要设置一个延时时间确保足够多的从节点接入后才开始复制
repl-diskless-sync-delay 5

# 从节点与主节点的ping心跳间隔时间10秒,redis5.0变为repl-ping-replica-period
# repl-ping-slave-period 10

# 设置主从复制的连接超时时间,这个时间必须比心跳时间要大。
#
# repl-timeout 60

# 同步之后的后续的同步是否设置成TCP_NODELAY
# 设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟40毫秒,造成master与slave数据不一致
# 设置成no,则redis master会立即发送同步数据,没有延迟
repl-disable-tcp-nodelay no

# 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,
# 因此当一个slave要重连时经常是不需要完全同步的,执行局部同步就足够了。
# backlog设置的越大,slave可以失连的时间就越长
# repl-backlog-size 1mb

# 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。
# 如果值为0则表示永远不释放这部份内存。
# repl-backlog-ttl 3600

# slave端的优先级设置,值是一个整数,数字越小表示优先级越高。
# 当master故障时将会按照优先级来选择slave端进行恢复。
# 如果值设置为0,则表示该slave永远不会被选择。
# 这个参数是提供个sentinel哨兵使用的
# 默认值是100
slave-priority 100

# 设置当一个master端的可用slave少于N(3)个,延迟时间大于M(10)秒时,不接收写操作.
# 其中一个为0禁用此配置。默认min-slaves-to-write为0
# min-slaves-to-write 3
# min-slaves-max-lag 10

# 当前为slave节点时配置,常用于端口转发或NAT场景下,对Master暴露真实IP和端口信息
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234

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

# 指定密码
requirepass xxxpassword

################################### 客户端配置 ####################################

# 设置客最大客户端连接数。
# maxclients 10000

############################## 内存管理 ################################

# 指定内存使用限制,当到达指定限制的时候,redis将会根据淘汰策略删除keys。
# 如果无法根据淘汰策略移除keys或者淘汰策略设为为不淘汰,则redis将会回应需要更多内存的错误信息给写入指令
# 但是会继续提供get请求的服务。0为不限制
# maxmemory <bytes>
maxmemory 3221225472

# 五种淘汰策略
#
# volatile-lru -> 过期时间LRU算法淘汰.
# allkeys-lru -> key的LRU淘汰
# volatile-lfu -> keys的过期时间LFU淘汰
# allkeys-lfu -> 所有Keys的LFU淘汰
# volatile-random -> 任意移除含过期时间的key
# allkeys-random -> 任意移除一个key
# volatile-ttl -> 移除即将过期的key
# noeviction -> 不淘汰,写请求的时候会返回错误信息
#
# LRU 最近最少使用
# LFU 最小频率使用
#
# LRU, LFU and volatile-ttl 近似随机算法
#
# 无论使用了那种策略,当没有key可淘汰时写操作将返回错误信息
# maxmemory-policy noeviction

#
# LRU算法的样本数量设置默认值即可
#
# maxmemory-samples 5

############################# LAZY FREEING ####################################

# 淘汰是否删除
lazyfree-lazy-eviction no
# key过期是否删除
lazyfree-lazy-expire no
# 内部删除,当rename发生的时候需要删除旧值
lazyfree-lazy-server-del no
#slave接收完RDB文件后是否后台清空数据
slave-lazy-flush no

############################## APPEND ONLY MODE ###############################

# AOF日志设置,是否记录日志

appendonly yes 

# AOF默认日志名称

appendfilename "appendonly.aof"

# 日志刷盘方式
# 1、always 每条命令刷盘一次,数据如果丢失仅丢一条
# 2、没秒中刷盘一次  数据如果丢失小余等于一个buffer
# 3、buffer满时刷盘一次 数据如果丢失等于一个buffer

appendfsync always
#appendfsync everysec
# appendfsync no

# 同时在执行bgrewriteaof操作和主进程写aof文件的操作时是否阻塞
# yes 阻塞,no非阻塞,但是可能造成数据丢失。丢失的情况是发生操作时,redis挂掉。
no-appendfsync-on-rewrite no

# 自动rewrite AOF日志文件配置
# 1、百分比
# 2、文件大小
# 以下配置表示当aof文件第一次达到64mb时发生rewrite,并记录当前大小,当再次增长百分百时再次rewrite
# 设置auto-aof-rewrite-percentage 0表示禁用rewrite功能。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# redis恢复时是否自动忽略最后一条指令,因为最后一条指令可能存在问题。
# 这种情况一般大家可以先查看最后一条指令是否有问题之后在操作,可以认为干预
aof-load-truncated yes

# AOF rewrite发生的时候是否使用RDB混合模式,即先执行RDB然后再顺序拼接命令的模式。
aof-use-rdb-preamble no

################################ LUA SCRIPTING  ###############################

# 限制lua脚本执行时间,为了防止lua脚本执行过长导致redis无法提供服务。设置0表示不限制
lua-time-limit 5000

################################ REDIS CLUSTER  ###############################
#
# 开启集群支持
#
cluster-enabled yes

# 集群配置文件集群节点发生变更时写入的文件。无需认为编辑
cluster-config-file /home/redis/redis-cluster/nodes-1.conf
# 集群节点超时时间
cluster-node-timeout 15000

# 如果设置为0,无论主设备和从设备之间的链路保持断开连接的时间长短,从设备都将尝试故障切换主设备。 
# 如果该值为正值,则计算最大断开时间作为节点超时值乘以此选项提供的系数,
# 如果该节点是从节点,则在主链路断开连接的时间超过指定的超时值时,它不会尝试启动故障切换。 
# 例如,如果节点超时设置为5秒,并且有效因子设置为10,则与主设备断开连接超过50秒的从设备将不会尝试对其主设备进行故障切换。
# 请注意,如果没有从服务器节点能够对其进行故障转移,则任何非零值都可能导致Redis群集在主服务器出现故障后不可用。 
# 在这种情况下,只有原始主节点重新加入集群时,集群才会返回可用
#
# cluster-slave-validity-factor 10

# 集群最少从设备数
#
# cluster-migration-barrier 1

# 如果集群未覆盖所有slots是否提供服务
# yes 不提供服务。等待所有槽点就绪后提供服务。
# no提供服务,丢失部分槽点数据。
#
# cluster-require-full-coverage yes

# 4.0cluster-slave-no-failover/5.0cluster-replica-no-failover
# 在主节点失效期间,从节点不允许对master失效转移,yes不故障转移,no进行故障转移
# cluster-slave-no-failover no

# In order to setup your cluster make sure to read the documentation
# available at http://redis.io web site.

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

# 集群docket/nat的支持。再docker环境下需要配置宿主机ip,否则集群节点跳转时会失败。
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

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

# 单位微秒,设置多长时间未慢日志,这里时10毫秒
slowlog-log-slower-than 10000

# 最多保存多少条慢日志,你可以通过 SLOWLOG RESET 来回收内存
slowlog-max-len 128

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

# 延迟监控,预定义时间毫秒。0为不启用
latency-monitor-threshold 0

############################# 事件通知机制 ##############################


#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
#可以选择以下组合
# 想让服务器发送所有类型的键空间通知和键事件通知,可以将选项的值设置为AKE
# 想让服务器发送所有类型的键空间通知,可以将选项的值设置为AK
# 想让服务器发送所有类型的键事件通知,可以将选项的值设置为AE
# 想让服务器只发送和字符串键有关的键空间通知,可以将选项的值设置为K$
# 想让服务器只发送和列表键有关的键事件通知,可以将选项的值设置为El
# 想让服务器发送key过期事件可以设置Ex
#
#  K     Keyspace events, published with __keyspace@<db>__ prefix.
#  E     Keyevent events, published with __keyevent@<db>__ prefix.
#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
#  $     String commands
#  l     List commands
#  s     Set commands
#  h     Hash commands
#  z     Sorted set commands
#  x     Expired events (events generated every time a key expires)
#  e     Evicted events (events generated when a key is evicted for maxmemory)
#  A     Alias for g$lshzxe, so that the "AKE" string means all the events.
notify-keyspace-events ""

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

# 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
#hash指定数量小余512个
hash-max-ziplist-entries 512 
#hash 字符串指定长度小余64字节
hash-max-ziplist-value 64

# -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。
# -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
# -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
# -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(默认值)
# -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。
list-max-ziplist-size -2

# 0: 是个特殊值,表示都不压缩。这是Redis的默认值。
# 1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
# 2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
list-compress-depth 0

# 添加的集合元素个数超过了512的时候,会导致intset转成dict
set-max-intset-entries 512

# 元素个数小余128个
zset-max-ziplist-entries 128
# 元素长度小余64字节
zset-max-ziplist-value 64

# HyperLogLog 稀疏模式的字节限制,包括了 16 字节的头,默认值为 3000。 当超出这个限制后 HyperLogLog 将有稀疏模式转为稠密模式。
hll-sparse-max-bytes 3000

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

# normal -> normal clients including MONITOR clients
# slave  -> slave clients
# pubsub -> clients subscribed to at least one pubsub channel or pattern
#
# 客户端输出限制
# Both the hard or the soft limit can be disabled by setting them to zero.
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

# 默认值是 10,范围是 1 到 500,超过 100 一般都不是一个好主意。 
# Redis 会通过调用内部函数来完成很多后台任务,比如关闭超时的客户端的连接,清除过期的 key,等等。
# Redis 通过 hz 设置的值来决定执行这些任务的频繁程度。
# hz 的默认值是 10,可以通过提高这个值来使得 CPU 在空闲的时候使用更多的 CPU 时间来处理后台任务。 
# 但同时这会使得当有很多 key 在同一时间过期时,过期处理会更精确。
# 很多客户只有在一些需要很低延迟的环境中才会将这个值从 10 提升到 100。
hz 10

#当子进程进行 AOF 的重写时,如果启用了 aof-rewrite-incremental-fsync, 
#子进程会每生成 32 MB 数据就进行一次 fsync 操作。 通过这种方式将数据分批提交到硬盘可以避免高延迟峰值。
aof-rewrite-incremental-fsync yes


####此篇幅讲LRU算法配置。
# Redis LFU 回收策略是可以调整的。 
# 在开始的时候使用默认值并且只有在经过对如何提升性能和 key LFU 随时间如何改变进行调查查后才对其更改是一个好的主意。
# 这可以通过 OBJECT FREQ 命令进行检查。

#Redis 的 LFU 实现目前有两个可调整的参数:
#1、计数器对数因子(couter logarithm factor)
#2、 计数器衰退时间(counter decay time)。
# 在修改这两个参数之前理解这两个参数是很重要的。

#每个 key 的 LFU 计数器只有 8 bits,也就是说最大值为 255,
#因此 Redis 通过对数行为来对计数进行概率性的增加。 当一个 key 被访问后,
#计数器通过如下方式进行增加(假设计数器的旧值为 old_value):

取出一个 0 到 1 之间的随机数 R
通过如下方式算出概率 P: 1 / (old_value * lfu_log_factor + 1)
只有当 R < P 时,才增加计数器
#
# +--------+------------+------------+------------+------------+------------+
# | factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
# +--------+------------+------------+------------+------------+------------+
# | 0      | 104        | 255        | 255        | 255        | 255        |
# +--------+------------+------------+------------+------------+------------+
# | 1      | 18         | 49         | 255        | 255        | 255        |
# +--------+------------+------------+------------+------------+------------+
# | 10     | 10         | 18         | 142        | 255        | 255        |
# +--------+------------+------------+------------+------------+------------+
# | 100    | 8          | 11         | 49         | 143        | 255        |
# +--------+------------+------------+------------+------------+------------+
#
# 以上表格通过执行以下命令获得:
#
#   redis-benchmark -n 1000000 incr foo
#   redis-cli object freq foo
#
# NOTE 2: The counter initial value is 5 in order to give new objects a chance
# to accumulate hits.
#
# The counter decay time is the time, in minutes, that must elapse in order
# for the key counter to be divided by two (or decremented if it has a value
# less <= 10).
#
# The default value for the lfu-decay-time is 1. A Special value of 0 means to
# decay the counter every time it happens to be scanned.
#
# lfu-log-factor 10
# lfu-decay-time 1

########################### ACTIVE DEFRAGMENTATION #######################
#
# 
# 活动碎片整理允许 Redis 服务器压缩内存中由于申请和释放数据块导致的碎片,从而回收内存。
# 碎片是每次申请内存(幸运的是 Jemalloc 出现碎片的几率小很多)的时候会自然发生的。
# 通常来说,为了降低碎片化程度需要重启服务,或者至少需要清除所有的数据然后重新创建。
# 得益于 Oran Agra 在 Redis 4.0 实现的这个特性,进程可以在服务运行时以 “热” 方式完成这些目的。

# 通常来说当碎片化达到一定程度(查看下面的配置)Redis 会使用 Jemalloc 的特性创建连续的内存空间,
# 并在此内存空间对现有的值进行拷贝,拷贝完成后会释放掉旧的数据。 这个过程会对所有的导致碎片化的 key 以增量的形式进行。
# 需要重点理解的是:

# 这个特性默认是关闭的,并且只有在编译 Redis 时使用我们代码中的 Jemalloc 版本才生效。(这是 Linux 下的默认行为)
# 如果没有碎片问题,你永远不需要启用这项特性
# 如果你需要试验这项特性,可以通过命令 CONFIG SET activefrag yes 来启用
# 相关的配置参数可以很好的调整碎片整理过程。如果你不知道这些选项的作用最好使用默认值。

# 启用碎片整理
# activedefrag yes

# 有至少多少碎片时才开始碎片整理
# active-defrag-ignore-bytes 100mb

# 有至少多少比例的碎片时才开始碎片整理。
# active-defrag-threshold-lower 10

# 有多少比例的碎片时才开始以最大努力进行碎片整理。
# active-defrag-threshold-upper 100

# 进行碎片整理时至少使用多少比例的 CPU 时间。
# active-defrag-cycle-min 25

# 进行碎片整理时至多使用多少比例的 CPU 时间。
# active-defrag-cycle-max 75


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值