首页 > 数据库 >7、Redis持久化存储的两种方式

7、Redis持久化存储的两种方式

时间:2023-03-08 15:35:48浏览次数:40  
标签:AOF 存储 持久 Redis redis data rdb 重写

1.Redis持久化存储的两种方式
RDB方式 RDB存储是Redis实现的一种存储机制 (默认开启)
AOF方式 AOF存储方式,直接把操作的命令记录下来,保存到一个文件里,类似mysql的binlog日志 (默认关闭)

2.Redis的RDB持久化存储
Redis默认是开启了RDB快照方式,提供持久化存储的功能
如果只让Redis做缓存的服务,不需要持久化时候,也可以关闭所有存储功能

3.Redis的RDB存储方式的配置,默认是开启的

>config get dir                        #查看存储设置的路径
1) "dir"
2) "/data/redis"
>config get dbfilename           #查看rdb存储的文件名,默认是dump.rdb文件   
1) "dbfilename"
2) "dump.rdb"                      #该文件可以保证redis的数据不丢失

# ls /data/redis/
dump.rdb  redis.log  redis.pid

>config get save                   #查看rdb默认的存储机制配置
3600 1 300 100 60 10000      #3600s(1个小时)   1(key的一个变化)     300s(5分钟)  100(key的变化)    60s(1分钟)  10000(key的变化)
key的变化越快,保存的就越频繁。 60s中 key变化了10000个,那么我1分钟就会给你存上, 1小时才变化一个key,就1小时给你存一次
更新得越频繁,保存得越频繁。另外,关闭redis服务器会立马触发rdb存储  

验证一下rdb持久化存储:
# redis-cli -a redispwd                                                      #登录redis先设置一些数据
> set k1 v1
> set k2 v2
> set k3 v3
> keys *
1) "k3"
2) "k2"
3) "k1"
> quit 
# ls /data/redis/
dump.rdb  redis.log  redis.pid

# systemctl stop redis                                                   #停止redis,将持久化存储文件模拟删除
# mv /data/redis/dump.rdb /data/redis/dump.rdb.bak
# ls /data/redis/
dump.rdb.bak  redis.log
# systemctl start redis                                                 #再重新启动redis
# redis-cli -a redispwd                                                 #发现持久化数据文件删除后,数据丢失
> keys *
(empty array)
> quit
恢复数据:
# systemctl stop redis
# mv /data/redis/dump.rdb.bak /data/redis/dump.rdb
# systemctl start redis
# redis-cli -a redispwd
> keys *
1) "k3"
2) "k1"
3) "k2"

设置关闭rdb:需要先删除dump.rdb文件
>config set save ""                       #关闭rdb快照持久化存储,测试的不好使
>config get save                          #查看
>config rewrite                            #写入配置文件,永久设置                           
>config set rdbcompression no      #rdb文件需不需要压缩,当磁盘空间比较大时候,可以设置不用压缩

通过修改配置文件关闭rdb持久化:  
# vim /etc/redis.conf
save ""                                      #添加
                                               #注释下面的:
#save 3600 1
#save 300 100
#save 60 10000

案例:关闭rdb持久化

rm -f /data/redis/dump.rdb         #先删除rdb快照文件,否则即使关闭持久化,还会通过快照给还原过来
vim /etc/redis.conf
save ""                                        #添加,关闭持久化
systemctl restart redis                #重启redis
redis-cli -a redispwd
> CONFIG GET save                     #查看rdb持久化配置为空
1) "save"
2) ""
> set k11 v11                              #增加几个key的数据
> set k12 v12
> keys *                                      #查看key
1) "k12"
2) "k11"
> quit
systemctl restart redis               #重启redis
redis-cli -a redispwd                  #重新登录redis,发现重启后数据丢失
> keys *    
(empty array)

3.Redis的AOF持久化存储
AOF存储默认是关闭的
AOF存储是把命令直接写入到文件中,文件会不断扩大

1.开启AOF前先关闭RDB(一般建议关闭,持久化存储用其中一种就行),也能同时配置,同时配置AOF优先生效

# vim /etc/redis.conf
save ""                                            #添加
                                                     #注释下面的:
#save 3600 1
#save 300 100
#save 60 10000

2.开启AOF存储方式

>config get append*                        #查看AOF状态,默认是关闭的
1) "appendonly"
2) "no"
>config set appendonly yes               #开启AOF存储
>config rewrite      #写入配置文件

案例:开启AOF存储方式持久化存储

>config get append*                        #查看AOF状态,默认是关闭的
1) "appendonly"
2) "no"
3) "appendfilename"
4) "appendonly.aof"
5) "appendfsync"
6) "everysec"
>config set appendonly yes               #开启AOF存储
>config rewrite                                #写入配置文件
# grep appendonly /etc/redis.conf      #查看redis配置文件
appendonly yes
appendfilename "appendonly.aof"
# ls /data/redis/appendonly.aof         #查看AOF文件的路径
/data/redis/appendonly.aof
# redis-cli -a redispwd                     #登录redis写入测试数据
> set a1 b1
> set a2 b2
> keys *
1) "a2"
2) "a1"
# tail -12 /data/redis/appendonly.aof    #查看AOF文件记录的命令
set
$2
a1
$2
b1
*3
$3
set
$2
a2
$2
b2
# systemctl restart redis                        #重启redis
# redis-cli -a redispwd                           #重新登录redis,数据还在,数据持久化没问题
> keys *
1) "a1"
2) "a2"
> get a1
"b1"

