首页 > 数据库 >Redis持久化之RDB和AOF

Redis持久化之RDB和AOF

时间:2024-01-12 23:13:53浏览次数:35  
标签:AOF aof Redis RDB redis rdb

Redis是基于内存的,内存中的信息断电丢失,有时需要持久化来解决这个弊端。

在之前的文章中Shiro中使用Redis管理session - 东方来客 - 博客园 (cnblogs.com)使用了Redis管理Shiro的session。

想要配置Redis持久化不是 在Maven项目中,而是 要通过redis.conf配置来影响Redis,这里通过Docker来演示持久化功能。

RDB

配置

bind 127.0.0.1 -::1
port 6379

dbfilename dump.rdb
dir /data
save 3600 1 300 100 60 10000

RDB文件内容

image

od为Octal Dump,是Linux上用来输出文件内容的工具,-c为以字符形式输出。

  1. REDIS0011表示RDB版本号是11,。
  2. redis-ver为7.2.3
  3. redis-bits表示操作系统的架构32位或者64位。
  4. ctime为RDB的创建时间
  5. used-mem为写RDB的实例所占用的内存。
  6. aof-base设置为0
  7. \0 003 one 表示3个字节的字符串:one,其后的003 xxx表示one对应的值为3个字节的xxx
  8. 377为 EOF:表示 RDB 文件的结尾。
  9. 最后的y 346 a 006 266 022 216 ,8个字节整个文件的校验和。

AOF

配置

bind 127.0.0.1 -::1
port 6379

appendonly yes
# AOF 文件名
appendfilename "redis-aof.aof"

# AOF 文件同步策略  
# "always" 每次写命令都立即同步到磁盘,"everysec" 每秒同步一次,"no" 由操作系统决定何时同步  
appendfsync everysec  

# AOF 重写最小文件大小(单位为字节)
auto-aof-rewrite-min-size 20
auto-aof-rewrite-percentage 100
dir /data
stop-writes-on-bgsave-error yes
# yes代表将会同时生成AOF和RDB文件
aof-use-rdb-preamble no

文件内容

执行一次set one zzz,发现在data目录下生成了redis-aof.aof.1.incr,其中的内容为
image
将换行符删掉后,可以看到有两条命令,第一条命令选择了第0个数据库,然后set了一个键值对one: zzz。
image
可以看到aof是通过记录客户端命令而不是保存数据来实现持久化的。

image

当重启Redis容器时可以看到从aof中加载了数据,顺序为先base后incr,这时候执行keys *可以看到Redis重启之前的数据未被丢失。

两个文件prefix.file_seq.base.aofprefix.file_seq.incr.aof
当base.aof写满时向incr.aof写入内容,incr.aof写满时会触发重写,
将Redis中最新的内容放到base.aof中并清空incr内容。

两个工具redis-check-aof和redis-rdb-cli

redis-check-aof

使用redis-check-aof--fix可以修复rdb、aof和manifest文件的错误。
使用redis-check-aof xxx.rdb文件可以输出文件的Auxiliary fields信息,比如创建时间ctime,redis-ver版本信息等。

redis-rdb-cli

redis-rdb-cli可以格式化rdb文件,输出为json格式等到一个文件:rct -f json -s /path/to/dump.rdb -o /path/to/dump.json

标签:AOF,aof,Redis,RDB,redis,rdb
From: https://www.cnblogs.com/shames/p/17961599

相关文章

  • 玩转Redis:哨兵模式揭秘,带你骑上“哨兵战车”
    摘要:大家好!今天我们要聊一聊Redis的哨兵模式。说到Redis,相信很多人都对它的高性能、高可靠性留下了深刻的印象。而在这众多强大的功能中,哨兵模式无疑是一个备受关注的话题!哨兵模式在Redis中的作用就像是一支战车部队,能够时刻监控并保护我们的Redis集群。当集群中的某个主节点发生......
  • Redis分布式锁的Java实现之道
    摘要:在当今的微服务架构中,分布式锁是一个非常重要的概念。它允许我们在多个服务之间同步操作,确保数据的一致性和完整性。而Redis作为一种高性能的内存数据存储系统,常常被用来实现分布式锁。一、分布式锁的基本概念在分布式系统中,多个节点可能同时访问和修改共享资源。如果没有适......
  • Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投
    什么是哨兵模式哨兵模式是Redis的高可用解决方案之一,它旨在提供自动故障转移和故障检测的功能。在传统的Redis部署中,单个Redis节点可能成为单点故障,一旦该节点宕机,整个系统将不可用。为了解决这个问题,哨兵模式引入了多个Redis节点,其中一个节点被选为主节点,其他节点作为从节点。......
  • Spring Boot整合Redis:实现高效缓存管理
    在现代的Web应用开发中,利用缓存来提升应用性能是一种常见的做法。Redis作为一个高性能的键值数据库,被广泛应用于缓存场景中。本文将详细介绍如何在Java中使用SpringBoot框架整合Redis,实现高效的缓存管理。什么是Redis?Redis是一个开源的内存数据结构存储系统,它支持多种类型的数据......
  • 无涯教程-Redis - TIME 命令函数
    RedisTIME命令以两个项目列表的形式返回当前服务器时间-一个Unix时间戳和在当前秒中已经经过的微秒数。TIME-返回值包含两个元素-当前时间(以UNIX时间戳格式表示),以秒为单位。当前这一秒钟已经逝去的微秒数。TIME-语法以下是RedisTIME命令的基本语法。redi......
  • 无涯教程-Redis - SYNC 命令函数
    RedisSYNC命令用于将从站同步到主站。SYNC-返回值返回字符串内容。SYNC-语法以下是RedisSYNC命令的基本语法。redis127.0.0.1:6379>SYNCSYNC-示例redis127.0.0.1:6379>SYNCEnteringslaveoutputmode...(pressCtrl-Ctoquit)SYNCwithmaster,......
  • 无涯教程-Redis - SLOWLOG 命令函数
    RedisSlowLog是一个用于记录超过指定执行时间的查询的系统,执行时间不包括与客户端交谈,发送答复等之类的I/O操作,而是实际执行命令所需的时间。您可以使用以下两个参数配置慢速日志:slowloglog-slower-than告诉Redis执行命令的时间(以微秒为单位)要超过多少秒才能被记录下来。请......
  • 无涯教程-Redis - SAVE 命令函数
    RedisSAVE命令执行数据集的同步保存,从而以RDB文件的形式生成Redis实例内部所有数据的时间点快照。SAVE-返回值成功返回OK。SAVE-语法以下是RedisSAVE命令的基本语法。redis127.0.0.1:6379>SAVESAVE-示例redis127.0.0.1:6379>SAVEOK参考链接https://......
  • 无涯教程-Redis - ROLE 命令函数
    RedisROLE是一个调试命令,它流回Redis服务器处理的每个命令,它可以帮助您了解数据库正在发生的事情,可以通过Redis-cli和telnet使用此命令,在将Redis用作数据库和分布式缓存系统时,查看服务器处理的所有请求的功能对于发现应用程序中的错误很有用。ROLE-语法以下是RedisROLE......
  • 无涯教程-Redis - MONITOR 命令函数
    RedisMONITOR是一个调试命令,可将由Redis服务器处理的每个命令流回,它可以帮助您了解数据库正在发生的事情,可以通过Redis-cli和telnet使用此命令,在将Redis用作数据库和分布式缓存系统时,查看服务器处理的所有请求的功能对于发现应用程序中的错误很有用。MONITOR-语法以下是Re......