数据持久化

redis持久化实现原理

爱⌒轻易说出口 提交于 2020-01-23 22:09:56
RDB rdb持久化原理: 会涉及到操作系统底层的fork调用,详情查看: https://zhangxueliang.blog.csdn.net/article/details/104076571 会fork出一个子进程用于持久化。 当redis主进程发生数据修改的时候,会触发内核级别的写时复制操作,写数据到持久化文件是子进程来完成的,数据的增删改是在父进程中进行的,所以redis的持久化是fork+copy on write来实现的。 比如8点fork出一个子进程用于持久化操作,此时子进程拷贝的是8点时的数据,父子进程的数据修改,彼此都不可见。假如10点redis数据发生了修改,此时会由内核的写时复制机制触发数据复制操作,将引用指向新的数据,此时子进程的引用还是指向旧数据。写时复制不是为了数据同步,而是数据隔离。 fork出来的子进程会一直等到数据持久化做完后才销毁。每次持久化开始时都会fork出一个子进程。每次拍快照(持久化)都是当前时间点的全量数据覆盖之前的快照数据,如果快照采用增量更新的方式的话,需要在内存中判断哪些数据有更新哪些没更新,反而消耗CPU资源。 拷贝引用的成本比拷贝数据的成本低很多,因为一个引用的大小是4个字节,但引用指向的数据可能是一个数组几百个字节。 redis RDB持久化配置方式: 如果想关闭持久化,只需在配置文件redis.conf中配置:

Dataset数据的XML持久化处理

