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()

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

Cadence IC618版图DRC验证License报错排查:从虚拟机网络配置到HOSTID的实战解析 本文详细解析了Cadence IC618版图设计中DRC验证License报错的排查方法,重点从虚拟机网络配置到HOSTID获取的实战经验。通过对比ifconfig与ip add命令的差异,提供了正确的HOSTID获取方式及License文件修改技巧,帮助工程师快速解决IC618环境下的DRC验证问题。 阅读详情

相关推荐

python sci sci-hub 爬论文

sci-hub 爬虫 后续加入对于时间的排序,下载最新文献 参考: https://www.guanjihuan.com/archives/6846 https://blog.youkuaiyun.com/czh2637750821/article/details/115508922

weixin_42783619的博客 3542

持久化与故障恢复

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

李木子的博客 473

ABB机器人常见的几大数据类型

ABB机器人数据存储描述了机器人控制器内部的各项属性,ABB机器人控制器数据类型多达100余种,其中常见的数据类型包括基本数据、i/o数据、运动相关数据。 1、基本数据 基本数据: bool 逻辑值:逻辑状态下赋予的真或者假。逻辑值有两种情况:成立和不成立则逻辑值为真使用true或1表示不成立则逻辑值为假使用false或0表示 byte 字节值:用于计量存储容量的一种计量单位,取值范围为(0-255) num 数值:变量、可存储整数或小数整数取值范围(-8388607~8388608) dnum

soinlove36的专栏 1万+

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

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

fox_bert的博客 410

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4279

无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现

CMUCERLAB无人机自主框架是一个模块化的无人机自主导航系统,包含感知、测绘、规划和控制等组件。安装过程中遇到的主要问题包括:(1)cv_bridge路径未正确识别,需手动指定路径;(2)OpenCV版本冲突(4.2与4.6),导致动态导航节点崩溃。解决方案包括:完全卸载OpenCV4.2,重新编译安装OpenCV4.6,并修改相关CMakeLists文件指定版本。最终成功运行仿真环境,实现无人机在Gazebo和RViz中的自主避障导航功能。

weixin_45390670的博客 1645

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

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

trigger的博客 574

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 550

Redis面试题

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

weixin_39387961的博客 2565

【无人机路径规划】基于强化学习实现多无人机路径规划附matlab代码

1 简介 本文提出一种基于强化学习实现多无人机路径规划。​ 2 部分代码 % This is used to measure the path length, service rate and risk explosure for each UAVs %% parameters function [PL,ServiceRate,Risk]=measure global N2; % divide [0,1]*[0,1] map into N2*N2 grid when calcul

qq_59747472的博客 6905

CE电流法测试中的dBμV负值解析

传导发射(CE)电流法测试中出现的dBμV负值现象表明被测设备干扰电平低于1μV参考基准。这源于对数计算特性(小于1μV的电压转换后为负值)、设备优良的EMC设计(如滤波效果显著)及测试环境的影响(LISN隔离、屏蔽室低噪声)。负值虽不代表实际负电压,但反映干扰水平优于标准限值,为系统集成预留电磁裕度。工程应用中需结合设备灵敏度、环境背景噪声等因素综合分析,避免误判,这类数据可用于评估EMI设计冗余度。

硬核科技 298

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

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

weixin_45734874的博客 1396

SAP Fiori 个性化数据持久化实战:从 Personalizer 到 Variant 的完整设计思路

摘要:SAPUI5的Personalization服务用于持久化用户界面交互偏好(如表格列顺序、筛选条件),而非业务数据。它提供两种模式:Direct Mode适合单一实体存储,Container Mode支持多实体和变体管理。开发时需注意数据存储位置差异(本地调试用local storage,生产环境由前端服务器处理),避免与业务数据或Bookmark服务混淆。典型应用场景包括表格布局保存和查询方案管理,需根据需求选择模式。该服务能有效提升Fiori应用的用户体验连续性。

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

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

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

u010014880的博客 359

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

qq_44793993的博客 494

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

纪大侠博客 896

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《三天给你聊清楚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、付费专栏及课程。

余额充值