首页 > 数据库 >redis持久化

redis持久化

时间:2024-07-02 21:57:19浏览次数:1  
标签:aof 持久 AOF redis 命令 文件 快照

redis持久化

1.1 介绍

# redis持久化
redis作为一个内存数据库,数据是以内存作为载体存储的,那么一单redis服务器进程退出,服务器中的数据也会消失。为例解决这个问题,redis提供了持久化机制。也就是把数据保存在磁盘中。有两种方式保存。

# rdb快照持久化
rdb快照的方式是指在一定的时间间隔,将内存中的数据集写入磁盘。在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据。RDB是Redis默认的持久化方式

# aof持久化
除了RDB持久化,Redis还提供了AOF(Append Only File)持久化功能,AOF持久化会把被执行的写命令写到AOF文件的末尾,记录数据的变化。默认情况下,Redis是没有开启AOF持久化的,开启后,每执行一条更改Redis数据的命令,都会把该命令追加到AOF文件中,这是会降低Redis的性能,但大部分情况下这个影响是能够接受的,另外使用较快的硬盘可以提高AOF的性能

1.2 rdb快照持久化

# 介绍
RDB持久化会生成RDB文件,该文件是一个压缩过的二进制文件,可以通过该文件还原快照时的数据库状态,即生成该RDB文件时的服务器数据。RDB文件默认为当前工作目录下的dump.rdb,可以根据配置文件中的dbfilename和dir设置RDB的文件名和文件位置

# 触发快照的时机
1.执行save和bgsave命令
2.配置文件设置save <seconds> <changes>规则,自动间隔性执行bgsave命令
3.主从复制时,从库全量复制同步主库数据,主库会执行bgsave
4.执行flushall命令清空服务器数据
5.执行shutdown命令关闭Redis时,会执行save命令

# save和bgsave命令
执行save和bgsave命令,可以手动触发快照,生成RDB文件,
使用save命令会阻塞Redis服务器进程,服务器进程在RDB文件创建完成之前是不能处理任何的命令请求
而使用bgsave命令不同的是,basave命令会fork一个子进程,然后该子进程会负责创建RDB文件,而服务器进程会继续处理命令请求

# 自动间隔触发
在配置文件中设置save <seconds> <changes>规则,可以自动间隔性执行bgsave命令
save 900 1
save 300 10
save 60 10000


save 900 1  当时间到900秒时,如果至少有1个key发生变化,就会自动触发bgsave命令创建快照
save 300 10  当时间到300秒时,如果至少有10个key发生变化,就会自动触发bgsave命令创建快照
save 60 10000    当时间到60秒时,如果至少有10000个key发生变化,就会自动触发bgsave命令创建快照

img

1.3 AOF持久化

# 介绍
除了RDB持久化,Redis还提供了AOF(Append Only File)持久化功能,AOF持久化会把被执行的写命令写到AOF文件的末尾,记录数据的变化。默认情况下,Redis是没有开启AOF持久化的,开启后,每执行一条更改Redis数据的命令,都会把该命令追加到AOF文件中,这是会降低Redis的性能,但大部分情况下这个影响是能够接受的,另外使用较快的硬盘可以提高AOF的性能

# 开启aof
可以通过配置redis.conf文件开启AOF持久化,关于AOF的配置如下

aof配置

# 配置

# appendonly参数开启AOF持久化
appendonly no

# AOF持久化的文件名,默认是appendonly.aof
appendfilename "appendonly.aof"

# AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
dir ./

# 同步策略
# appendfsync always
appendfsync everysec
# appendfsync no

# aof重写期间是否同步
no-appendfsync-on-rewrite no

# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 加载aof出错如何处理
aof-load-truncated yes

# 文件重写策略
aof-rewrite-incremental-fsync yes

1.4 aof重写

# 介绍
随着时间的推移,Redis执行的写命令会越来越多,AOF文件也会越来越大,过大的AOF文件可能会对Redis服务器造成影响,如果使用AOF文件来进行数据还原所需时间也会越长
AOF重写的目的就是减小AOF文件的体积,不过值得注意的是:AOF文件重写并不需要对现有的AOF文件进行任何读取、分享和写入操作,而是通过读取服务器当前的数据库状态来实现的

# 触发方式
文件重写可分为手动触发和自动触发,手动触发执行bgrewriteaof命令,该命令的执行跟bgsave触发快照时类似的,都是先fork一个子进程做具体的工作