落花浮王杯 提交于 2020-01-23 16:24:59
主要方法是用ADO.NET的DataTale 填充到Dataset Dataset 内置了XML持久化的方法,WriteXML和ReadXML:简单的WinFrom实例:从数据库的表 private void button1_Click(object sender, EventArgs e) { string path = AppDomain.CurrentDomain.BaseDirectory+"Users.xml";//BIN/DEBUGA string sql = "SELECT * FROM Users"; DataTable td = DBHelper.Query(sql, null); DataSet ds = new DataSet();//查询填充DATABLE到DTAASET ds.Tables.Add(td); ds.WriteXml(path);//保存到本地 XmlDocument xmld = new XmlDocument(); xmld.Load(path); XmlNode root = xmld.DocumentElement; label1.Text = ""; for (int i = 0; i < root.ChildNodes.Count; i++) { label1.Text = root.ChildNodes[i].InnerText

Redis的RDB

时间秒杀一切 提交于 2020-01-22 09:03:02
### Redis 持久化之RDB #### 1.RDB 介绍: RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。 #### 2.RdbRDB 其他配置文件 | 配置 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | dbfilename dump.rdb | rdb持久化文件名称 | | stop-writes-on-bgsave-error yes | 在后台发生错误时,是否要停止写操作,默认配置成 yes | | rdbcompression yes | 对rdb文件进行加密 | | rdbchecksum yes | 是否开启RDB文件的校验,在写入文件和读取文件时都起作用;关闭checksum在写入文件和启动文件时大约能带来10%的性能提升,但是数据损坏时无法发现 | #### 3 RDB之被动持久化 ##### 3.1 相关配置如下: ``` save 900 1:表示900

常考面试题(5)-redis持久化策略

旧街凉风 提交于 2020-01-22 07:59:50
redis的持久化方式有俩种,持久化策略有4种: 1.RDB(数据快照模式),定期存储,保存的是数据本身,存储文件是紧凑的 2.AOF(追加模式),每次修改数据时,同步到硬盘(写操作日志),保存的是数据的变更记录 3.如果只希望数据保存在内存中的话,俩种策略都可以关闭 4.也可以同时开启俩种策略,当Redis重启时,AOF文件会用于重建原始数据 RDB RDB定时备份内存中的数据集。服务器启动的时候,可以从 RDB 文件中恢复数据集。 优点 存储的文件是紧凑的 适合用于备份,方便恢复不同版本的数据 适合于容灾恢复,备份文件可以在其他服务器恢复 最大化了Redis的性能,备份的时候启动的是子线程,父进程不需要执行IO操作 数据保存比AOF要快 缺点 如果Redis因为没有正确关闭而停止工作是,到上个保存点之间的数据将会丢失 由于需要经常fork子线程来进行备份操作,如果数据量很大的话,fork比较耗时,如果cpu性能不够,服务器可能是卡顿。属于数据量大的时候,一个服务器不要部署多个Redis服务。 创建快照有以下5种形式: 客户端发送BGSAVE指令,服务端会fork一条子线程将快照写入磁盘 客户端发送SAVE指令,服务端在主线程进行写入动作。一般不常使用,一般在内存不够去执行BGSVAE的时候才用 设置了SAVE配置项,如SAVE 300 100,那么当“300秒内有100次写入

Redis Redis原理

我是研究僧i 提交于 2020-01-21 17:39:35
Redis原理 Redis内存模型 redisServer public class redisServer { int dbnum ; // 当前redis节点内数据库数量,默认16 redisDb [ ] db ; // 数组,保存数据库信息 redisClient clients ; // 链表,保存客户端信息 // serverCron函数维护的属性 Date unixtime ; // 秒级别时间戳 long mstime ; // 毫秒级别时间戳 Date lruclock ; // LRU时钟,每十秒更新一次 long ops_sec_samples ; // Redis server每秒执行命令次数 long stat_peak_memory ; // Redis server内存峰值记录 int shutdown_asap ; // Redis server运行状态 1关闭 0运行 int cronloops ; // serverCron函数计数器 // 持久化相关 String rdb_child_pid ; // 执行BGSAVE子进程ID,-1表示未执行 String aof_child_pid ; // 执行BGREWRITEAOF子进程ID,-1表示未执行 long dirty ; // 修改计数器 Date lastsave ; //

Redis我们应该知道的特性

笑着哭i 提交于 2020-01-21 03:05:21
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Redis我们应该知道的特性

微笑、不失礼 提交于 2020-01-21 00:39:26
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Redis的两种持久化机制RDB和AOF

青春壹個敷衍的年華 提交于 2020-01-20 20:10:59
目录 RDB 原理 触发时机 AOF 原理 开启AOF aof日志文件说明 触发时机 aof的重写机制 redis4.0的混合持久化机制 总结 rdb持久化文件的名称:dump.rdb。存储在配置文件redis.conf指定的dir路径下 RDB 原理 触发时机 指定redis.conf配置文件的持久化文件的位置,将据此在redis启动时恢复数据: AOF 原理 原理是将redis的操作日志以追加的方式写入文件,读操作是不记录的。 保存的就是redis命令 在文件中使用"/"来搜索文件内容: 开启AOF 启动并登录redis: aof的日志文件名称: aof日志文件说明 触发时机 ①丢数据对比: rdb和aof都会丢失数据,但rdb丢数据更严重些。aof丢失不会超过2秒的数据。 ②日志文件大小对比: aof>rdb rdb的日志文件存储的是二进制格式的,aof存储的是字符串格式的。 aof的重写机制 auto-aof-rewrite-percentage 100 表示触发的比例大小,64M被重写后只有30M,那么达到60M时会触发重写,如果设置的是80,那么会在30M+30*0.8=54M时触发重写。 redis4.0的混合持久化机制 总结 来源: CSDN 作者: 学亮编程手记 链接: https://blog.csdn.net/a772304419/article

Redis系列四:redis持久化

眉间皱痕 提交于 2020-01-20 15:20:43
redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失。 两种持久化可以单独使用其中一种,但更多情况下是将二者结合使用。 一、RDB持久化 RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发。 redis会在以下几种情况下对数据进行快照。 a)根据配置规则进行自动快照; b)用户执行save或bgsave命令; c)执行flushall命令; d)执行复制(replication)时; 1、根据配置规则进行自动快照 允许用户自定义快照条件,当符合快照条件时,redis会自动执行快照操作。进行快照的题哦啊键可以由用户在配置文件中自定义,由两个参数构成:时间窗口M和改动的键的个数N。每当时间M内被更改的键的个数大于N时,即符合自动快照条件。 如redis安装目录中包含的样例配置文件中预置的3个条件: save 900 1 save 300 10 save 60 10000 每条快照条件占一行,并且以save参数开头,同时可以存在多个条件,条件之间是“或”的关系。上例中,save 900 1的意思是在15分钟(900秒)内有一个或一个以上的键被更改则进行快照,同理,save 300 10表示子啊300秒内至少有10键被修改进行快照。 2、手动触发有save和bgsave两命令 除redis自动进行快照外,服务重启

redis数据持久化

那年仲夏 提交于 2020-01-20 14:47:02
一、概念 一)redis提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。 AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。 如果你只希望你的数据在服务器运行的时候存在,你也可以不适用任何持久化方式。 也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会有限载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整 二)RDB的优缺点 优点: RDB是一个非常紧凑的文件,它保存了某个时间点的数据集,非常适用于数据集的备份,这样即使出了问题你也可以根据需求恢复到不同版本的数据集。 RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复。 RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。 缺点: 如果希望在redis意外停止工作的情况下丢失的数据最少的话,那么RDB不适合