Redis的配置文件详解(中文)

以下总结了关于Redis比较全面的知识笔记以及面试题,方便自己复习的同时希望对大家有所帮助。

序号 内容 链接地址
1 Redis的基础知识、单机版安装、数据类型介绍(老版本) https://blog.csdn.net/weixin_43246215/article/details/107474283
2 Redis常用命令、配置文件介绍、数据持久化方式、集群搭建 (老版本) https://blog.csdn.net/weixin_43246215/article/details/107947562
3 Redis的五种常用数据类型、三种特殊数据类型详解 https://blog.csdn.net/weixin_43246215/article/details/108041739
4 Redis基本的事务操作以及使用Redis实现乐观锁 https://blog.csdn.net/weixin_43246215/article/details/108045931
5 使用JedisAPI操作Redis以及Jedis实现Redis事务 https://blog.csdn.net/weixin_43246215/article/details/108067542
6 Redis的配置文件详解(中文) https://blog.csdn.net/weixin_43246215/article/details/108068245
7 Redis数据持久化的两种方式以及Redis实现订阅发布 https://blog.csdn.net/weixin_43246215/article/details/108068797
8 Redis的伪集群搭建以及主从复制原理 https://blog.csdn.net/weixin_43246215/article/details/108069472
9 Redis中哨兵(Sentinel)模式的使用以及相关配置介绍 https://blog.csdn.net/weixin_43246215/article/details/108088179
10 Redis中的缓存穿透、缓存击穿以及缓存雪崩(理论知识) https://blog.csdn.net/weixin_43246215/article/details/108089026
11 Spring整合Redis实现查询缓存以及同步缓存 待更新
12 SpringBoot整合Redis以及自定义Redis Template https://blog.csdn.net/weixin_43246215/article/details/108476328
13 Redis常见面试题 https://blog.csdn.net/weixin_43246215/article/details/108090095
14 待更新

Redis配置文件中的常用配置介绍

本次介绍的Redis版本为:redis-5.0.7.tar.gz
进入到/usr/local/redis/bin/ 下面有一个redis.conf文件。
用vim编辑它,回到顶部按两次G键。

启动的时候就通过配置文件来启动的。

##################### INCLUDES  包含##########################
# include /path/to/local.conf
# include /path/to/other.conf
# 可以把多个配置文件都包含进来,可以把多个redis.conf组合成一个文件
##################### NETWORK  网络 ##########################
#指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
#绑定的IP,如果去掉注释,那么就只能在本机访问,如果想要外来连接访问,那么可以将127.0.0.1改为*统配,或者去指定当前的一个IP。
bind 127.0.0.1      

#是否开启保护模式,默认是开启的。如果使用Jedis连接不上Linux时们可以考虑关闭保护模式。
protected-mode yes

#Redis监听的端口号,默认是6379,可以自己设置端口。
port 6379
###################### GENERAL  通用#############################

#以守护线程的方式运行,默认是no,我们需要自己手动开启为yes。
daemonize yes

#管理守护线程的配置,默认是no,我们不用去设置
supervised no

#配置文件的一个PID文件,如果我们以后台方式运行,就需要指定一个pid文件,这个比较重要。
pidfile /var/run/redis_6379.pid


#日志级别   一般不用去设置
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)                    debug级别,一般用于测试和开发阶段使用
# verbose (many rarely useful info, but not a mess like the debug level)      
# notice (moderately verbose, what you want in production probably)        通知,只会记录一些部分重要的日志,仅使用在生产环境
# warning (only very important / critical messages are logged)                     警告,仅非常重要/关键的信息才会打印
loglevel notice

#日志的文件位置,为空表示会打印到标准输出设备
logfile ""

#数据库的数量,默认有16个数据库
databases 16

#是否总是显示前端启动时的logo,默认开启的
always-show-logo yes
######################  快照 SNAPSHOTTING  ###################### 
        持久化,在规定的时间内,执行了多少次操作,则会持久化到文件(.rdb,.aof)。
        Redis是内存数据库,如果没有持久化,那么数据断电即失。

#设置Redis进行快照镜像的频率
save 900 1         #如果900秒(15分钟)内,至少有一个key进行了修改,我们就进行持久化操作(写入到数据库的持久化文件中)
save 300 10       #如果300秒内(6分钟),有10个key进行了修改,就进行持久化操作
save 60 10000   #如果60秒内(1分钟),有10000个key进行了修改,就进行持久化操作(多线程)

#持久化出现错误的时候,是否还需要继续工作,默认开启
stop-writes-on-bgsave-error yes

#是否压缩rdb文件,默认是yes,需要消耗一些CPU的资源
rdbcompression yes

#保存rdb文件的时候,是否进行错误的校验,如果文件出错了,可以对文件自动进行修复。默认是yes
rdbchecksum yes

#持久化文件名设置
dbfilename dump.rdb

