Redis Persistence 之 redis database

1、关于redis持久化问题,看看官网文档:

注:redis提供了多种不同方式的持久化选项:

RDB(即 redis database)持久化表现在特定的时间间隔内某一个时间点的快照。可以理解为,在指定时间间隔内将内存中的数据集快照写入磁盘,也就是常说的snapshot快照,它恢复时是将快照文件直接读入内存中。

AOF持久性地记录在服务器中的所有写操作命令,并且在服务器重新启动时执行这些操作命令。(关于AOF会在下一篇博文中介绍。)

补充说明:(redis设置连接数据库密码的操作命令)

注:使用 config set requirepass "密码" 可以设置或者修改连接密码,可以看到,设置连接密码后,立即生效,在下次操作数据库时,需要输入连接密码(auth 连接密码)

2、RDB 的详细说明:

Redis 首先会创建一个子程序(fork)来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束后,在用这个临时文件替换上次持久化好的文件。在整个过程中,主进程是不会进行任何IO操作的,这就确保了极高的性能。

如果需要进行大规模数据的恢复,且对于数据恢复的完整行不是很乐观,那RDB方式需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能会丢失。

fork的作用: 复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。

概念说了这么多,来看看操作:(注意要开两个终端分别操作)

a、在 redis.conf 配置信息 的那篇博文中已经说到过 save的问题,这里在补充说明一下。 SNAPSHOTTING
为快照,可以看到,当设置为 save "" ,是不进行快照的。(图示中被注释了)如果设置为 save 120 10,意味着在120秒钟内,如果有10个
key 被删除、修改或者新增,redis会自动把 DB 保存到磁盘中。

b、 可以看到,在 2分钟内,我保存了14个key,redis在2分钟后,自动在指定目录下生成一个 dump.rdb文件。

注意:(自己犯的一个错误)因为在 path 路径下配置了 redis ,所以在那一个目录中启动 redis 都是没有问题的。DB 默认保存的 文件名为 dump.rdb,它会被保存在你所启动 redis 后台服务器的目录下。如图示,如果在输入 su - 命令后启动,就直接在 /root 目录下。

c、这里进行数据的备份,将dump.rdb备份,改名为dump_db.rdb

d、然后在 redis 中进行清空操作,再关闭服务

注: 在操作中发现,fluahsall之后,dump.rdb的创建时间发生改变,也就是说,redis用一个空 dump.rdb 文件覆盖了源文件。

e、重新启动redis,使用 keys *,发现原数据并不存在。(也可以理解,在flushall之后,dump.rdb文件已经被覆盖,redis 从磁盘中读取到内存中的是一个空文档)。

f、再次关闭redis,使用 cp命令拷贝dump_db.rdb 覆盖 dump.rdb 文件,再次启动redis,发现数据已经存在。

注: 这里只找回了10 条数据,和配置文件中的 save 配置一致,也就是说,使用RDB在发生异常时,可能会导致在最后一次保存到磁盘中时数据可能会部分丢失。

附: 在执行 save 操作时,dump.rdb文件也会被覆盖。

bgsave 操作与 save 操作的区别在于:

save 时只管保存,其他不管,全部阻塞。

而basave,redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。使用lastsave 命令还可以获得最后成功执行快照的时间。

3、补充关于 RDB 在 redis.conf 配置文件上的相关信息:

a、Stop-writes-on-bgsave-error: 在 savebg操作失败时,停止写操作。如果配置为no,表示你不在乎数据的一致性或者有其他方式解决这一问题。

b、rdbcompression: 对于存储在磁盘中的快照,是否进行压缩保存。如果是,使用 LZF 算法进行压缩保存。如果你不想消耗 CPU 来进行此操作,可以关闭该功能。

c、rdbchecksum: 在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭该功能。

4、RDB 性能总结:

优势: 1、适合大规模的数据恢复

2、对数据完整性和一致性要求不高

劣势: 1、在一定时间间隔做数据备份,如果redis意外荡机,就会丢失最后一次快照后的所有修改。

2、Fork的时候,内存中的数据被克隆了一遍,大致2倍的膨胀性需要考虑。

时间: 2024-10-13 22:37:10

Redis Persistence 之 redis database的相关文章

redis演练(5) redis持久化

