Redis配置文件详解

embedded/2024/9/24 10:23:31/

1.Units单位

配置大小单位,开头定义了一些基本的度量单位,只支持 bytes,不支持 bit

大小写不敏感

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

INCLUDES 包含

多实例的情况可以把公用的配置文件提取出来

# include /path/to/local.conf
# include /path/to/other.conf

2.网络相关配置

# 指定redis只能接受来自此IP绑定的网卡的请求,注意此默认值默认外网是不可访问的
# 生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉
bind 127.0.0.1  # 本地
bind 0.0.0.0    # 支出外网# 默认端口,建议生产环境不要使用默认端口避免被恶意扫描到
port 637# 是否开启保护模式。如果没有指定bind和密码,redis只会本地进行访问,拒绝外部访问。
# 将本机访问保护模式设置 no 
protected-mode yes   # tcp keepalive参数  
# 对访问客户端的一种心跳检测,每个 n 秒检测一次
# 单位为秒,如果设置为0,则不会进行keepalive检测,建议设置成60
tcp-keepalive 300# 配置unix socket来让redis支持监听本地连接。
#unixsocket /tmp/redis.sock# 配置unix socket使用文件的权限
#unixsocketperm 700#客户端连接空闲超过timeout将会被断开,为0则关闭该功能(0表示不断,一直连着)
timeout 0

tcp-backlog

设置 tcp 的 backlog,backlog 其实是一个连接队列,backlog 队列总和=未完成三次握手队列 + 已经完成三次握手队列。

在高并发环境下你需要一个高 backlog 值来避免慢客户端连接问题。

注意 Linux 内核会将这个值减小到/proc/sys/net/core/somaxconn 的值(128),所以需要确认增大/proc/sys/net/core/somaxconn 和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果

# TCP listen() backlog.
#
# In high requests-per-second environments you need a high backlog in order
# to avoid slow clients connection issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

3.GENERAL

# 守护进程,后台启动 以守护进程的方式运行,默认是 no,我们需要自己开启为yes!
daemonize yes # pidfile 存放 pid 文件的位置,每个实例会产生一个不同的 pid 文件
pidfile /var/run/redis_6379.pid# 可以通过upstart和systemd管理Redis守护进程
# 选项:
# supervised no - 没有监督互动
# supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
# supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
# supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
supervised no# 日志
# 注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度
#	debug
#	verbose
#	notice
#	warning
# 日志级别  生产环境
loglevel notice# 日志的文件位置名  一般以端口号.log命名  6379.log
logfile "" # 数据库的数量,默认是 16 个数据库  默认数据库为 0
databases 16 # 是否总是显示LOGO 
always-show-logo yes 

4.SECURITY LIMITS限制

# 设置密码 访问密码的查看、设置和取消
# 在命令中设置密码,只是临时的。重启 redis 服务器,密码就还原了
# 永久设置,需要再配置文件中进行设置。
requirepass 密码# 设置 redis 同时可以与多少个客户端进行连接  默认情况下为 10000 个客户端
# 如果达到了此限制,redis 则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应
maxclients 100# 配置最大的内存容量
# 建议必须设置,否则,将内存占满,造成服务器宕机
# 设置 redis 可以使用的内存量。一旦到达内存使用上限,redis 将会试图移除内部数据,移除规则可以通过 maxmemory-policy 来指定
# 如果 redis 无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么 redis 则会针对那些需要申请内存的指令返回错误信息,比如 SET、LPUSH 等
# 但是对于无内存申请的指令,仍然会正常响应,比如 GET 等。如果你的 redis 是主redis(说明你的 redis 有从 redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素
maxmemory 128# 内存到达上限之后的处理策略
# volatile-lru:使用 LRU 算法移除 key,只对设置了过期时间的键;(最近最少使用)
# 1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
# 2、allkeys-lru : 在所有集合 key 中,使用 LRU 算法移除 key
# 3、volatile-random:随机删除即将过期key  在过期集合中移除随机的 key,只对设置了过期时间的键
# 4、allkeys-random:在所有集合 key 中,移除随机的 key
# 5、volatile-ttl : 删除即将过期的 移除那些 TTL 值最小的 key,即那些最近要过期的 key
# 6、noeviction : 永不过期,返回错误  不进行移除。针对写操作,只是返回错误信息
maxmemory-policy noeviction # 设置样本数量,LRU 算法和最小 TTL 算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis 默认会检查这么多个 key 并选择其中 LRU 的那个
# 一般设置 3 到 7 的数字,数值越小样本越不准确,但性能消耗越小
maxmemory-samples 5

