Redis(三):事务与持久化

1.事务

1.1redis中的事务

Redis 中的事务(transaction)是一组命令的集合,至少是两个或两个以上的命令, redis事务保证这些命令被执行时中间不会被任何其他操作打断。

1.2事务操作的命令

  • multi:标记一个事务的开启,事务内的多条命令会按照先后顺序被放进一个队列当中。返回值是ok
  • exec:执行所有事务块内的命令。返回值是事务内的所有的执行语句内容,事务被打断,返回nil
  • discard:取消事务,放弃执行事务块内的所有的命令。返回值是ok
  • watch:watch key [key …]。如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。返回值总是ok
  • unwatch:取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。返回值总是ok

事务执行 exec 之前, 入队命令错误(语法错误;严重错误导
致服务器不能正常工作(例如内存不足)),放弃事务。

2.持久化

2.1持久化概述

Redis 的数据存储在内存中,内存是瞬时的,如果 linux 宕机或重启,又或者 Redis 崩溃或重启,所有的内存数据都会丢失,为解决这个问题, Redis 提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。

2.2RDB 方式持久化

Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB 保存了在某个时间点的数据集(全部数据)。存储在一个二进制文件中,只有一个文件。默认是 dump.rdb。 RDB 技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响 Redis 的正常使用。 RDB 恢复数据时比其他 AOF 速度快。
RDB 方式的数据持久化,仅需在 redis.conf 文件中配置即可,默认配置是启用的。在配置文件 redis.conf 中搜索 SNAPSHOTTING,查找在注释开始和结束之间的关于 RDB的配置说明。配 SNAPSHOTTING 置地方有三处:

  • 配置执行 RDB 生成快照文件的时间策略。对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个 key 改动”这一条件被满足时,自动保存一次数据集。
  • dbfilename:设置 RDB 的文件名,默认文件名为 dump.rdb
  • dir:指定 RDB 文件的存储位置,默认是 ./ 当前目录
    优点:由于存储的是数据快照文件,恢复数据很方便,也比较快
    缺点:
  • 会丢失最后一次快照以后更改的数据。 如果你的应用能容忍一定数据的丢失,那么使用 rdb 是不错的选择; 如果你不能容忍一定数据的丢失,使用 rdb 就不是一个很好的选择。
  • 由于需要经常操作磁盘, RDB 会分出一个子进程。如果你的 redis 数据库很大的话,子进程占用比较多的时间,并且可能会影响 Redis 暂停服务一段时间( millisecond 级别),如果你的数据库超级大并且你的服务器 CPU 比较弱,有可能是会达到一秒。

2.3 AOF 方式

Append-only File(AOF), Redis 每次接收到一条改变数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。
AOF 方式的数据持久化,仅需在 redis.conf 文件中配置即可配置项:

  • appendonly:默认是 no,改成 yes 即开启了 aof 持久化
  • appendfilename:指定 AOF 文件名,默认文件名为 appendonly.aof
  • dir :指定 RDB 和 AOF 文件存放的目录,默认是 ./
  • appendfsync:配置向 aof 文件写命令数据的策略:
    no:不主动进行同步操作,而是完全交由操作系统来做(即每 30 秒一次),比较快但不
    是很安全。
    always:每次执行写入都会执行同步,慢一些但是比较安全。
    everysec:每秒执行一次同步操作,比较平衡,介于速度和安全之间。这是默认项。
  • auto-aof-rewrite-min-size:允许重写的最小 AOF 文件大小,默认是 64M 。当 aof 文件大于 64M 时,开始整理 aof 文件,去掉无用的操作命令。缩小 aop 文件。
    总结:
    1) append-only 文件是另一个可以提供完全数据保障的方案;
    2) AOF 文件会在操作过程中变得越来越大。比如,如果你做一百次加法计算,最后你只会
    在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录
    对最终的结果是无用的;但 Redis 支持在不影响服务的前提下在后台重构 AOF 文件,让文
    件得以整理变小
    3) 可以同时使用这两种方式, redis 默认优先加载 aof 文件( aof 数据最完整);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值