redis特性和持久化

redis特性
多数据:
默认是0号数据库,最多到15

select 0 ,当然也可以移动数据库 move myset 1 就是将0中的myset移动到myset

redis中的事务一旦执行,后面的命令都会被执行

multi 开启事务

exec 提交事务(只有提交事务后,设置的变量等才能生效)

discard 回滚事务

redis的持久化
redis的高性能,是因为redis把数据都存放在内存当中,为了保证重启后不丢失,需要把数据从内存同步到硬盘上——持久化。

持久化操作,两种方式:rdb方式、aof方式,可以单独使用或者结合使用。
使用方法:
rdb持久化方法:默认的方式,无需配置。在指定的时间间隔写入硬盘,指定将内存中的数据写入到磁盘中的频率
aof方式:将以日志,记录每一个操作,服务器启动后根据日志构建数据库,保证数据完整性。

配置可以禁用 持久化功能。
也可以同时使用两种方式。
无持久化。可以配置为不进行持久化,redis就当一个缓冲使用。可以同时使用RDB和AOF

RDB方式
RDB
优势:
1、保存只有一个文件,方便压缩、转移和恢复;
2、设置不同的保存点,适合备份
3、RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。
4、RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快

RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份: 比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。 这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心,或者亚马逊 S3 中。RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快

劣势:
1、可能在服务器故障时丢失数据
2、数据量大时,fork的子进程可能造成服务器停止处理客户端长达XXms~1s

如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。 虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。 在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端; 如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。 虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失

AOF方式
优势:
AOF 持久化会让 Redis 变得非常耐久(much more durable),数据可靠性强
AOF 文件是一个只进行追加操作的日志文件(append only log);
AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。
导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。

劣势:
对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。
个别命令出现bug,无法将数据集恢复成保存时的原样。RDB 几乎是不可能出现这种 bug 的。

参考:https://blog.csdn.net/sinat_27406925/article/details/73382169

猜你喜欢

转载自blog.csdn.net/qq_42720245/article/details/82657886