5.快照

持久化, 在规定的时间内,执行了多少次操作,则会持久化到文件 .rdb. aof

redis 是内存数据库,如果没有持久化,那么数据断电及失!

# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化) 
save 900 1#  300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
save 300 10# 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
save 60 10000# 我们之后学习持久化,会自己定义这个测试!# 持久化如果出错,是否还需要继续工作! yes:不能进行工作,no:可以继续进行工作
# 可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes # 是否压缩 rdb 文件,rdb文件压缩使用LZF压缩算法
# yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间
rdbcompression yes # 保存rdb文件的时候,进行错误的检查校验!
rdbchecksum yes # 命名持久化文件名称
dbfilename dump.rdb# rdb 文件保存的目录! 数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir ./ 

6.REPLICATION复制

# 主从复制指定主节点master设置 主机的ip及端口
replicaof <masterip> <masterport>
replicaof 192.168.1.20 6379# master的密码设置 是否需要密码
masterauth <master-password># 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
# 如果 replica-serve-stale-data 设置为 “yes” (默认值),slave会继续响应客户端# 请求,可能是正常数据,也可能是还没获得值的空数据。
# 如果 replica-serve-stale-data 设置为 “no”,slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
replica-serve-stale-data yes# 配置从是否为只读,开启后从则不能写入数据
replica-read-only yes# 同步策略: 磁盘或socket,默认磁盘方式
repl-diskless-sync no# 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。
# 默认值为5秒,设置为0秒则每次传输无延迟。
repl-diskless-sync-delay 5# slave根据指定的时间间隔向master发送ping请求。默认10秒。
repl-ping-replica-period 10# 同步的超时时间
# slave在与master SYNC期间有大量数据传输,造成超时
# 在slave角度,master超时,包括数据、ping等
# 在master角度,slave超时,当master发送REPLCONF ACK pings
# 确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时
repl-timeout 60# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
# 如果选择yes,Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒。
# 如果选择no,数据传输到salve的延迟将会减少但要使用更多的带宽。
# 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,可以设置为“yes”。
repl-disable-tcp-nodelay no# 设置数据备份的backlog大小
repl-backlog-size 1mb# 从最后一个slave断开开始计时多少秒后,backlog缓冲将会释放。
repl-backlog-ttl 3600# 优先级
replica-priority 100# 如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。
# N个slave需要是“oneline”状态。
# 延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)开始计数。
# 该选项不保证N个slave正确同步写操作,但是限制数据丢失的窗口期。
# 例如至少需要3个延时小于等于10秒的slave用下面的指令:
min-replicas-to-write 3
min-replicas-max-lag 10

7.懒删除与慢查询日志

#内存满逐出
lazyfree-lazy-eviction no#过期key删除
lazyfree-lazy-expire no#内部删除,比如rename oldkey newkey时,如果newkey存在需要删除newkey
lazyfree-lazy-server-del no#接收完RDB文件后清空数据选项
replica-lazy-flush no# 记录超过多少微秒的查询命令
# 1000000等于1秒,设置为0则记录所有命令
slowlog-log-slower-than 10000# 记录大小,可通过SLOWLOG RESET命令重置
slowlog-max-len 128

8.集群

# 开启redis集群
cluster-enabled yes# 配置redis自动生成的集群配置文件名。确保同一系统中运行的各redis实例该配置文件不要重名。
cluster-config-file nodes-6379.conf# 集群节点超时毫秒数
cluster-node-timeout 15000# 如果数据太旧,集群中的不可用master的slave节点会避免成为备用master。如果slave和master失联时间超过:(node-timeout * slave-validity-factor) + repl-ping-slave-period则不会被提升为master。
# 如node-timeout为30秒,slave-validity-factor为10, 默认default repl-ping-slave-period为10秒,失联时间超过310秒slave就不会成为master。
# 较大的slave-validity-factor值可能允许包含过旧数据的slave成为master,同时较小的值可能会阻止集群选举出新master。
# 为了达到最大限度的高可用性,可以设置为0,即slave不管和master失联多久都可以提升为master
cluster-replica-validity-factor 10# 只有在之前master有其它指定数量的工作状态下的slave节点时,slave节点才能提升为master。默认为1(即该集群至少有3个节点,1 master+2 slaves,master宕机,仍有另外1个slave的情况下其中1个slave可以提升)
# 测试环境可设置为0,生成环境中至少设置为1
cluster-migration-barrier 1# 默认情况下如果redis集群如果检测到至少有1个hash slot不可用,集群将停止查询数据。
# 如果所有slot恢复则集群自动恢复。
# 如果需要集群部分可用情况下仍可提供查询服务,设置为no。
cluster-require-full-coverage yes# 选项设置为yes时,会阻止replicas尝试对其master在主故障期间进行故障转移
# 然而,master仍然可以执行手动故障转移,如果强制这样做的话。
cluster-replica-no-failover no

