上一篇博客我们介绍了如何安装Redis,在Redis的解压目录下有个很重要的配置文件 redis.conf (/opt/redis-6.2.5/目录下),关于Redis的很多功能的配置都在此文件中完成的。一般为了不破坏安装的文件,出厂默认配置最好不要去改,所以我们将此配置文件复制到 /etc/redis/
目录下了。
[root@TR redis-6.2.5]# cp redis.conf /etc/redisConf
[root@TR redis-6.2.5]# cd /etc/redisConf
[root@TR redisConf]# ls
redis.conf
[root@TR redisConf]# vim redis.conf # 查看配置文件
通过 vim /etc/redisConf/redis.conf
命令打开此文件。下面我们将详细介绍此配置文件。
1、开头说明
这里的配置很简单,需要注意的是后面需要使用内存大小时,可以指定单位,通常是以 k,gb,m的形式出现,并且单位不区分大小写。
2、INCLUDES
我们知道Redis只有一个配置文件,如果多个人进行开发维护,那么就需要多个这样的配置文件,这时候多个配置文件就可以在此通过 include /path/to/local.conf
配置进来,而原本的 redis.conf 配置文件就作为一个总闸。
3、MODULES
自定义模块配置。通过这里的 loadmodule 配置将引入自定义模块来新增一些功能。
4、NETWORK(网络配置)
bind 127.0.0.1 # 绑定的ip(默认是本机的回环地址)
protected-mode yes # 保护模式
port 6379 # 默认端口(由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口。)
timeout 0 # 置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,
# 那么关闭该连接。默认值为0,表示不关闭。
5、GENERAL(通用)
daemonize yes # 默认情况下,Redis不作为守护进程运行。需要开启的话,改为 yes
supervised no # 可通过upstart和systemd管理Redis守护进程
pidfile /var/run/redis_6379.pid # 以后台进程方式运行redis,则需要指定pid 文件
loglevel notice # 日志级别。可选项有:
# debug(记录大量日志信息,适用于开发、测试阶段);
# verbose(较多日志信息);
# notice(适量日志信息,使用于生产环境);
# warning(仅有部分重要、关键信息才会被记录)。
logfile "" # 日志文件的位置,当指定为空字符串时,为标准输出
databases 16 # 设置数据库的数目。默认的数据库是DB 0
always-show-logo yes # 是否总是显示logo
6、SNAPSHOTTING(快照)
# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)
save 900 1
# 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
save 300 10
# 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
save 60 10000
stop-writes-on-bgsave-error yes # 持久化出现错误后,是否依然进行继续进行工作
rdbcompression yes # 使用压缩rdb文件 yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间
rdbchecksum yes # 是否校验rdb文件,更有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗
dbfilename dump.rdb # dbfilenamerdb文件名称
dir ./ # dir 数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
7、REPLICATION
replicaof: 在主从复制的值得时候, 用来配置主机地址的。
slave-serve-stale-data:默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:
1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候
2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 “SYNC with master in progress” 的错误
slave-read-only:配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。默认值为yes。
repl-diskless-sync:主从数据复制是否使用无硬盘复制功能。默认值为no。
repl-diskless-sync-delay:当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。
repl-disable-tcp-nodelay:同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。 Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no。
8、SECURITY(安全)
rename-command:命令重命名,对于一些危险命令例如:flushdb(清空数据库)、flushall(清空所有记录)、config(客户端连接后可配置服务器)、keys(客户端连接后可查看所有存在的键)。作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全。
requirepass:设置redis连接密码。比如: requirepass 123456 表示redis的连接密码为123456
警告:由于Redis速度非常快,外部用户最多可以尝试。每秒100万个密码。这意味着我们应该使用非常强的密码,否则很容易被破解。例如:MD5
9、CLIENTS
maxclients :设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数。如果设置 maxclients为0 。表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached
错误信息。
10、APPEND ONLY MODE
(1).appendonly:默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失。Append Only File
是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据的命令都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里。默认值为no
。
(2).appendfilename :appendfilename AOF 文件名称
(3).appendfsync everysec:appendfsync aof持久化策略的配置。
- no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
- always表示每次写入都执行fsync,以保证数据同步到磁盘。
- everysec表示每秒执行一次fsync,可能会导致丢失这1s数据(默认)。
(4).no-appendfsync-on-rewrite:在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。
(5).auto-aof-rewrite-percentage:默认值为100。aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
(6).auto-aof-rewrite-min-size:64mb。设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。
(7).aof-load-truncated:aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象 redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为 yes。
常见配置介绍
1、Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no
2、当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指
定
pidfile /var/run/redis.pid
3、指定Redis监听端口,默认端口为6379
port 6379
4、绑定的主机地址
bind 127.0.0.1
5、当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
6、指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
7、日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
8、设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
databases 16
9、指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
10、指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
11、指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
12、指定本地数据库存放目录
dir ./
13、设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof
14、当master服务设置了密码保护时,slav服务连接master的密码
masterauth
15、设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭
requirepass foobared
16、设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxclients 128
17、指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区。
maxmemory
18、指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
19、指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
20、指定更新日志条件,共有3个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(快,默认值)
appendfsync everysec
Redis 系列文章
Linux、windows 下安装Redis图文教程
一、为什么要是用Redis?
二、Redis五大数据类型详细讲解
三、Redis.conf 配置文件详细介绍
四、Redis 的持久化(RDB、AOF)
五、Redis事务的详细介绍
七、Redis 主从复制以及哨兵模式的详细图解
八、Sentinel.conf 配置文件详细介绍
九、Redis的缓存穿透和雪崩问题,以及解决方案
整理了一些关于 Redis的高频面试题【建议收藏】