signed

QiShunwang

“诚信为本、客户至上”

第126天学习打卡(Redis redis.conf详解 Redis持久化 RDB AOF)

2021/5/14 21:43:38   来源:

Redis.conf详解

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

单位

image-20210514144145707

1.配置文件unit单位对大小写不敏感

包含

image-20210514144509293

就好比spring中的import标签, JSP中的include

bind 127.0.0.1 #绑定的ip
protected-mode yes #保护模式
port 6379 #端口设置

通用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)
# 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 no #是否总是显示Logo



快照

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

redis是内存数据库,不持久化,数据断电即失去。

# save 3600 1  在3600秒内,如果至少有一个key进行了修改,我们就进行持久化操作
# save 300 100   在300秒内,如果至少有100个key进行了修改,我们就进行持久化操作
# save 60 10000  在60秒内,如果至少有10000个key进行了修改,我们就进行持久化操作

stop-writes-on-bgsave-error yes #持久化如果出错,是否还需要继续公共

rdbcompression yes #是否压缩rdb(持久化文件)文件,需要消耗一些cpu资源
rdbchecksum yes #保存rdb文件的时候,进行错误的检查校验

dir ./ #rdb文件保存的目录

REPLICATION复制

SECURITY

可以在这里设置redis的密码,默认是没有密码的

[root@kuangshen ~]# cd /usr/local/bin
[root@kuangshen bin]# redis-server kconfig2/redis.conf
[root@kuangshen bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> config get requirepass#获取redis的密码
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass "123456"#设置redis的密码
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> ping
PONG

注意:修改密码后要重启redis才会有对应的操作

[root@kuangshen ~]# cd /usr/local/bin
[root@kuangshen bin]# redis-server kconfig2/redis.conf
[root@kuangshen bin]# redis-cli -p 6379
127.0.0.1:6379> ping
(error) NOAUTH Authentication required. #重启redis后发现所有的命令都没有权限了
127.0.0.1:6379> auth 123456 #使用密码进行登录
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> 

CLIENTS限制

 maxclients 10000 #设置能连接上redis的最大客户端的数量
 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:永不过期,返回错误

APPEND ONLY MODE aof配置

appendonly no #默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分情况下,rdb完全够用。
appendfilename "appendonly.aof" #持久化的名字

# appendfsync always #每次修改都会sync消耗性能
appendfsync everysec #每秒执行一次sync,可能会丢失这一秒的数据
# appendfsync no #不执行 sync  这个时候操作系统自己同步数据,速度最快!


Redis持久化

面试和工作,持久化都是重点!

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!

RDB (Redis DataBase)

在主从复制中,rdb就是备用的。在从机上面,不占主机的内存!

image-20210514161113639

在指定时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。

Redis会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上一次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那么RDB方式要比AOF方式更加高效。RDB的缺点是最后一次持久化后的数据可能丢失。我们默认的就是RDB,一般情况下不需要配置。

有时候在生产环境我们会将这个文件进行备份。

rdb保存的文件是dump.rdb 都是在我们的配置文件中快照中进行配置的。

image-20210514163008025

测试 60秒内修改了5次key,就会触发rdb操作:

image-20210514163431535

image-20210514163726468

save保存配置文件

image-20210514164057513

image-20210514164152002

触发机制

1.save的规则满足的情况下,会自动触发rdb规则

2.执行flushall命令,也会触发rdb规则

3.退出redis,也会产生rdb文件。

备份后就自动生成一个dump.rdb文件

如何恢复rdb文件

1.只需要将rdb文件放在我们redis启动目录就可以了,redis启动的时候会自动检查dump.rdb 然后恢复其中的数据。

2.查看需要存放的位置

127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" #如果在这个目录下存在dump.rdb文件,启动就会自动恢复其中的数据


优点:

1.适合大规模的数据恢复

2.对数据的完整性要求不高!

缺点:

1.需要一定的时间间隔进程操作!如果redis意外宕机了,这个最后一次修改的数据就没有了。

2.fork进程的时候,会占用一定的内存空间。

image-20210514170203041

AOF(Append Only File)

将我们的所有的命令都记录下来,history, 恢复的时候就把这个文件全部执行一遍。

image-20210514181046902

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

Aof保存的是appendonly.aof文件

在Xshell中查询某个单词的操作是/ ,比如/append就可以查询到你想要得

append

image-20210514181908352

image-20210514182008678

默认是不开启的,我们需要手动进行配置!我们只需要将appendonly改为yes就开启了aof!点击i就可以进行插入设置,然后在点击esc之后点击:wq退出保存 重启redis就可以生效

修改了配置文件,需要重启redis

image-20210514204156554

image-20210514204749946

测试:

image-20210514205025629

image-20210514205144454

image-20210514205336180

破坏aof文件后,重新启动redis不能连接成功, 我们需要修复这个aof文件,redis 给我们提供了一个工具redis-check-aof --fix

image-20210514205736682

image-20210514210209845

image-20210514210348899

如果文件正常,重启就可以直接恢复了!如果不正常,错误的部分就会被删掉。

image-20210514210712076

appendonly no #默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分情况下,rdb完全够用。
appendfilename "appendonly.aof" #持久化的名字

# appendfsync always #每次修改都会sync消耗性能
appendfsync everysec #每秒执行一次sync,可能会丢失这一秒的数据
# appendfsync no #不执行 sync  这个时候操作系统自己同步数据,速度最快!


优点:

1.每一次修改同步,文件的完整性会更加好!

2.每秒同步一次,可能会丢失一秒的数据

3.从不同步,效率最高

缺点:

1.相对于数据文件来说,aof远远大于rdb,修复的速度也比rdb慢

2.aof运行效率也要比rdb慢,所以我们redis默认的配置就是rdb持久化!

测试结束后,要把配置文件还原默认

image-20210514211538117

重写规则说明rewrite

aof默认的是文件的无限追加,文件就会越来越大!

image-20210514212011948

如果aof文件大于64mb, 太大了!fork一个新的进程来将我们的文件进行重写,redis会记录上一次的aof大小,超过了就会进行重写机制!

扩展:

image-20210514213211224

image-20210514213326182

B站学习网址:【狂神说Java】Redis最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili