11-Redis - 持久化值AOF
AOF:append only file
1.修改配置文件redis.conf(修改之前可以先备份一份)
[root@localhost 桌面]# cd /myredis/ [root@localhost myredis]# ll 总用量 44 -rw-r--r--. 1 root root 41404 8月 7 23:17 redis.conf [root@localhost myredis]# cp redis.conf redis_aof.conf [root@localhost myredis]# ll 总用量 88 -rw-r--r--. 1 root root 41404 8月 10 11:19 redis_aof.conf -rw-r--r--. 1 root root 41404 8月 7 23:17 redis.conf [root@localhost myredis]#
vim redis_aof.conf 编辑文件,输入/append定位到append栏,把appendonly no改成appendonly yes,保存退出
2. 启动该文件,启动之前,如下,appendonly.aof并没有这个文件,启动redis_aof.conf之后,出现appendonly.aof
3. 先删除dump.rdb,这个文件是快照留下的文件,为了方便观察操作记录,这里先删除
[root@localhost 桌面]# cd /usr/local/bin [root@localhost bin]# ll 总用量 8536 -rw-r--r--. 1 root root 139 8月 10 11:53 appendonly.aof -rw-r--r--. 1 root root 48 8月 10 11:54 dump.rdb -rwxr-xr-x. 1 root root 2087507 8月 7 23:48 redis-benchmark -rwxr-xr-x. 1 root root 25165 8月 7 23:48 redis-check-aof -rwxr-xr-x. 1 root root 52804 8月 7 23:48 redis-check-dump -rwxr-xr-x. 1 root root 2211477 8月 7 23:48 redis-cli lrwxrwxrwx. 1 root root 12 8月 7 23:48 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 4346256 8月 7 23:48 redis-server [root@localhost bin]# rm -f dump.rdb [root@localhost bin]# ll 总用量 8532 -rw-r--r--. 1 root root 139 8月 10 11:53 appendonly.aof -rwxr-xr-x. 1 root root 2087507 8月 7 23:48 redis-benchmark -rwxr-xr-x. 1 root root 25165 8月 7 23:48 redis-check-aof -rwxr-xr-x. 1 root root 52804 8月 7 23:48 redis-check-dump -rwxr-xr-x. 1 root root 2211477 8月 7 23:48 redis-cli lrwxrwxrwx. 1 root root 12 8月 7 23:48 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 4346256 8月 7 23:48 redis-server [root@localhost bin]#
4. 设置集合kv
127.0.0.1:6379> select 0 OK 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> set k3 v3 OK 127.0.0.1:6379> set k4 v4 OK 127.0.0.1:6379> keys * 1) "k1" 2) "k3" 3) "k2" 4) "k4" 127.0.0.1:6379>
5. 删除刚刚设置的kv(因为appendonly.aof会记录刚刚的操作,所以尽管这里已经删除了,但是还是可以恢复)
127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
6. 查看/usr/local/bin下的文件,多了dump.rdb和appendonly.aof,这是备份文件
127.0.0.1:6379> exit [root@localhost bin]# ll 总用量 8536 -rw-r--r--. 1 root root 314 8月 10 12:10 appendonly.aof -rw-r--r--. 1 root root 18 8月 10 12:10 dump.rdb -rwxr-xr-x. 1 root root 2087507 8月 7 23:48 redis-benchmark -rwxr-xr-x. 1 root root 25165 8月 7 23:48 redis-check-aof -rwxr-xr-x. 1 root root 52804 8月 7 23:48 redis-check-dump -rwxr-xr-x. 1 root root 2211477 8月 7 23:48 redis-cli lrwxrwxrwx. 1 root root 12 8月 7 23:48 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 4346256 8月 7 23:48 redis-server [root@localhost bin]#
7. 打开appendonly.aof文件,发现是刚刚的set kv操作
[root@localhost bin]# cat appendonly.aof *2 $6 SELECT $1 0 *3 $3 set $2 k1 $2 v1 *3 $3 set $2 k2 $2 v2 ............
8. 尝试恢复数据
这时候并没有数据
[root@localhost bin]# redis-cli -p 6379 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
重启服务,redis会自动把appendonly.aof中的命令执行一遍,相当于恢复数据
redis-server /myredis/redis_aof.conf
再次查看,还是没有发现数据
[root@localhost bin]# redis-server /myredis/redis_aof.conf [root@localhost bin]# redis-cli -p 6379 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
查看appendonly.aof发现文件末尾有一个flushall命令
v3
*3
$3
set
$2
k4
$2
v4
*1
$8
FLUSHALL
[root@localhost bin]#
这相当于恢复了数据有给flushall掉了,相当于没有恢复,所以keys * 没有发现数据,这时候把这个flushall删掉,保存退出
再次重启服务,发现刚刚被删除的数据已经恢复
appendonly.aof和dump.rdb这两个文件可以放在同一个目录下,在启动redis的时候,先启动的是appendonly.aof,后启动dump.rdb,如果appendonly.aof存在错误的命令,那么使用命令redis-server是无法启动redis的
如果appendonly.aof文件中存在错误命令,就使用以下操作修复该文件
在实际开发中要备份appendonly.aof文件
打开redis.conf文件,查看redis的appendonly.aof日志文件的大小:
默认是64MB,一个在实际开发中用的比较多的redis的公司的这个文件是3G起步,没有达到这个大小,说明这个公司使用redis的机会不大