Redis系统学习之配置文件解读(非常全)

Redis配置详解

单位(设置大小写不明感

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 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.默认忽略大小写

包含其他配置文件

# 和Spring的包含是一样的,可以多配置文件,通过主配置文件包含进来
# include .\path\to\local.conf
# include c:\path\to\other.conf

网络配置

配置允许访问的IP

# Examples:
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
bind 127.0.0.1 可以配置多个指定IP通过空格分开,也可以配置*通配符

保护模式(在没有开启bing Ip或设置密码之前,需要开启保护模式防止直接暴露到外网)

protected-mode yes

端口号配置(默认为6379)

port 6379

通用配置

守护进程

daemonize yes  # windows没有这个配置,只有在Linux中有,默认是no,控制台执行,修改为yes后为后台执行
pidfile /var/run/redis_6379.pid #如果以守护进程方式运行,需要指定.pid文件,默认有不用管

日志级别

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing) 开发环境/测试环境
# verbose (many rarely useful info, but not a mess like the debug level) 和debug差不多
# notice (moderately verbose, what you want in production probably) 生产环境
# warning (only very important / critical messages are logged) 重大错误才打印
loglevel notice #默认为生产环境,不用动

日志文件位置

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile "" # 如果不是守护进程运行,默认在控制台打印,如果是守护进程运行,那么默认会存放到 /dev/null 中,可以在这里手动配置日志文件位置

数据库数量

# 可以设置数据库的数量,默认为16个. 默认采用数据库0, 可以通过select did切换
# 可以切换的数据库的did,范围为0-(数据库数量-1),因为是从0开始的
databases 16

启动时是否打印logo

always-show-logo yes #默认为打印,只有在控制台运行才可以看见,守护进程看不见,截图是windows的

image.png

快照配置(持久化配置)

redis是内存数据库,断电就会没有了,所以就会需要有持久化配置

保存数据库到磁盘

# save <seconds> <changes>  配置方式
# 含义 保存 秒数 改变
# 也就是说在多少秒之后,有多少key发生改变,执行保存到磁盘
# 可以根据生产环境的并发数配置
# 默认配置:
save 900 1 # 900 秒之后有至少有一个key发生变化,就保存到磁盘,执行一次持久化
save 300 10 # 300 秒后至少有10个key发生变化,才保存到磁盘,执行一次持久化
save 60 10000 # 60 秒之后至少有10000个key发生变化,才保存到磁盘,执行一次持久化

持久化报错是否允许redis继续写入

stop-writes-on-bgsave-error yes #默认是允许的,在持久化失败之后也允许继续写入,如果希望再持久化失败后,停止redis的写入,那么可以修改为no

rdb持久化数据是否压缩

rdbcompression yes #默认也是开启压缩的,压缩就会耗费CPU的资源,不压缩就会耗费磁盘的内存和IO的性能

rdb持久化数据时是否校验

#由于RDB版本5,CRC64校验和放在文件的末尾。
#这使格式更能抵抗损坏,但在保存和加载RDB文件时,性能会受到影响(约10%),因此可以禁用它以获得最大性能。
#在禁用校验和的情况下创建的RDB文件的校验和为零,这将告诉加载代码跳过检查。
rdbchecksum yes #默认开启rdb持久化校验,看场景,如果对持久化数据要求比较严格,那么开启检查是比较好的选择,如果对于性能要求比较高,数据要求不是很严格,那么可以关闭检查,用于提高持久化的性能

rdb持久化文件名称和位置

dbfilename dump.rdb #配置rdb持久化文件的名称,默认为dump.rdb 注意:只能配置名字
dir ./ #配置rdb持久化文件的位置,默认是当前路径 注意:只能配置路劲

主从复制(不在这里写,看下面的主从复制)

安全

密码设置

#要求客户端在处理任何其他命令之前发出AUTH<PASSWORD>。在您不信任其他人可以访问运行redis服务器的主机的环境中,这可能很有用。
#为了向后兼容性和大多数人不需要auth(例如,他们运行自己的服务器),这应该被注释掉。
#警告:由于Redis速度非常快,外部用户可以在一个好的盒子上每秒尝试多达150k个密码。这意味着你应该使用一个非常强大的密码,否则它将很容易被打破。
# requirepass foobared # 密码默认是关闭的 可以通过删除前面的井号来开启密码,密码默认是foobared,建议修改为自己的密码,并且保证密码强度