3.AOF存储是把命令直接写入到文件中,文件会不断扩大

>set a b
>set a b
...
ll /data/redis/appendonly.aof              #文件时一直在增大的

4.AOF文件的重写
当AOF文件增大到一定程度,我们可以对他进行重写,重写AOF文件可以减小AOF文件的大小,数据不会减少

5.重写方式有两种:手动重写和自动重写
手动重写:
> BGREWRITEAOF #手动重写AOF文件,重写后AOF文件会减小

自动重写:

> config get *aof*                               #查看自动重写AOF文件的条件,重写后AOF文件会减小
 1) "aof-rewrite-incremental-fsync"
 2) "yes"
 3) "aof-load-truncated"
 4) "yes"
 5) "aof-use-rdb-preamble"
 6) "yes"
 7) "aof_rewrite_cpulist"
 8) ""
 9) "auto-aof-rewrite-percentage"
10) "100"                                         #当达到100%增量的时候会触发AOF重写
11) "auto-aof-rewrite-min-size"
12) "67108864"                                 #AOF文件>67M时候触发AOF重写
13) "replicaof"
14) ""
自动重写的条件:重写条件是aof文件大小>67M,aof文件增大了一倍

案例演示: 手动重写

# ls -l /data/redis/appendonly*         #先查看一下AOF文件的大小
# redis-cli -a redispwd                     #登录下redis,手动触发重写
> BGREWRITEAOF                          #手动重写AOF文件
# ls -l /data/redis/appendonly*         #再查看一下AOF文件的大小,发现会减小

案例演示: 自动重写

# ls -lh /data/redis/appendonly*        #先查看一下AOF文件的大小
刚开始比较小
# redis-benchmark -a redispwd         #使用压测工具触发写入数据,使AOF文件增大    
# ls -lh /data/redis/appendonly*        #不断查看AOF文件的大小,发现逐渐增大,当>67M后,会变小,说明达到触发条件后,进行了自动重写
# ls -lh /data/redis/appendonly*
# ......

注意: 自动触发重写 在业务高峰压力大,如果采用自动触发重写,有可能会影响业务,可选择在压力小的时候脚本运行BGREWRITEAOF

标签:AOF,存储,持久,Redis,redis,data,rdb,重写
From: https://www.cnblogs.com/fxxy/p/17192121.html

相关文章

  • 8、Redis的RDB工具分析key的大小
    1.什么是Redis的大key?(BigKey)redis存储数据的时候,当某个key的值比较大(包括字符串、列表等数据类型),key的数据越大,占用的内存和空间就越多。BigKey(大key)Bigkey指的是redis......
  • 5、Redis慢日志和key有效期
    一、Redis的慢日志问题:如果有人反馈redis慢,如何进行排查?系统资源情况查看慢日志情况1.查看慢日志的默认配置>CONFIGGETslow*#查看慢日志的配......
  • 6、Redis禁用危险命令和压测工具
    1.Redis禁用危险命令Redis危险的命令有哪些?>FLUSHALL会清空Redis所有数据>FLUSHDB会清除当前DB所有数据>KEYS*在键过多的时候......
  • redis之列表、redis之hash、redis其他操作、redis 管道、django中使用redis、celery介
    目录1redis之列表2redis之hash3redis其他操作4redis管道5django中使用redis5celery介绍和安装6celery快速使用7celery包结构#1登录注册前端 -登录 -手......
  • 3、Redis库切换和运维监控命令
    一.Redis不同数据库的切换1.配置文件查看Redis有多少个库?#默认是16个[root@localhost~]#grepdatabases/etc/redis.confdatabases162.Redis数据库的切换>sel......
  • 2、Redis常用数据类型
    1.Redis-cli使用和认证登录#客户端工具redis-cli登录redis-cli#默认127.0.0.16379redis-cli-hipredis-cli-hip-pportredis-cli-h......
  • DVWA系列5:XSS 跨站脚本攻击之 存储型
    DVWA系列5:XSS跨站脚本攻击之存储型前言上一篇文章介绍了XSS中的DOM型和反射型,这两者都是不与目标网站的后台服务器交互的。而存储型是使用各种方法将攻击内容保......
  • [Java]基础篇-对象存储OSS
    商城品牌管理新建品牌管理菜单逆向生成的vue代码复制到vscode工作空间brand.vue页面代码brand-add-or-update.vue添加修改组件代码启动项目:对显示状态进行优化......
  • 关于redis的击穿,穿透,雪崩
    Redis提供了一些技术手段来防止缓存击穿、缓存雪崩和缓存穿透,这些技术手段包括:缓存击穿缓存击穿是指一个不存在于缓存中的key,每次访问时都会穿透到数据库,导致数据库负......
  • 无状态的存储
    分库分表只解决了容量的问题,并没有解决写服务的高可用问题读服务里,可以采用数据冗余来保障架构的高可用写冗余需要有满足CAP原则的存储支持,而我们知道,CAP原则最多只能......