上一篇 下一篇 分享链接 返回 返回顶部

云服务器redis数据持久化

发布人:欢子 发布时间:2026-01-21 09:43 阅读量:9
Redis数据持久化Redis数据持久化的意义Redis的数据是存储在内存中的,数据持久化主要应用于Redis服务重启时恢复部分数据

RDB:

将内存中Redis存储的数据定期以快照的形式存储到硬盘

拍照片

AOF:

记录Redis曾经执行过的所有的写操作到文本文件

写日记

#编译安装Redis

[root@server55~]#lsredis-4.0.8.tar.gz

redis-4.0.8.tar.gz

[root@server55~]#yum-yinstallgcc

[root@server55~]#tar-xfredis-4.0.8.tar.gz

[root@server55~]#cdredis-4.0.8/

[root@server55redis-4.0.8]#make&&makeinstall

[root@server55redis-4.0.8]#./utils/install_server.sh#一路回车

...

Installationsuccessful!

[root@server55redis-4.0.8]#cd

[root@server55~]#

#Redis服务初始化

[root@server55~]#ss-pantul|grepredis

tcpLISTEN0128127.0.0.1:6379*:*users:(("redis-server",pid=4672,fd=6))

[root@server55~]#

RDB测试

##查看RDB相关配置

[root@server55~]#vim/etc/redis/6379.conf

[root@server55~]#sed-rn'219,221p;254p;264p'/etc/redis/6379.conf

save9001#900s内有1个变量变化

save30010#300s内有10个变量变化

save6010000#60s内有10000个变量变化

dbfilenamedump.rdb#rdb文件名

dir/var/lib/redis/6379#rdb文件存储位置

[root@server55~]#

##验证触发RDB存储的3种情况

#手工触发

[root@server55~]#ls/var/lib/redis/6379/#确认Redis数据目录为空

[root@server55~]#redis-clisave#save指令触发(阻塞)

OK

[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成

dump.rdb

[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件

[root@server55~]#redis-clibgsave#bgsave指令触发(非阻塞)

Backgroundsavingstarted

[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成

dump.rdb

[root@server55~]#

#服务重启触发

[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件

[root@server55~]#/etc/init.d/redis_6379restart#重启Redis服务

[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成

dump.rdb

[root@server55~]#

#变化规则触发

[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件

[root@server55~]#redis-clikeys\*

(emptylistorset)

[root@server55~]#vimgendata.sh#编写脚本

[root@server55~]#catgendata.sh

#!/bin/bash

foriin{1..10001}

do

key=name$i

value=zs$i

redis-cliset${key}${value}&>/dev/null

done

[root@server55~]#bashgendata.sh#执行脚本生成数据

[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成

dump.rdb

[root@server55~]#

##利用rdb文件恢复数据

[root@server55~]#cp/var/lib/redis/6379/dump.rdb/opt/#备份rdb文件

[root@server55~]#redis-cliflushall#清空Redis数据库模拟数据损坏

OK

[root@server55~]#redis-clibgsave#触发持久化存储

Backgroundsavingstarted

[root@server55~]#redis-clikeys\*#数据被清空

(emptylistorset)

[root@server55~]#/etc/init.d/redis_6379stop#停止服务

[root@server55~]#cp/opt/dump.rdb/var/lib/redis/6379/#rdb文件数据还原

cp:overwrite‘/var/lib/redis/6379/dump.rdb’?y

[root@server55~]#/etc/init.d/redis_6379start#启动服务器加载rdb文件

[root@server55~]#redis-clikeys\*#确认数据恢复

1)"name9813"

2)"name5207"

3)"name5300"

...

#清理测试数据

[root@server55~]#redis-cliflushall

OK

[root@server55~]#redis-clibgsave

Backgroundsavingstarted

AOF测试

##查看aof相关配置

[root@server55~]#sed-rn'673p;677p;702,704p'/etc/redis/6379.conf

appendonlyno

appendfilename"appendonly.aof"

#appendfsyncalways

appendfsynceverysec

#appendfsyncno

[root@server55~]#

#启用aof配置

[root@server55~]#redis-cli

127.0.0.1:6379>CONFIGSETappendonlyyes#命令行做服务配置

OK

127.0.0.1:6379>CONFIGREWRITE#回写到配置文件

OK

127.0.0.1:6379>exit

[root@server55~]#cat/etc/redis/6379.conf|grep^appendonly#确认回写结果

appendonlyyes

[root@server55~]#

#测试aof记录

[root@server55~]#ls/var/lib/redis/6379/#确认生成aof文件

appendonly.aofdump.rdb

[root@server55~]#cat/var/lib/redis/6379/appendonly.aof#查看文件内容,此时为空

[root@server55~]#redis-cliseta1#存入数据

OK

[root@server55~]#redis-clisetb2

OK

[root@server55~]#redis-clisetc3

OK

[root@server55~]#cat/var/lib/redis/6379/appendonly.aof#查看文件内容,此时不为空

*2

$6

SELECT

$1

0

*3

$3

set

$1

a

$1

1

*3

$3

set

$1

b

$1

2

*3

$3

set

$1

c

$1

3

[root@server55~]#

#测试aof文件恢复数据

[root@server55~]#cp/var/lib/redis/6379/appendonly.aof/opt/#备份aof文件

[root@server55~]#redis-cliflushall#清空数据

OK

[root@server55~]#/etc/init.d/redis_6379stop#停止服务

[root@server55~]#rm-rf/var/lib/redis/6379/*#清理已有aof文件

[root@server55~]#cp/opt/appendonly.aof/var/lib/redis/6379/#拷贝备份aof文件

[root@server55~]#/etc/init.d/redis_6379start#启动服务

[root@server55~]#redis-clikeys\*#确认数据恢复

1)"b"

2)"c"

3)"a"

[root@server55~]#

#aof文件修复

[root@server55~]#/etc/init.d/redis_6379stop#停Redis服务

[root@server55~]#echoaaaaaa>>/var/lib/redis/6379/appendonly.aof#模拟aof文件损坏

[root@server55~]#/etc/init.d/redis_6379start#启Redis服务

[root@server55~]#ss-pantul|grepredis#服务启动失败

[root@server55~]#tail-1/var/log/redis_6379.log#查看日志内容

49447:M28May17:50:50.742#Badfileformatreadingtheappendonlyfile:makeabackupofyourAOFfile,thenuse./redis-check-aof--fix

[root@server55~]#redis-check-aof--fix/var/lib/redis/6379/appendonly.aof#修复aof文件

0x68:Expectedprefix'*',got:'a'

AOFanalyzed:size=111,ok_up_to=104,diff=7

ThiswillshrinktheAOFfrom111bytes,with7bytes,to104bytes

Continue?[y/N]:y#输入y确认

SuccessfullytruncatedAOF

[root@server55~]#/etc/init.d/redis_6379start#启动服务(报错pid文件已存在)

/var/run/redis_6379.pidexists,processisalreadyrunningorcrashed

[root@server55~]#rm-rf/var/run/redis_6379.pid#删除空的pid文件

[root@server55~]#/etc/init.d/redis_6379start#启动服务

StartingRedisserver...

[root@server55~]#ss-pantul|grepredis

tcpLISTEN0128127.0.0.1:6379*:*users:(("redis-server",pid=49486,fd=6))

[root@server55~]#redis-clikeys\*#确认数据恢复

1)"b"

2)"c"

3)"a"

目录结构
全文