除了配置文件设置密码,也可以通过命令设置密码,但是一般不使用,都会在redis启动之前设置好

127.0.0.1:6379> config get requirepass #获取密码,默认为空
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass 123456 #设置密码
OK
127.0.0.1:6379> ping #尝试连接,发现提示没有认证
(error) NOAUTH Authentication required.
127.0.0.1:6379> get name #尝试操作也提示没有认证
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 #认证
OK
127.0.0.1:6379> ping #认证后再次尝试 就可以了
PONG
127.0.0.1:6379>

客户端配置

最大连接数配置

#设置同时连接的最大客户端数。默认情况下,此限制设置为10000个客户端,但是如果Redis服务器无法配置进程文件限制以允许指定的限制,则允许的最大客户端数将设置为当前文件限制减去32(因为Redis保留了一些文件描述符供内部使用)。
#一旦达到限制,Redis将关闭所有新连接,并发送一个错误“max number of clients reached(达到最大用户数上限)”。
#
# maxclients 10000 #默认是10000,如果需要修改,可以删除掉前面的井号,并指定一个合适的数量

内存配置

最大内存配置

# 默认是关闭的,如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存
# maxmemory是bytes字节类型,注意转换。
# 一般推荐Redis设置内存为最大物理内存的四分之三
# 一般设置最大内存之后,还会设置,内存的淘汰策略,就是内存达到上限之后的处理方式
# maxmemory <bytes> 

淘汰策略

  • LRU
    • LRU(Least Recently Used)最近最少使用。优先淘汰最近未被使用的数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
  • LFU
    • Least Frequently Used,使用频率最少的(最不经常使用的),优先淘汰最近使用的少的数据,其核心思想是“如果一个数据在最近一段时间很少被访问到,那么将来被访问的可能性也很小”。
  • LRU和LFU的区别
    • 如果一条数据仅仅是突然被访问(有可能后续将不再访问),在 LRU 算法下,此数据将被定义为热数据,最晚被淘汰。但实际生产环境下,我们很多时候需要计算的是一段时间下key的访问频率,淘汰此时间段内的冷数据。
    • LFU 算法相比 LRU,在某些情况下可以提升 数据命中率,使用频率更多的数据将更容易被保留。

image.png

  • 大概知道这些就可以了,因为在项目上线中,如果是大公司,那么这些不用你担心,如果是小公司,估计也用不到

APPEND ONLY (AOF配置)

##############################仅附加模式###############################
#默认情况下,Redis将数据集异步转储到磁盘上。这种模式在许多应用程序中已经足够好了,但是Redis进程出现问题或断电可能会导致几分钟的写丢失(取决于配置的保存点)。
# 默认是RDB
#AOF文件是一种可选的持久性模式,它提供了更好的持久性。例如,如果使用默认的数据fsync策略(见后面的配置文件),Redis可能会在服务器断电之类的戏剧性事件中丢失一秒钟的写操作,或者如果Redis进程本身发生错误,但操作系统仍然正常运行,则会丢失一次写操作。
#AOF和RDB持久性可以同时启用而不会出现问题。如果启动时启用了AOF,Redis将加载AOF,即具有更好持久性保证的文件。
# 默认AOF,是关闭的,因为几乎大部分的情况下RDB是完全够用的
appendonly no
# 文件的名字 默认为 apendonly.aof
appendfilename "appendonly.aof"

#Redis支持三种不同的模式:
    # no:不同步,只要让操作系统在需要时刷新数据即可。更快。
    # always:每次操作都同步。慢,最安全。
    # everysec:每秒只同步一次。妥协。
#默认值是“everysec”,因为这通常是速度和数据安全之间的正确折衷。这取决于您是否可以将其放宽到“no”,以便操作系统在需要时刷新输出缓冲区,从而获得更好的性能
(但是如果您能够接受有些数据丢失会考虑使用默认的持久化模式(快照),或者相反,使用“总是”,这非常慢,但比快照更安全 #如果不确定,请使用“everysec”。 # appendfsync always #每次操作都同步,消耗性能,但是安全 appendfsync everysec #每秒同步一次,但是很可能丢失这一秒的数据,折中 # appendfsync no #不执行,让操作系统处理,快,但是安全比较低

作者:彼岸舞

时间:2021\05\05

内容关于:Redis

本文属于作者原创,未经允许,禁止转发

posted @ 2021-05-05 10:53  彼岸舞  阅读(241)  评论(0编辑  收藏  举报