9.APPEND ONLY 模式与aof配置

# 默认是不开启aof模式的
# 默认是使用rdb方式持久化的,在大部分所有的情况下,rdb完全够用!
appendonly no # 持久化的文件的名字
appendfilename "appendonly.aof" # AOF 同步频率设置
# 每次修改都会 sync。消耗性能  每次写操作都立刻写入到aof文件。慢,但是最安全
appendfsync always # 每秒执行一次 sync,可能会丢失这1s的数据! 每秒写一次。折中方案
appendfsync everysec # 不执行 sync,这个时候操作系统自己同步数据,速度最快!不要立刻刷,只有在操作系统需要刷的时候再刷。比较快
appendfsync no # 如果AOF的同步策略设置成 “always” 或者 “everysec”,并且后台的存储进程(后台存储或写入AOF 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。
# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。
# 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。
# 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。
# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)
# 如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite no# 自动重写AOF文件。如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。
# 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)
# 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。
# 你还需要指定被重写日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。
# 指定百分比为0会禁用AOF自动重写特性。
auto-aof-rewrite-percentage 100
# 文件达到大小阈值的时候进行重写
auto-aof-rewrite-min-size 64mb# 如果设置为yes,如果一个因异常被截断的AOF文件被redis启动时加载进内存,redis将会发送日志通知用户
# 如果设置为no,redis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件。
aof-load-truncated yes# 加载时Redis识别出AOF文件以“REDIS”开头字符串,
# 并加载带此前缀的RDB文件,然后继续加载AOF
aof-use-rdb-preamble yes


http://www.ppmy.cn/embedded/116048.html

相关文章

【C++指南】inline内联函数详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…

kotlin—— withTimeoutOrNull的介绍和使用场景

withTimeoutOrNull 是 Kotlin 协程库中的一个非常有用的函数&#xff0c;它允许你在指定的时间内执行一个代码块&#xff0c;如果在指定的时间内代码块没有执行完毕&#xff0c;那么它会返回 null&#xff0c;而不是抛出一个异常。这个函数在处理可能需要较长时间完成的操作&am…

在 macOS 上安装 FFmpeg 的详细指南

FFmpeg 是一个强大的多媒体框架&#xff0c;可以用于录制、转换和流式传输音频和视频。无论你是视频编辑工作者&#xff0c;还是想要处理音频文件&#xff0c;FFmpeg 都是一个不可或缺的工具。本文将介绍在 macOS 上安装 FFmpeg 的几种方法。 方法 1: 使用 Homebrew 安装 FFmp…

【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器

注意事项 uni.request 请求封装 请求和上传文件拦截器 uniapp 拦截器&#xff1a; uni.addInterceptor 接口说明&#xff1a;接口文档 实现需求 拼接基础地址设置超时时间添加请求头标识添加 token 参考代码 // src/utils/http.ts// 请求基地址 const baseURL https://pca…

provide,inject父传子

这个方法传递子参数&#xff0c;可以让所有的子组件获取到&#xff0c;不能子组件传递给父组件 父组件 说下大概思路&#xff0c;导入privode&#xff0c;然后使用privode方法&#xff0c;有点像redis&#xff0c;key value形式存值&#xff0c;子组件可以通过key来获取你要传…

计算机毕业设计之:基于微信小程序的中药材科普系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意&#xff0c;哈希表中的键值对&#xff0c;键是唯一的而值可以重复 所以有下面的结果&#xff1a; key中原来已经有了f1&#xff0c;所以再使用hse…

计算机科学(学习笔记四)

早期的编程方式 纸片打孔等方法 汇编语言 编程语言发展史 汇编语言也叫机器语言&#xff0c;是计算机的母语。但01不便于人们操作&#xff0c;人们为了方便操作&#xff0c;会输入文字指令&#xff0c;通过汇编器自动转成二进制指令。 但汇编码和底层硬件仍息息相关&#xff…