首页 > 数据库 >Redis中的事务与持久化简单整理

Redis中的事务与持久化简单整理

时间:2023-07-01 19:57:59浏览次数:40  
标签:AOF 事务 持久 Redis 命令 RDB 执行

Redis中的事务与持久化

事务可以一次执行多个命令,并带有两个重要的保证:
1、 事务中的所有命令都被序列化并按顺序执行。Redis执行事务期间,不会被其它客户端发送的命令打断,事务中的所有命令都作为一个隔离操作顺序执行。

2、 Redis事务是原子操作,或者执行所有命令或者都不执行。

通过Multi开始事务,输入的命令依次加入命令队列中但不会依次执行。通过Exec命令使队列中的命令依次执行。组队过程中可以通过discard命令终止组队。

例如:我们输入multi,Redis客户端会返回一个OK,开启事务。
z9EU0A.png
紧接着,我们输入exec,以上命令就会顺序执行:
z9Es1S.png
我们可以用discard不执行:
z9E6XQ.png

如果在组队有一个命令出错(往往是语法错误,而不是逻辑错误),那么所有命令都不会被执行。但是,如果是执行阶段某个命令错误,则只会执行正确的命令,跳过错误的命令。

事务冲突

采用悲观锁(每次操作前先上锁使别人不能操作)或者乐观锁(给操作数据加上“版本号”来确定是否能操作)解决事务冲突问题。

我们可以通过watch [key]来给对应的key加锁,这是一种乐观锁加锁命令。我们可以利用unwatch [key]来解开乐观锁。

Redis事务三特性

  • 单独的隔离操作:事务的所有命令都会序列化,按顺序地执行,事务在执行过程中,不会被其他客户端发送来的命令请求所打断
  • 没有隔离级别的概念:队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行
  • 不保证原子性:事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

RDB(Redis DataBase)

在指定的时间间隔内将内存中的数据集快照写入到硬盘中。 通过bgsave命令让操作系统fork()一个子进程,然后让持久化过程由子进程负责(如果发现已经创建好的持久化子进程则直接返回)。时间间隔到达后,子进程会创建RDB文件(根据父进程内存生成的临时快照文件进行原子替换)。其流程如图所示:

zCwKXD.jpg

RDB的优点:

  • RDB是一种紧凑的二进制压缩文件,适合备份,全量复制
  • 加载RDB恢复数据远快于AOF

RDB的缺点:

  • 最后一次持久化的数据可能丢失
  • 无法做到实时、秒级持久化
  • 版本兼容可能会有问题

AOF

以日志的形式记录每个写操作。AOF会把指令,数据记录下来追加(不允许改写)到文件中。AOF默认不开启。我们需要把redis.conf文件中appendonly.aof的值改为yes才能开启。若AOF和RDB同时开启,系统会默认读取AOF的数据。

zEdZTS.jpg

  • 所有写入命令会追加到aof_buf(缓冲区)中
  • AOF缓冲区根据对应的策略向硬盘做同步操作
  • 定期对AOF文件进行重写来达到压缩的目的
  • Redis服务器重启后可以加载AOF文件进行数据恢复

命令写入的内容是文本协议格式。Redis提供了很多AOF的缓冲区同步文件策略。

可配置值 Description
always 使用fsync()写入到同步文件
everysec 先调用write(),完成后线程返回。fsync()由专门线程每秒调用一次
no 只利用write()写入到同步文件

fsync()write()相比,虽然依旧要写入到缓冲区,但必须等到成功写入到磁盘后才返回,所以比较适合数据库操作。

标签:AOF,事务,持久,Redis,命令,RDB,执行
From: https://www.cnblogs.com/wyfc4/p/17519824.html

相关文章

  • 事务的使用步骤
    基本步骤:开启事务(一组操作开始前,开启事务):starttransaction/begin提交事务(这组操作全部成功后,提交事务):commit;回滚事务(中间任何一个操作出现异常,回滚事务):rollback  Spring事务管理注解注解:@Transactional位置:业务(service)层的方法上、类上、接口上作用:将......
  • Redis实现分布式锁的7种方案
    7种方案前言日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方,欢迎大家指出哈,一起学习一起进步。 什么是分布式锁方案一:SETNX+EXPIRE方案二......
  • Redis 的 AOF 重写机制
    Redis的AOF重写机制AOF持久化机制简介AOF(AppendOnlyFile)是一种持久化机制,它将Redis的写操作以日志的形式记录在文件中,以保证数据的安全性和可恢复性。AOF持久化机制的优点有以下几个:可以保证数据的完整性,即使发生系统崩溃或者断电,也可以通过AOF文件恢复数据可......
  • Redis持久化之 混合持久化
    Redis混合持久化什么是混合持久化混合持久化是在AOF持久化的基础上,定期进行RDB持久化,以保证数据的快速恢复混合持久化的实现方式是在AOF重写时,将RDB文件以二进制压缩格式写入到AOF文件的开头,之后的数据再以AOF格式追加到文件的末尾3混合持久化的优点是:可以减......
  • Redis群集​
    在centos01安装配置ntp服务器,Centos到centos06配置同步时间,在centos01到centos06安装redis服务器在centos02到centos06修改配置文件开启群集功能,查看节点监听发端口信息在centos01配置redis复制群集查看群集状态,添加删除群集节点,转移卡槽信息修改服务器配置文件重新时间服务器从red......
  • Redis数据结构——快速列表(quicklist)1
    Redis数据结构——快速列表(quicklist)一、什么是quicklistquicklist是Redis3.2版本以后针对链表和压缩列表进行改造的一种数据结构,是zipList和linkedList的混合体,相对于链表它压缩了内存。进一步的提高了效率。quicklist其实就是简单的双链表,但每个双链表节点中保存......
  • Redis数据结构——快速列表(quicklist)
    Redis数据结构——快速列表(quicklist)一、什么是quicklistquicklist是Redis3.2版本以后针对链表和压缩列表进行改造的一种数据结构,是zipList和linkedList的混合体,相对于链表它压缩了内存。进一步的提高了效率。quicklist其实就是简单的双链表,但每个双链表节点中保存......
  • 多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docke
    多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docker+Uniapp+Vue3随着移动互联网的快速发展和智能手机的普及,代驾服务成为了一个日益火热的行业。在这个行业中,如何构建一个具备商业级可靠性和扩展性的代驾业务系统成为了关键问题。本文将介绍一......
  • 使用Redis时的vm.overcommit_memory内存分配控制
    最近在使用Redis的时候遇到了linux系统中的vm.overcommit_memory参数设置,对此不是很了解,于是研究了一下,有了本文。 ===================================== 一个尝试,如何在内存中申请空间:>>>100000*400000*8/1024/1024/1024298.0232238769531 实际代码:importnumpyas......
  • 一天吃透Redis面试八股文
    内容摘自我的学习网站:topjavaer.cnRedis连环40问,绝对够全!Redis是什么?Redis(RemoteDictionaryServer)是一个使用C语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁......