Redis的持久化、事务、事件

【数据库系统】数据库系统概论——第十章 数据库恢复技术 【数据库系统】数据库系统概论====第十章 数据库恢复技术 10.1事务的基本概念 事务 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位,是恢复和并发控制的基本单位。 (1)事务和程序的区别 ①在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。 ②一个程序通常包含多个事务。 (2)事务的定义 ①显式定义方式 事务正常结束格式: BEGIN TRANSACTION; SQL 语句; COMMIT; 事务正常结束,提交事务的所有操作(读+ 阅读详情

一、持久化

Redis 是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。

RDB持久化

将某个时间点的所有数据都存放到硬盘上。

可以将快照复制到其它服务器从而创建具有相同数据的服务器副本。

如果系统发生故障,将会丢失最后一次创建快照之后的数据。

如果数据量很大,保存快照的时间会很长。

AOF持久化

将写命令添加到 AOF 文件(Append Only File)的末尾。

使用 AOF 持久化需要设置同步选项,从而确保写命令同步到磁盘文件上的时机。这是因为对文件进行写入并不会马上将内容同步到磁盘上,而是先存储到缓冲区,然后由操作系统决定什么时候同步到磁盘。有以下同步选项:

选项同步频率
always每个写命令都同步
everysec每秒同步一次
no让操作系统来决定何时同步
  • always 选项会严重减低服务器的性能;
  • everysec 选项比较合适,可以保证系统崩溃时只会丢失一秒左右的数据,并且 Redis 每秒执行一次同步对服务器性能几乎没有任何影响;
  • no 选项并不能给服务器性能带来多大的提升,而且也会增加系统崩溃时数据丢失的数量。

随着服务器写请求的增多,AOF 文件会越来越大。Redis 提供了一种将 AOF 重写的特性,能够去除 AOF 文件中的冗余写命令。

二、事务

一个事务包含了多个命令,服务器在执行事务期间,不会改去执行其它客户端的命令请求。

事务中的多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。

Redis 最简单的事务实现方式是使用 MULTI 和 EXEC 命令将事务操作包围起来。

三、事件

Redis 服务器是一个事件驱动程序。

文件事件

服务器通过套接字与客户端或者其它服务器进行通信,文件事件就是对套接字操作的抽象。

Redis 基于 Reactor 模式开发了自己的网络事件处理器,使用 I/O 多路复用程序来同时监听多个套接字,并将到达的事件传送给文件事件分派器,分派器会根据套接字产生的事件类型调用相应的事件处理器。

时间事件

服务器有一些操作需要在给定的时间点执行,时间事件是对这类定时操作的抽象。

时间事件又分为:

  • 定时事件:是让一段程序在指定的时间之内执行一次;
  • 周期性事件:是让一段程序每隔指定时间就执行一次。

Redis 将所有时间事件都放在一个无序链表中,通过遍历整个链表查找出已到达的时间事件,并调用相应的事件处理器。

事件的调度与执行

服务器需要不断监听文件事件的套接字才能得到待处理的文件事件,但是不能一直监听,否则时间事件无法在规定的时间内执行,因此监听时间应该根据距离现在最近的时间事件来决定。

事件调度与执行由 aeProcessEvents 函数负责,伪代码如下:

def aeProcessEvents():
    # 获取到达时间离当前时间最接近的时间事件
    time_event = aeSearchNearestTimer()
    # 计算最接近的时间事件距离到达还有多少毫秒
    remaind_ms = time_event.when - unix_ts_now()
    # 如果事件已到达,那么 remaind_ms 的值可能为负数,将它设为 0
    if remaind_ms < 0:
        remaind_ms = 0
    # 根据 remaind_ms 的值,创建 timeval
    timeval = create_timeval_with_ms(remaind_ms)
    # 阻塞并等待文件事件产生,最大阻塞时间由传入的 timeval 决定
    aeApiPoll(timeval)
    # 处理所有已产生的文件事件
    procesFileEvents()
    # 处理所有已到达的时间事件
    processTimeEvents()

将 aeProcessEvents 函数置于一个循环里面,加上初始化和清理函数,就构成了 Redis 服务器的主函数,伪代码如下:

def main():
    # 初始化服务器
    init_server()
    # 一直处理事件,直到服务器关闭为止
    while server_is_not_shutdown():
        aeProcessEvents()
    # 服务器关闭,执行清理操作
    clean_server()

从事件处理的角度来看,服务器运行流程如下:

三相电机控制入门:端电压、相电压、线电压到底怎么测?(附实测波形对比) 本文为三相电机控制初学者提供了端电压、相电压和线电压的完整测量指南。通过厘清三者的物理定义与测量方法,详细讲解了如何搭建虚拟星形点电路,并对比分析了方波、SPWM和SVPWM三种主流控制模式下关键电压波形的核心特征与差异,帮助工程师掌握正确的示波器测量与波形解读技巧。 阅读详情

相关推荐

[Unity_Plastic SCM小技巧] 使用 UnityYAMLMerge 工具合并场景和预制件文件

首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Content...

unityofficial的博客 1145

持久化与故障恢复

数据库中实现持久化与故障恢复的技术有很多,下面主要对Undo、Redo、WAL、Checkpoint、Snapshot等相关技术进行记录。 一、Undo和Redo 暂且这样称呼: 数据库文件data file; 数据库缓存db buffer; 日志缓存log buffer; 磁盘日志文件log file; 某次操作,我们取了数据库某表格中的数据,这个数据会在内存中缓存一些时间。对这个...

李木子的博客 473

别急着让AI画板!聊聊Cadence Allegro X AI和OrCAD X在实际PCB项目中的真实体验

本文分享了Cadence Allegro X AI与OrCAD X在PCB设计中的实际应用体验,探讨了AI辅助Layout的效率提升与潜在陷阱。通过高速ADC采集板案例,详细对比了AI与传统方法在电源平面分割、低速信号布线等任务中的表现,并总结了人机协作的最佳实践,为工程师提供实用参考。

weixin_30836759的博客 2207

Redis(三)了解持久化与事务

一、Redis事务(似乎不常用) 1、Redis事务介绍 为了保证多条命令组合的原子性, Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。事务表示一组动作, 要么全部执行, 要么全部不执行 。 Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成的。 Redis的单个命令都是原子性的,所以这里确保事务性的对象是命令集合。 Redis将命令...

fox_bert的博客 410

分布式锁特点、以及用python3实现redis分布式锁

以下是 Python3 实现 Redis 分布式锁的详细教程,包含代码示例、原理说明及最佳实践。

数据知道的博客 2万+

S/4HANA Private Cloud 与 On-Premise 的 Key User Custom Fields 运输与升级避坑指南

本文探讨了SAP S/4HANA Cloud Private Edition和On-Premise系统中Key User Custom Fields的管理要点。文章指出,Custom Fields涉及元数据生成、对象一致性、传输治理等完整链路,操作不当会导致字段丢失或升级失败。关键建议包括:使用ATO Fiori App管理扩展项与传输绑定,配置正确的job user权限,避免在多系统并行开发同一字段。特别强调升级时需执行CFD_REGENERATE_IN_ONPREMISE报表,并通过标准传输机制推进变更

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 195

事务四大特性、事务隔离级别通俗理解

目录 事务具有的特性 ACID 原子性和一致性的理解(例子) (侵删) 并发事务带来的问题 事务隔离级别有哪些? 事务具有的特性 ACID 原子性 atomicity 这几条语句 构成一个事务 是一个最小的执行单元 要么都执行 要么都不执行 一致性 consistency执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性 isolation我在读数据的过程中 别人不能读 事务的操作彼此独立 互斥 持久性 durability 持久性是指一个事务一旦被提交,它

trigger的博客 574

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 270

Redis面试题

文章目录简介什么是Redis?Redis的优缺点为什么要用 Redis /为什么要用缓存?为什么要用 Redis 而不用 map/guava 做缓存?Redis为什么这么快?数据类型Redis有哪些数据类型? 简介 什么是Redis? Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串(String)、

weixin_39387961的博客 2565

DataCastle-租金预测

ID:编号;时间:房屋信息采集的时间;小区名:房屋所在小区,已脱敏处理;小区房屋出租数量:小区出租房屋数量,已脱敏处理;楼层:0、1、2分别表示楼层低,中,高;总层数:房屋所在建筑的总楼层数,已脱敏处理;房屋面积:房屋面积数值,已脱敏处理;房屋朝向:房屋的朝向;居住状态:房屋的居住状态,表示是否已出租或居住中,已脱敏处理;卧室数量:户型信息,数字表示卧室的个数;卫的数量:户型信息,数字表示卫生间的个数;厅的数量:户型信息,数字表示厅的个数;

优快云 精品推荐 3457

(五)深入理解Bluez协议栈之“GATT Server Profile”

上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。

1142

二、Redis核心机制:持久化与高并发秘密

Redis 持久化机制通过 RDB 快照和 AOF 日志两种方式保证数据安全,RDB 适合备份但可能丢数据,AOF 更安全但恢复慢,生产环境建议两者结合使用。

weixin_45734874的博客 1396

【AI面试】 Python 的装饰器

Python装饰器是一种高阶函数,用于在不修改原函数代码的情况下增强其功能。它通过@语法糖接收目标函数作为参数,并返回一个包含额外逻辑(如日志、缓存、权限验证等)的新函数。装饰器的核心价值在于代码复用和解耦,符合开闭原则,典型应用包括性能分析、权限控制等场景。例如,@timer_decorator可自动为函数添加耗时统计功能。本质上,@decorator等价于func = decorator(func),实际调用的是装饰器返回的包装函数。进阶技巧包括使用@functools.wraps保留原函数元信息。装饰

钱多多先森 183

《Redis深度历险:核心原理和应用实践》读书笔记

Redis深度历险:核心原理和应用实践——第2篇 原理篇 原理1:线程 IO 模型 Redis 是单线程。 因为所有数据都存放在内存中,所有运算都是内存级别的运算。因为redis是单线程,所以谨慎使用复杂度为O(n)级别的指令,一不小心就会造成redis卡顿。 非阻塞IO 当调用socket的读写方法,默认是阻塞的。比如read方法传递一个参数n,表示读取这么多字节后再返回,如果没有读够线程就会卡顿在那里,直到新的数据到来或者链接关闭,read方法才返回,线程才继续处理。而write方法一般来说不会阻塞,除

u010014880的博客 359

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

总结redis持久化、服务处理模型、redis事务

文章目录持久化服务模型多机模式 持久化 服务模型 多机模式

qq_44793993的博客 494

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis悠游记:缓存技术的奇迹(二)

以上是对Redis总结,大家如果想深入理解Redis。推荐大家查阅《Redis设计与实现 》这本书。

纪大侠博客 896

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《三天给你聊清楚redis》第2天看看redis怎么被搞出来的(22036字)

后端需要知道的关于redis的事,基本都在这里了。

少说,多做。 1万+

redis watch使用场景_Redis-最全概括(数据类型/结构/使用场景/持久化/事务/事件等)...

一、概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。二、数据类型STRING> rpush list-key item(integer) 1> ...

weixin_39863371的博客 148

从此Redis是路人

戳蓝字「TopCoder」关注我们哦!序言:Redis(Remote DIctionary Server)作为一个开源/C实现/高性能/基于内存的key-value存储系...

luoxn28的专栏 205

jredis和letucce_【99期】中高级开发面试必问的Redis,看这篇就够了!

>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅.一、概述二、数据类型STRINGLISTSETHASHZSET三、数据结构字典跳跃表四、使用场景计数器缓存查找表消息队列会话缓存分布式锁实现其它五、Redis 与 Memcached数据类型数据持久化分布式内存管理机制六、键的过期时间七、数据淘汰策略八、持久化RDB 持久化AOF 持久化九、事...

weixin_42660494的博客 160

redis

* 一、概述 * 二、数据类型 * STRING * LIST * SET * HASH * ZSET * 三、数据结构 * 字典 * 跳跃表 * 四、使用场景 * 计数器 * 缓存 * 查找表 * 消息队列 * 会话缓存 * 分布式锁实现 * 其它...

Q_Anyang的博客 2016

【99期】中高级开发面试必问的Redis,看这篇就够了!

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 12分钟。来自:https://github.com/CyC2018/CS-Notes一、概述二、数据类型STRI...

良月柒 754

Redis最全面试题

一、概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。 二、数据类型 数据类型 可以存储的值 操作 STRING 字符串...

u010766519的博客 350

memcache与redis对比

memcache与redis对比 一. 综述 读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数据库中,但是查询数据会相对比较慢,特别是用户很多时,频繁的查询,需要耗费大量的时间。怎么办呢?数据放在哪里查询快?那肯定是内存中。memcached和redis就是将数据存储在内存中,按照key-value的方式查询,可以大幅度提高效...

南方有岛 245

Redis实战(一):Redis一键安装脚本,Redis 介绍及 NIO 原理介绍

Redis一键安装并启动的脚本(root用户) 试过用其他权限用户安装会出错,可能是因为命令中没有写 sudo 切换到root,直接执行即可。 #!/bin/bash cd /usr/local/ && wget http://download.redis.io/releases/redis-5.0.5.tar.gz && tar -zxvf redis-5.0.5.tar.gz && cd /usr/local/redis-5.0.5 &&

寒泉 6万+

《Redis设计与实现》笔记|SDS动态字符串|链表字典跳跃表整数集合压缩列表结构|redis中的对象|数据库原理|RDB持久化|AOF持久化|事件与多路利用模型|发布订阅原理|事务原理|慢查询日志

《Redis设计与实现》笔记 前记: 参考配套网站:http://redisbook.com 带注释的源码地址:https://github.com/huangz1990/redis-3.0-annotated 注意:整本书都是针对3.0之前的版本,而到读书时为止,Redis已经更新到了6.x😥 文章目录《Redis设计与实现》笔记@[toc]第一部分:数据结构与对象一、引言二、简单动态字符串1SDS的定义2内存重分配3其他特点三、链表四、字典1概述与理解2字典各个结构的实现哈希节点哈希表字典类型特

qq_47234534的博客 2859
上一篇: Redis与Memcached的区别、Redis键的过期时间、数据淘汰策略
下一篇: Redis复制与分片
trytrylmt
博客等级 码龄9年 7粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值