• 二 Redis的特性


     
     
     
     
     
     
     
    Redis 的特性
    1.多数据库
    1)概念:一个 redis 实例可以包含多个数据库,客户端可以指定连接到某个 redis 实例的的某
    个库,就好比 mysql 中创建过个数据库,客户端连接时指定连接哪个库
    2)一个 redis 实例最多提供 16 个库,下表从 0 到 15,客户端默认连接 0 号库,也可以通过
    select 指定连接哪个库
    3)通过 move 命令可以将某个 key 移动到其他的库中
    2. 服务器命令
    Shutdown 通过客户端关闭服务器
    ping 命令测试连接是否存活
    echo 命令答应一些内容
    quit 退出客户端
    dbsize 返回当前数据库中 key 的数目
    Info 获取服务器的信息和统计
    flushdb 删除当前选择数据库中的所有 key
    Flushall 删除所有数据库中的所有 key
     
    3 消息订阅和发布(作为消息队列)
     subscribe channel:订阅频道,例:subscribe mychat ,订阅 mychat 这个频道
     Psubscribe channel*:批量订阅频道,例:psubscribe s*,订阅以 s 开头的频道
     Publish channel content: 在指定的频道中发布消息, 如 publish mychart ‘today is a
    new day’
    实现步骤如下:
    1) 订阅某个频道(消费者,消费某个频道的消息)
    2)发布消息(生产者,向某个频道生产消息)
     
    4.redis 事务(批处理)
    4.1 概念
    和众多其他数据库一样,redis 作为 nosql 数据库也同样提供了事务机制,在 redis 中,
    MULTI/EXEC/DISCARD 这三个命令是我们实现事务的基石
    4.2 redis 事务特征
    1、在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis 不会再为其它
    客户端的 请求提供任何服务,从而保证了事物中的所有命令被原子的执行
    2、和关系型数据库中的事务相比,在 Redis 事务中如果有某一条命令执行失败,其后的命
    令仍然会被继续执行。
    3、我们可以通过 MULTI 命令开启一个事务,有关系型数据库开发经验的人可以将其理解为
    "BEGIN TRANSACTION"语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我
    们可以通过 执行 EXEC/DISCARD 命令来提交/回滚该事务内的所有操作。这两个 Redis 命令可
    被视为等同于关系型数据库中的 COMMIT/ROLLBACK 语句。
    4、在事务开启之前,如果客户端与服务器之间出现通讯故障并导致网络断开,其后所有待
    执行的语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行 EXEC 命令之
    后,那么该事务中的所有命令都会被服务器执行。
    5、当使用 Append-Only 模式时,Redis 会通过调用系统函数 write 将该事务内的所有写
    操作在本次调用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故障导致的宕
    机,那么此时也许只有部分数据被写入到磁盘,而另外一部分数据却己经丢失。Redis 服务器会
    在重新启动时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错
    误提示。 此时,我们就要充分利用 Redis 工具包中提供的 redis-check-aof 工具,该工具可以
    帮助我们定位到数据不一致的错误,并将己经写入的部分数据进行回滚。修复之后我们就可以再
    次重新启动 Redis 服务器了。
     
    4.3 命令解释
    multi:开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行 EXEC
    时,这些命令才会被原子的执行,类似与关系型数据库中的:begin transaction
    exec:提交事务,类似与关系型数据库中的:commit
    discard:事务回滚,类似与关系型数据库中的:rollback
    4.4 事务的使用
     
     

     

    5.redis 持久化
    5.1 概述
    Redis 的高性能是由于其将所有数据都存储在了内存中,为了使 Redis 在重启之后仍能保证
    数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
    Redis 支持两种方式的持久化,一种是 RDB(内存快照)方式,一种是 AOF(记录操作日志)方
    式。可以单独使用其中一种或将二者结合使用。
    1、RDB 持久化(默认支持,无需配置)
    该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
    2、AoF 持久化
    该机制将以日志的形式记录服务器所处理的每一个写操作,在 Redis 服务器启动之初会读取
    该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
    3、无持久化
    我们可以通过配置的方式禁用 Redis 服务器的持久化功能,这样我们就可以将 Redis 视为一
    个功能加强版的 memcached 了。
    4、redis 可以同时使用 RDB 和 A0F
    5.2 RDB
    1)优势
    1、 一旦采用该方式,那么你的整个 Redis 数据库将只包含一个文件,这对于文件备份而言是非常完美
    的。比如,你可能打算每个小时归档一次最近 24 小时的数据,同时还要每天归档一次最 30 天的数据。通过
    这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
    2、 对于灾难恢复而言,RDB 是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后 再
    转移到其它存储介质上
    3、 性能最大化。对于 Redis 的服务进程而言,在开始持久化时,它唯一需要做的只是 fork (分叉) 出
    子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行 I/O 操作了。
    4、 相比于 A0F 机制,如果数据集很大,RDB 的启动效率会更高。
    2)劣势
    1、 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么 RDB 将不是一个很好的选择。 因
    为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
    2、 由于 RDB 是通过 fork 子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导
    致整个服务器停止服务几百毫秒,甚至是 1 秒钟
    3)配置说明
     save 900 1 #每 900 秒(15 分钟)至少有 1 个 key 发生变化,则 dump 内存快照。
     save 300 10 #每 300 秒(5 分钟)至少有 10 个 key 发生变化,则 dump 内存快照
     save 60 10000 #每 60 秒(1 分钟)至少有 10000 个 key 发生变化,则 dump 内存快照
    4) 保存名称及位置设置
    # The filename where to dump the DB(保存文件的名称)
    dbfilename dump.rdb
    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # The Append Only File will also be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.(文件保存的位置)
    dir ./
    5.3AOF
    1)优势
    1、该机制可以带来更高的数据安全性,即数据持久性。Redis 中提供了 3 中同步策略,即
    每秒同步、 每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,
    所差的是一 旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我
    们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种
    方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。
    2、由于该机制对日志文件的写入操作采用的是 append 模式,因此在写入过程中即使出现
    宕机现象, 也不会破坏日志文件中己经存在的内容。然而如果我们本次操作只是写入了一半数
    据就出现了系统崩溃问题,不用担心,在 Redis 下一次启动之前,我们可以通过 redis-check-aof
    工具来帮助我们解决数据一致性的问题。
    3、如果日志过大,Redis 可以自动启用 rewrite 机制。即 Redis 以 append 模式不断的将
    修改数据写入到老的磁盘文件中,同时 Redis 还会创建一个新的文件用于记录此期间有哪些修
    改命令被执行。 因此在进行 rewrite 切换时可以更好的保证数据安全性。
    4、A0F 包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们
    也可以通过该文件完成数据的重建。
    2)劣势
    1、对于相同数量的数据集而言,A0F 文件通常要大于 RDB 文件
    2、根据同步策略的不同,A0F 在运行效率上往往会慢于 RDB。总之,每秒同步策略的效率
    是比较高的,同步禁用策略的效率和 RDB—样高效。
    3)配置 aof
    ############################## APPEND ONLY MODE
    ###############################
    # By default Redis asynchronously dumps the dataset on disk. This mode is
    # good enough in many applications, but an issue with the Redis process or
    # a power outage may result into a few minutes of writes lost (depending on
    # the configured save points).
    #
    # The Append Only File is an alternative persistence mode that provides
    # much better durability. For instance using the default data fsync policy
    # (see later in the config file) Redis can lose just one second of writes in a
    # dramatic event like a server power outage, or a single write if something
    # wrong with the Redis process itself happens, but the operating system is
    # still running correctly.
    #
    # AOF and RDB persistence can be enabled at the same time without problems.
    # If the AOF is enabled on startup Redis will load the AOF, that is the file
    # with the better durability guarantees.
    #
    # Please check http://redis.io/topics/persistence for more information.
    #开启 aof
    appendonly yes
    # The name of the append only file (default: "appendonly.aof")(日志文件名称)
    appendfilename "appendonly.aof"
    #设置同步策略
    always #每次有数据修改发生时都会写入 AOF 文件
    everysec #每秒钟同步一次,该策略为 A0F 的缺省策略
    no #从不同步。高效但是数据不会被持久化
     
  • 相关阅读:
    IOS快速集成下拉上拉刷新
    无限互联IOS电影项目视频笔记
    Unix时间戳(Unix timestamp)转换工具
    ***php(codeigniter)中如何重定向
    CodeIgniter 错误: In order to use the Session class you are required to set an encryption key
    一个Form中2个按钮,PHP后台如何判断提交的是哪一个按钮
    PHP 判断是否包含某字符串
    Linux那些事儿之我是Hub(大结局)挂起自动化【转】
    Linux USB Host-Controller的初始化代码框架分析【转】
    urb传输的代码分析【转】
  • 原文地址:https://www.cnblogs.com/JBLi/p/11371437.html
Copyright © 2020-2023  润新知