一.Redis.conf详解
引入其他配置文件Redis配置文件对大小写不敏感
redis单位配置.png
Redis可以引进其他配置文件
网络(NETWORK)
bind 127.0.0.1 ::1 #默认设置ip地址
port 6379 #默认端口
protected-mode yes #是否开启安全模式,默认开启
通用配置(GENERAL)
daemonize yes #是否开启守护进程(后台模式运行),默认是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)#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 "" #日志文件位置名称
databases 16 #数据库默认是16个
always-show-logo yes #开启redis的时候,是否默认打印log
快照(SNAPSHOTTING)
持久化,在规定的时间内,执行多少次操作,就会持久化到文件中:.rdb 和.aof模式
redis是内存数据库,如果没有持久化,那么断电会出现数据丢失
在15分钟之内有1个key被修改,就保存一次快照
# after 900 sec (15 min) if at least 1 key changed
在5分钟之内有10个key被修改,就保存一次快照
# after 300 sec (5 min) if at least 10 keys changed
在1分钟之内有10000个key被修改,就保存一次快照
# after 60 sec if at least 10000 keys changed
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes #在保存快照的时候出现错误,是否继续保存。默认是yes
rdbcompression yes #rdb文件是否压缩,默认是yes,会消耗CPU资源
rdbchecksum yes #保存rdb文件会进行错误的校验
dir /usr/local/var/db/redis/ #rdb文件保存的目录
主从复制(REPLICATION)
安全(SECURITY)
可以在这里设置密码,redis默认是没有密码的
# requirepass foobared 设置密码
客户端(CLIENTS)
# maxclients 10000 客户端最大连接数
# maxmemory <bytes> 设置redis最大内存
# maxmemory-policy noeviction 内存到达最大内存之后的处理策略
1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
2、allkeys-lru : 删除lru算法的key
3、volatile-random:随机删除即将过期key
4、allkeys-random:随机删除
5、volatile-ttl : 删除即将过期的 #一般设置这个策略
6、noeviction : 永不过期,返回错误
AOF模式设置(APPEND ONLY MODE)
appendonly no #默认不开启,默认使用的是rdb模式进行持久化操作的
appendfilename "appendonly.aof" #aof的默认名字
# appendfsync always #每次修改都 sync ,很占内存,cpu
appendfsync everysec #每一秒 sync,可能会丢失这1s的数据
# appendfsync no #不执行 sync,这个时候操作系统自己同步数据,这个最快
二.持久化
Redis 是内存数据库,如果不能把内存中的数据保存到磁盘,那么出现断电,电脑关闭等情况,服务器中的数据库里面的数据也会丢失,所以redis 提供了持久化的功能
1.RDB
什么是RDB
RDB
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
Redis会单独创建( fork) ,一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换.上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后-次持久化后的数据可能丢失。我们默认的就是RDB , 一般情况下不需要修改这个配置!
默认名称RDB保存的文件是dump.rdb
修改rdb触发时间
触发机制
- 使用flushall命令会直接生成一个rdb文件
- save条件满足的情况下面也会生成一个rdb文件
- 退出redis,也会生成rdb文件
127.0.0.1:6379> save #修改rdb触发时间需要sav命令让配置生效
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
rdb文件
操作系统不一样,设置不一样,文件位置都不一样,可以使用下面命令(config get dir)
如何恢复RDB文件
1.只需要把rdb文件放到redis的启动目录就可以了,redis启动的时候会自动检查dump.rdb文件,自行恢复数据
2.查看dump.rdb文件目录
127.0.0.1:6379> config get dir #查看rdb文件地址
1) "dir"
2) "/usr/local/var/db/redis"
优点
1.效率高,适合大规模的数据恢复
2.对数据的完整性不高,可以接受可能部分数据丢失
缺点
1.因为rdb模式是开启一个fork进程对数据进行保存,会消耗一定的内存空间
2.需要一定的时间间隔进程操作,如果redis意外宕机了,那么最后一次修改数据就没有了
2.AOF(Append Only File)
就是将我们所有的命令记录下来,恢复的时候把文件中的所有的命令全部执行一遍
aop流程
以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录) , 只许追加文件但不可以改写文件, redis启动之初会读取该文件重新构建数据,换言之, redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
Aof保存的是appendonly.aof文件
3.aof默认是不开启的
append默认不开启
appendonly yes #将配置文件修改为yes 就开启了
测试aof是否启用
1.修改了redis.conf文件需要重启redis使配置文件生效
image.png
aof文件损坏
会出现的征兆
- redis无法启动,无法连接
yu@192 bin % redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused #连接失败
not connected> exit
#也没有redis的进程
yu@192 redis % ps -ef|grep redis
501 1746 1163 0 10:38上午 ttys001 0:00.00 redis-cli -p 6379
501 1757 1340 0 10:39上午 ttys002 0:00.00 grep redis
-
可以使用redis-check-aof修复(存放在redis安装目录)
redis-check-aof
yu@192 bin % redis-check-aof --fix /usr/local/var/db/redis/appendonly.aof
0x 9b: Expected \r\n, got: 6161
AOF analyzed: size=170, ok_up_to=130, diff=40
This will shrink the AOF from 170 bytes, with 40 bytes, to 130 bytes
Continue? [y/N]: y
Successfully truncated AOF
yu@192 bin % redis-server redisconfig/redis.conf #修复之后就可以正常启动了
1806:C 26 Sep 2020 10:44:53.133 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1806:C 26 Sep 2020 10:44:53.133 # Redis version=6.0.7, bits=64, commit=00000000, modified=0, pid=1806, just started
1806:C 26 Sep 2020 10:44:53.133 # Configuration loaded
yu@192 bin % redis-cli -p 6379
127.0.0.1:6379>
优点
1.每一次修改都同步,文件完整性更好
2.默认是每一秒同步一次,可能会丢失一秒的数据
缺点
1.相对于数据文件来说,aof比rdb大的多,恢复速度比rdb慢
2.aof运行效率也比rdb慢
扩展
1、RDB持久化方式能够在指定的时间间隔内对你的数据进行快照存储
2、AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据, AOF命令以Redis协
议追加保存每次写的操作到文件末尾, Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
3、只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化
4、同时开启两种持久化方式
●在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始酌数据,因为在通常情况下AOF文件保存的数据集要比RDB
文件保存的数据集要完整。
●RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件,那要不要只使用AOF呢?作者建议不要,因为RDB更适合
用于备份数据库( AOF在不断变化不好备份) , 快速重启,而且不会有AOF可能潜在的Bug,留着作为-个万-的手段。
5.性能建议
●因为RDB文件只用作后备用途,建议只在Slave,上持久化RDB文件,而且只要15分钟备份-次就够了,只保留save 900 1这条
规则。
●如果Enable AOF ,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了,代价
一是带来 了持续的I0 ,二是AOF rewrite的最后将rewrite 过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要
硬盘许可,应该尽量减少AOF rewrite的频率, AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小
100%大小重写可以改到适当的数值。
网友评论