zoukankan      html  css  js  c++  java
  • redis学习03Redis的持久化机制

    1、Redis的事务

    Redis的事务:以次事务,该成功的成功,该失败的失败。

    开启事务,执行一系列命令,但是不会立即执行,会被放在一个队列中。

    如果执行事务,那么这个队列中的命令全部执行。

    如果取消了事务,则队列中的命令全部作废。

    事务的相关命令:

    使用redis-cli连接到服务端后

    #开启事务
    multi

    #执行事务
    exec

    取消事务
    discard

    执行事务或者取消事务后,需要重新开启事务进行下一个事务操作。

    一般配合watch命令使用。在没有调用multi之前(未开启事务),先使用watch命令监听一些key

    watch name myname
    multi
    set name lisi

    在进行exec之前,有其他的客户端修改了key为name的值,则开启事务的客户端在提交事务的时候,会自动被取消。

    此时watch会被自动去除,不需要再手动调用unwatch命令。

    这种机制类似于CAS乐观锁。

    2、RDB持久化机制

    RDB:Redis DataBase

    在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

    优点:

    1.整个Redis数据库将只包含一个文件dump.rdb,方便持久化。

    2.容灾性好,方便备份。

    3.性能最大化,fork子进程来完成写操作,让主进程继续处理命令,保证了Redis的高性能。

    4.相对于数据集大时,比AOF的启动效率更高。

    rdb是Redis默认的持久化机制,它速度比较快,存储的是一个二进制文件,占用空间小,方便传输。

    缺点:

    1.数据安全性低,RDB是间隔一段时间进行持久化,如果持久化之间Redis发生故障,回发生数据丢失。无法保证数据的绝对安全。

    2.由于RDB是通过fork子线程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至1秒。

    #rdb持久化配置
    
    #1代表rdb执行的时机
    #900秒内有1个key改变就执行持久化
    save 900 1
    save 300 10
    save 60 10000
    
    #开启rdb持久化压缩
    rdbcompression yes
    
    #rdb持久化的文件
    dbfilename dump.rdb

    3、AOF持久化机制

    AOF:append only file

    以日志的形式记录服务器所处的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

    优点:

    1.数据安全,Redis中提供了3种同步策略。

    每秒同步是异步的,效果也非常高,所差的是一旦系统宕机,那么这一秒之内的修改数据会丢失。

    而每次修改同步,可以视为同步操作,即每次发生数据变化都会记录下来。

    2.通过append模式写文件,即使中途服务器宕机也不会破坏已经存在的内容,可以通过redis-chek-aof工具解决数据一致性问题。

    3.AOF机制的rewrite模式,定期对AOF文件进行重写,以达到压缩的目的。

    缺点:

    1.AOF文件比RDB文件大,且恢复速度慢。

    2.数据集大的时候,比RDB启动效率低。

    3.运行效率没有RDB高。

    #默认不开启aof
    #appendonly no
    appendonly yes
    
    #aof文件名称
    appendfilename "appendonly.aof"
    
    #aof持久化时机,以下三个只能开启一种
    
    # appendfsync always #每执行一个写操作,立即持久化。最安全但性能最低。
    appendfsync everysec #每秒执行一次。
    # appendfsync no #根据操作系统和环境,在一定时间内自动持久化。

    aof持久化机制默认是关闭的,推荐同时开启rdb和aof,避免数据丢失。

    同时开启aof和rdb的注意事项:

    1. redies优先加载aof持久化文件。

    2. 如果先开启了rdb,再开启aof,如果rdb执行了持久化,那么rdb文件中的内容会被aof覆盖。(redis更相信aof)

  • 相关阅读:
    面向对象程序设计课第五次作业
    面向对象程序设计课第三次作业
    MeasureSpec 解析
    JavaWeb学习总结(一)JavaWeb入门与Tomcat
    Redis GetTypedClient
    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询
    EF 连接MySQL 数据库  保存中文数据后乱码问题
    VS2015 +EF6 连接MYSQL数据库生成实体
    WebConfig 自定义节点configSections配置信息
    docker菜鸟入门
  • 原文地址:https://www.cnblogs.com/asenyang/p/15492489.html
Copyright © 2011-2022 走看看