何谓持久化,就是媳妇让你,持久一些. 说白了持久化:就是将内存中的数据保存到磁盘上的过程(数据库也算磁盘的特殊表现),以保证宕机或断电后,可以继续访问.java中常见的持久化框架,如Hibernate,ibatis,jdbc都是持久化实现方式的一种,当然普通文件保存功能也算. 拿memcached来说,memcached保存的信息,没有进行持久化,所以只能存活一个进程生命期,下次重新启动,数据全部丢失.这算memcached的一个缺点吧.redis提供了持久化支持,而且提供了2种持久化方案. <

05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

 Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用. 键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表示取出所有的key 127.0.0.1:6379> keys * 1) "age" 2) "name" 3) "age2" 127.0.0.1:6379> keys a* 1) "age" 2) "age2&

Redis默认配置文件redis.conf详解

# Redis配置文件样例 # Note on units: when memory size is needed, it is possible to specifiy # it in the usual form of 1k 5GB 4M and so forth: # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 10000000

【redis】基于redis实现分布式并发锁

基于redis实现分布式并发锁(注解实现) 说明 前提, 应用服务是分布式或多服务, 而这些"多"有共同的"redis"; GitHub: https://github.com/vergilyn/SpringBootDemo 代码结构: 一.分布式并发锁的几种可行方案 (具体实现思路参考: 分布式锁的实现.如何用消息系统避免分布式事务?) 1.基于数据库 可以用数据库的行锁for update, 或专门新建一张锁控制表来实现. 过于依赖数据库, 且健壮性也不是特别好

redis介绍、redis安装、redis持久化、redis数据类型

一:redis介绍 Redis和Memcached类似,也属于k-v数据存储Redis官网redis.io, 当前最新稳定版4.0.1支持更多value类型,除了和string外,还支持hash.lists(链表).sets(集合)和sorted sets(有序集合)redis使用了两种文件格式:全量数据(RDB)和增量请求(aof).全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载.增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,这种类似于m

java架构之路-(Redis专题)Redis的高性能和持久化

上次我们简单的说了一下我们的redis的安装和使用,这次我们来说说redis为什么那么快和持久化数据 在我们现有的redis中(5.0.*之前的版本),Redis都是单线程的,那么单线程的Redis为什么还会有那么高的效率呢?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换中性能损耗的问题,正因为Redis是单线程,所以我们要小心使用Redis指令,对于那些耗时的指令(比如keys),我们一定要谨慎使用. 在并发环境中,我们Redis的单线程并不是线程1请求

Redis系列之----Redis的两种持久化机制(RDB和AOF)

Redis的两种持久化机制(RDB和AOF) 什么是持久化 ???Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望Redis能够将数据从内存中以某种形式保存到磁盘中,使得重启的时候可以加载磁盘中的文件记录恢复数据,这一过程便是Redis的持久化. ???Redis支持两种持久化机制,一种是RDB,另一种是AOF.Redis默认情况下使用RDB方式进行持久化.两种持久化可以单独使用其中的一种,也可以二者结合使用,

redis演练(7) redis Sentinel实现故障转移

书接上文<redis演练(6) redis主从模式搭建>. <redis演练(6) redis主从模式搭建>中仅仅配置了redis主从环境.分别配置了2个主从结构. 分别是1.有向无环,2星型模型.配置起来非常简单.但是,遗留了一个尾巴,没有阐述.如果master宕掉了怎么办?redis如何实现fail-over故障转移?本文,就重点说一下这块.主要内容 手动实现fail-over效果 sentinel实现自动fail-over效果 手动实现fail-over效果 #有向无环模型(

redis演练(6) redis复制(主备模式)

redis是一款面向分布式的Nosql产品,天生对主备模式有很好的支持,而且配置一套完整的主备模式,非常简单.针对redis,主备模式配置非常简单,但线上意义重大. 主要内容 1.CAP理论 2.简单redis的复制原理 3.redis replaction相关配置参数解析 4.配置星型模型主备模式 5.配置有向无欢模型主备模式 1.研磨redis的复制与集群概念 redis的复制与集群,刚开始我把两者闹了个误会,在不断深入学习过程中及时改正了. 简单区分一下. redis复制:可以理解为把re