首页 > 数据库 >Redis持久化机制

Redis持久化机制

时间:2023-03-19 16:58:55浏览次数:41  
标签:AOF 持久 删除 Redis 内存 数据 化机制

Redis持久化机制

redis是用来做缓存。

持久化:数据从内存->磁盘

Redis官方提供了两种持久化机制。

  • 快照(SNAPSHOT)RDB
  • AOF(Append Only File)只追加日志文件

快照

特点:这种方式可以把某一时刻所有数据存入硬盘中,Redis默认的持久化机制保存的文件是以rdb形式保存。

快照的生成方式

  • 客户端指令:BGSAVE或SAVE指令
  • 服务器配置自动触发
    • 配置文件中的触发策略
    • 关闭redis服务

rdb文件就是快照持久化的核心,定期备份rdb文件。

AOF持久化

保存执行的命令。把操作数据的指令保存到一个aof文件里,Redis默认是不开启AOF持久化

需要我们手动开启AOF持久化。

AOF持久化会自动忽略读指令,只记录写指令。

日志追加频率

  • always:每个redis写的命令同步,降低redis效率。
  • everysec:每秒执行一次同步,有延迟。
  • no:由操作系统决定何时同步。

如果AOF持久化和RDB持久化同时开启,会以AOF为准。

AOF文件具备了一个自我修复的能力。

./redis-check-aof --fix appendonly.aof

AOF文件重写

# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

如果当前aof文件的大小已经比64mb大了100%,自动指定重写AOF文件的指令。

Redis事务

Redis的事务是不支持回滚的。

开启事务:

MULTI

提交事务:

EXEC

放弃事务:

DISCARD
  • 悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都会认为别人要修改,每次拿数据时都会上锁,别人想拿这个数据,就会被锁住,直到另外一方释放锁。在传统的关系型数据库中用到了很多的悲观锁,比如行锁,表锁,读锁,写锁。

  • 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候会认为别人不会修改,所以不会上锁。由于在开发中,所有的删除都是逻辑删除,都是修改操作,version版本号。当执行修改操作时,要提交的版本号必须大于当前版本号才能执行更新。

数据删除与淘汰策略

Redis中数据的特征

Redis是一种内存级数据库,所有数据都是存在内存中,内存中的数据可以通过TTL获取器状态。

TTL返回的值三种情况:

  • 正数:代表该数据在内存中还能存活的时间
  • -1:永久有效的数据
  • -2:已经过期的数据或被删除的数据或未定义的数据

删除策略就是针对已过期数据的处理策略,已过期的数据是不是真的就立即删除了?

其实也不是,我们实际上有多种删除策略。

时效性数据的存储

所有的过期数据会存放在一块独立的存储空间,Hash结构,key就是内存地址,value是过期时间,保存了所有的key的过期描述,在最终进行过期处理的时候,对该空间的数据进行监测。

数据删除策略

目标:在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成redis性能的下降,甚至引发服务器宕机或内存泄漏。

  • 1.定时删除
  • 2.惰性删除
  • 3.定期删除

定时删除

创建一个定时器,当key设置了过期时间,且过期时间到达时,由定时器任务立即执行对键的闪出去操作。

  • 优点:节约内存,到时就删除,快速释放不必要的内存占用。
  • 缺点:CPU压力很大,无论CPU此时负载量多高,占用CPU,会影响redis的响应时间。
  • 总结:用CPU性能换取存储空间。

惰性删除

数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断:

  1. 如果未过期,返回数据
  2. 如果过期,删除,返回不存在
  • 优点:节约CPU性能,必须删除的时候才删除
  • 缺点:内存压力很大,出现长期占用内存的资源
  • 总结:用存取空间换取CPU性能

定期删除

其实是上两种策略的折中方案!

  • Redis启动服务器初始化的时候,读取一个配置,server.hz,默认是10
  • 每秒中实行一次配置。

标签:AOF,持久,删除,Redis,内存,数据,化机制
From: https://www.cnblogs.com/shenmimao/p/17233551.html

相关文章

  • Redis的Linus下的安装
    RedisNoSQL:NotOnlySQL非关系型数据库。缓存流量比较大,不需要写sql语句。NoSQL的四大分类:1、键值(Key-Value)存储数据库。使用到一个哈希表,这个表中有一个指针指向特定的......
  • Redis的Linux下的安装
    Linus一,虚拟机下安装Linus选择虚拟机安装CentOS-7-x86_64-Minimal-1804的镜像,按顺序操作下一步创建root密码,如123456,点击完成,重启输入root和设定的密码123456进入系......
  • 【RabbitMQ消息中间件】11.持久化和非持久化队列
    上一篇介绍并搭建了Spring-Rabbit工程,并且创建了一个名为MyQueue的队列。下面补充一个有关持久化和非持久化队列的知识点。登录RabbitMQ的图形化管理界......
  • docker 安装redis
    dockersearchredis   或者去dockerHub上去找版本哪个版本用的人多就用哪个 2.dockerpulredis(dockerpull<镜像名称>:<版本号>默认是拉取latest)  ......
  • Redis-超卖问题
    悲观锁:简单粗暴,性能一般。认为线程安全一定会发生,在操作数据之前获取锁,确保线程串行执行。Synchronized。Lock都属于悲观锁 乐观锁,性能较好。认为线程安全问题不一定......
  • Redis实战—优惠卷
    全局ID生成器,满足以下特性: 1.唯一性,2.高可用,3.高性能,4.递增性,5.安全性。实现:拼接,ID会用数值:Long型直接插入数据库策略:UUID;Redis自增;雪花算法;数据库自增Redis自增:......
  • golang常用库包:缓存redis操作库go-redis使用(03)-高级数据结构和其它特性
    Redis高级数据结构操作和其它特性第一篇:go-redis使用,介绍Redis基本数据结构和其他特性,以及go-redis连接到Redishttps://www.cnblogs.com/jiujuan/p/17207166.html第......
  • [redis] 设置密码
    安装好redis之后默认没有密码。修改redis.conf配置设置密码参数requirepass配置redis访问密码重启服务生效在登录时输入密码:redis-cli-p6379-apwddocker......
  • redis字典
    一种保存键值对的抽象数据结构每个键都是独一无二的,换言之,自带去重。是redis数据库的底层实现。是Hash键的底层实现之一,当Hash键包含的键值对过多,或键值对中的元素都是......
  • redis常见问题总结
    redis主从是异步模式AOF和RDB复制都是才有子进程共享内存,写时复制实现的。Redis为了避免AOF文件越写越大,提供了AOF重写机制,当AOF文件的大小超过所设定的阈值后,Re......