# 自动触发命令
# 表示当AOF文件的体积大于64MB,且AOF文件的体积比上一次重写后的体积大了一倍(100%)时,会执行`bgrewriteaof`命令
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

img

标签:aof,持久,AOF,redis,命令,文件,快照
From: https://www.cnblogs.com/Hqqqq/p/18280578

相关文章

  • 实例--通过反射手写持久层框架
    简介涉及技术栈:javamysql反射自定义注解泛型jdbc持久层框架:与数据库交互的一层称为持久层(俗称dao层)作用:可以无需写sql语句即可完成对表单的CRUD操作引用相关jar包<dependency><groupId>junit</groupId><artifactId>junit</artifactId><ve......
  • ssrf+结合redis 写入crontab或者公钥(两种环境)
    REDISredis作为一种数据库其实是会真的将数据写入到内存中的我们利用ssrf请求请求redis实现服务器对自己的公钥或任务计划写入实现无密码登录或反弹bashredis监听所有地址时才能被外部访问否则只能127.0.0.1本地访问而且开启保护模式后会导致目标端口只能本地访问这......
  • 【AKS+Redis】AKS中客户端(ioredis)遇见Azure Redis服务Failover后链接中断的可能性
    问题描述在AKS中连接Redis,当遇到AzureRedis升级或者Failover时,NodeJS应用中使用ioredissdk在很长一段时间内无法恢复和AzureRedis服务端的连接,对于这种想象的可能性推断。 问题解答使用AzureCacheforRedis时,一个服务器是主节点,另一个服务器是副本。主节点通常负......
  • Redis Sentinal(哨兵模式详解)
    参考文章https://www.cnblogs.com/wzh2010/p/180309071、什么是哨兵模式在实际生产环境中,服务器难免会遇到一些突发状况:服务器宕机,停电,硬件损坏等等,一旦发生,后果不堪设想。哨兵模式的核心还是主从模式的演变,只不过相对于主从模式,在主节点宕机导致不可写的情况下,多了探活,以及竞......
  • 01字典树和可持久化01字典树
    01字典树01字典树是一种只有0和1两种边的字典树。可以解决查询第\(k\)小,查询\(x\)是第几小等问题。查询第\(k\)小可以把输入的数转成等长二进制,然后插入01字典树。比如将\([0,0,1,3,3]\)插入字典树:这里红色数字表示以该段为前缀的数的个数,黑色表示对应的数。假设我......
  • 23- Redis 主从复制是怎么实现的?
    之前介绍过AOF和RDB,这两个持久化技术保证了即使在服务器重启的情况下也不会丢失数据(或少量丢失)。不过,由于数据都是存储在一台服务器上,如果出事就完犊子了,比如:如果服务器发生了宕机,由于数据恢复是需要时间的,那么这个期间是无法服务新的请求的;如果这台服务器的硬盘出现了......
  • 保存到redis中的token乱码了
    示图:原因是缓存保存到redis需要序列化操作,没有序列化会出现这样的问题序列化redis第一步:packagecom.abliner.test.configure.redis;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom......
  • 可持久化 0/1 Trie
    可持久化可以维护数据结构的历史版本。对于一个字典树,如果更改一个元素,暴力做法是复制一个树,让后在树上修改。其实,这样是有很多个一定一样的点是浪费的,真正被修改的是\(\log_2n\)个点,\(2\log_2n\)条边。优点:大大减低时间复杂度,还支持在线做。缺点:不能传懒......
  • 十四、Redis应用问题解决
    文章目录一、缓存穿透1.1问题描述1.2解决方案二、缓存击穿2.1问题描述2.2解决方案三、缓存雪崩3.1问题描述3.2解决方案四、分布式锁4.1问题描述4.2解决方案:使用redis实现分布式锁4.3编写代码4.4优化之设置锁的过期时间4.5优化之UUID防误删4.6优化之LUA脚......
  • 十三、Redis集群
    文章目录一、问题二、什么是集群三、删除持久化数据四、制作6个实例6379,6380,6381,6389,6390,63914.1配置基本信息4.2rediscluster配置修改4.3修改好redis6379.conf文件,拷贝多个redis.conf文件4.4使用查找替换修改另外5个文件4.5启动6个redis服务......