# rdb文件保存的位置,默认是启动Redis时的目录,比如在bin目录下启动的redis,那么该文件就保存在bin目录下
dir ./
###################### 主从复制  REPLICATION ###################### 
#主从模式的配置,默认每台Redis机器都是主机,所以这里是注释掉的。
#如果想要将本机器配置为从机,就将以下<masterip>设置为主机的IP,<masterport>设置为主机的端口
# replicaof <masterip> <masterport>

#如果以上配置设置了的主机需要密码,那么就在这里配置主机的密码
# masterauth <master-password>
 ######################  安全 SECURITY ###################### 

#设置密码,默认是注释掉的,也就是没有密码的,如果想要设置redis密码,那么就将注释去掉,然后将foobared改为自己设置的密码。
#如果设置了密码,那么在每次登录Redis的时候都需要输入密码,很多时候会通过命令来设置。
#通过命令设置密码为123:config set requirepass "123"   
# 我们平时使用的./redis-cli 是连接redis,这个时候没有设置密码,默认一下子登录了,但是设置密码之后还需要使用auth命令进行登录。
# requirepass foobared

#下图中为设置了密码之后的测试

在这里插入图片描述

 ######################  限制 CLIENTS (扩展了解,一般不用动) ######################  
#设置能连接上Redis的最大客户端数量,默认是注释掉的。
# maxclients 10000


 ######################  内存设置  MEMORY MANAGEMENT(重点) ######################  
#Redis配置最大的内存容量,默认是自己,这里默认是注释掉的。(了解即可)
# maxmemory <bytes>

#内存达到上限之后的处理策略,一般有以下六种方式,Redis的默认过期策略是volatile-lru,:
# volatile-lru:只对设置了过期时间的key进行LRU(默认值) 
# allkeys-lru : 删除lru算法的key   
# volatile-random:随机删除即将过期key   
# allkeys-random:随机删除   
# volatile-ttl : 删除即将过期的    (使用较多)
# noeviction : 永不过期,返回错误
# maxmemory-policy noeviction
 ######################  AOF的配置  APPEND ONLY MODE 模式 ######################  
#开启aof模式的配置,默认是不开启,因为Redis默认是使用rdb方式持久化的,在大部分的情况下,rdb完全够用了。
appendonly no

#aof持久化的文件名字
appendfilename "appendonly.aof"


#配置持久化同步sync的选项(持久化策略),默认是everysec每秒同步一次
# appendfsync always     #  每次修改都会同步sync ,这种方式比较耗性能
appendfsync everysec    #  每一秒执行一次同步sync,可能会丢失这1s的数据。
# appendfsync no           #  不执行同步sync,这个时候操作系统自己同步数据,速度最快。

#在 aof 重写或者写入 rdb 文件的时候,会执行大量 IO,此时对于 everysec 和 always 的 aof 模式来说,执行同步(fsync) 会造成阻塞过长时间,no-appendfsync-on-rewrite 字段设置为默认设置为 no。如果对延迟要求很高的应用,这个字段可以设置为 yes,否则还是设置为 no,这样对持久化特性来说这是更安全的选择。设置为 yes 表示 rewrite 期间对新写操作不同步fsync,暂时存在内存中,等 rewrite 完成后再写入。
#默认为 no,建议 yes。Linux 的默认 fsync 策略是 30 秒。可能丢失 30 秒数据。
no-appendfsync-on-rewrite no

#aof文件的自动重写配置。当目前的aof文件大小超过上一次重写的aof文件大小的百分之多少的时候进行重写,当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志进行重写。默认设置为100,设为100意思就是当前aof文件大小是上次日志重写的aof文件大小的两倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100

#允许重写最小aof文件的大小设置,避免达到约定百分比但尺寸仍然很小的情况下还要重写。
auto-aof-rewrite-min-size 64mb

#指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,设置为yes会log并继续,设置为no会直接恢复失败
aof-load-truncated yes

#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes
#########################   LUA SCRIPTING     ############################
# 如果达到最大时间限制(毫秒),redis会记个log,然后返回error。当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀
lua-time-limit 5000
##################   REDIS CLUSTER   集群配置  ########################
# 集群开关,默认是不开启集群模式
# cluster-enabled yes
 
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf
 
#节点互连超时的阀值。集群节点超时毫秒数
# cluster-node-timeout 15000
 
#在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时
间是否过长。判断方法是:
#比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
# cluster-replica-validity-factor 10
 
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移
# cluster-migration-barrier 1
 
#默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致
# cluster-require-full-coverage yes
####################  CLUSTER DOCKER/NAT support  ####################
#*群集公告IP
#*群集公告端口
#*群集公告总线端口
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380
###########################  SLOW LOG ###############################

# slog log是用来记录redis运行中执行比较慢的命令耗时。当命令的执行超过了指定时间,就记录在slow log
中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。注
意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
 
#慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足
够的内存就行。你可以通过 SLOWLOG RESET 来释放内存
slowlog-max-len 128
####################  LATENCY MONITOR ######################

#延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
只记录大于等于下边设置的值的操作。0的话,就是关闭监视。默认延迟监控功能是关闭的,如果你需要打开,也
可以通过CONFIG SET命令动态设置
latency-monitor-threshold 0
################  EVENT NOTIFICATION ######################

#键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
#notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:
##K 键空间通知,所有通知以 __keyspace@__ 为前缀
##E 键事件通知,所有通知以 __keyevent@__ 为前缀
##g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 过期事件:每当有过期键被删除时发送
##e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
##A 参数 g$lshzxe 的别名
#输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。详细使用可以参考http://redis.io/topics/notifications
notify-keyspace-events ""
#####################  ADVANCED CONFIG  ###########################

# 数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
 
# value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash
hash-max-ziplist-value 64
 
#-5:最大大小:64 KB<--不建议用于正常工作负载
#-4:最大大小:32 KB<--不推荐
#-3:最大大小:16 KB<--可能不推荐
#-2:最大大小:8kb<--良好
#-1:最大大小:4kb<--良好
list-max-ziplist-size -2
 
#0:禁用所有列表压缩
#1:深度1表示“在列表中的1个节点之后才开始压缩,
#从头部或尾部
#所以:【head】->node->node->…->node->【tail】
#[头部],[尾部]将始终未压缩;内部节点将压缩。
#2:[头部]->[下一步]->节点->节点->…->节点->[上一步]->[尾部]
#2这里的意思是:不要压缩头部或头部->下一个或尾部->上一个或尾部,
#但是压缩它们之间的所有节点。
#3:[头部]->[下一步]->[下一步]->节点->节点->…->节点->[上一步]->[上一步]->[尾部]
list-compress-depth 0
 
# 数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set
set-max-intset-entries 512
 
#数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
zset-max-ziplist-entries 128
 
#value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset
zset-max-ziplist-value 64
 
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使
用稠密的数据结构(dense)。一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要
求不高,对空间要求较高的,建议设置到10000左右
hll-sparse-max-bytes 3000
 
#宏观节点的最大流/项目的大小。在流数据结构是一个基数
#树节点编码在这项大的多。利用这个配置它是如何可能#大节点配置是单字节和
#最大项目数,这可能包含了在切换到新节点的时候
# appending新的流条目。如果任何以下设置来设置
# ignored极限是零,例如,操作系统,它有可能只是一集
通过设置限制最大#纪录到最大字节0和最大输入到所需的值
stream-node-max-bytes 4096
stream-node-max-entries 100
 
#Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你
的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置
为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存
activerehashing yes
 
##对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
#对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal 
client默认取消限制,因为如果没有寻问,他们是不会接收数据的
client-output-buffer-limit normal 0 0 0
 
#对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续
60秒,那么服务器就会立即断开客户端连接
client-output-buffer-limit replica 256mb 64mb 60
 
#对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就
会立即断开客户端连接
client-output-buffer-limit pubsub 32mb 8mb 60
 
# 这是客户端查询的缓存极限值大小
# client-query-buffer-limit 1gb
 
#在redis协议中,批量请求,即表示单个字符串,通常限制为512 MB。但是您可以更改此限制。
# proto-max-bulk-len 512mb
 
#redis执行任务的频率为1s除以hz
hz 10
 
#当启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数
#在连接更多客户端后根据需要使用。这样一个闲置的实例将占用很少的CPU时间,而繁忙的实例将反应更灵敏
dynamic-hz yes
 
#在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这
对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
aof-rewrite-incremental-fsync yes
 
#在rdb保存的时候,如果打开了rdb-save-incremental-fsync开关,系统会每32MB执行一次fsync。这
对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
rdb-save-incremental-fsync yes
###################### ACTIVE DEFRAGMENTATION  ##########################

# 已启用活动碎片整理
# activedefrag yes
# 启动活动碎片整理的最小碎片浪费量
# active-defrag-ignore-bytes 100mb
# 启动活动碎片整理的最小碎片百分比
# active-defrag-threshold-lower 10
# 我们使用最大努力的最大碎片百分比
# active-defrag-threshold-upper 100
# 以CPU百分比表示的碎片整理的最小工作量
# active-defrag-cycle-min 5
# 在CPU的百分比最大的努力和碎片整理
# active-defrag-cycle-max 75
#将从中处理的set/hash/zset/list字段的最大数目
#主词典扫描
# active-defrag-max-scan-fields 1000

建议:配置文件中的选项一定要去过一遍,尤其是上述中的大分类中标注成中文的部分,一定要清楚配置项是做什么用的,不管是生活中还是工作中,一个小小的配置都会让别人对你刮目相看。

猜你喜欢

转载自blog.csdn.net/weixin_43246215/article/details/108068245
今日推荐