Redis事务

  1. 事务

   1.1 事务概念

      事务:可以一次性执行多条命令。Redis事务非常简单。

       特点:

         1. 批量操作在发送exec命令前被放入队列缓存。

         2. 收到exec命令后进入事务执行,事务中任意命令执行失败,其余命令依然被执行。(redis事务不保证ACID特性)

         3. 事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

   

   1.2  redis事务使用方法

      1:使用multi命令开启事务。

       2:在事务中,设置数据操作都会被放入到队列中保存。

       3:使用exec 提交事务命令执行,把数据依次存储到redis中。

       4:使用discard命令取消事务。

      扩展命令: watch  unwatch

   1.3  案例操作

     > multi  开启事务

     > set p1 1

     > set p2 2

     > set p3 3

     > exec   执行,提交  

     ---------------------------

     > multi  开启事务

     > set p4 4

     > set p5 5

     > set p6 6

     > discard  取消,回滚

    -----------------------------

     redis事务有问题,支持太简单,不保证事务ACID特性:

     > multi  开启事务

     > set age 18           OK

     > set like chi,shui    OK

     > incr like            ERR  失败,但是并没有进行回滚

     > incr age             OK

     > exec

 

   

  1. Redis 持久性机制

    2.1 redis持久化机制是什么?

        Redis是内存数据库。如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。

        Redis 的持久化机制: 会经常将内存中的数据,同步到硬盘来保证持久化。

 

  

2.2  redis持久化机制分类 (分为两种)

        1. snapshotting(快照)rdb方式,默认方式,每隔一段时间刷盘,全量备份。

         2.append-only file aof方式,类似于日志记录,连续的增量备份。

 

   2.3  RDB 方式  (默认方式,默认开启)

        将内存中的数据以快照的方式写入到二进制文件中,默认dump.rdb

         可以进行设置redis在多少秒内如果超过nkey发生修改,则进行自动做快照。

        1. RDB方式配置,编辑redis.conf文件:vim redis.conf   

           dbfilename dump.rdb   默认存储rdb数据的文件名  (177行)

           dir ./     默认文件存储的目录,默认redis/bin目录下 (187行)

                    可以修改放在/usr/local/redis/etc目录下

           save 900 1    #900秒内如果超过一个key被修改,则发起快照保存 (142行)

       save 300 10   

           save 60 10000

 

        2RDB方式特点     

           每隔一段时间才刷盘,可能会数据丢失。

            适用于对数据实时性要求不高,容忍数据丢失。

            用于学习,测试,生产环境一般不用。

 

   2.4  AOF 方式   (默认关闭,需要通过配置文件进行开启)

       只要redis执行写操作,aof通过write函数写入追加到日志命令中。

        redis重启时,重新执行文件中保存的写命令来在内存中重建数据库的内容。

        1. AOF方式配置,编辑redis.conf文件:vim redis.conf   

           appendfilename "appendonly.aof"   //aof的文件名508行)

           appendonly yes                  //启动aof持久化 504行)

           aof持久化方式有三种修改方式,选择其中一种:533行)

              appendfsync always :一旦修改立即写入到硬盘。保证完全持久化,效率慢

      appendfsync everysec :每秒钟写入磁盘一次

      appendfsync no :完全依赖操作系统

              提示:实际开发中采用aof中的appendfsync always方式。

        2. AOF方式特点

          AOF日志会在持续运行中持续增大,由于Redis重启过程需要优先加载AOF日志进行指令重放以恢复数据,恢复时间会无比漫长。所以需要定期进行AOF重写,对AOF日志进行瘦身。目前AOFRedis持久化的主流方式。

 

   

 

2.5  RDBAOF方式的比较

 

 

注意:redis3.0以前rdb aof 两种方式,只能用一种。

      默认采用rdb,如果开启了aof,rdb默认关闭。

      Redis4.0以后,rdb aof 两种方式可以配合使用。

 

  1. Redis 消息发布和订阅

   Redis发布订阅(pub/sub)是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息。客户端可以订阅任意数量的频道。

   3.1 语法

       使用publish [频道]  [发布消息] 进行发布消息

       使用subscribe [频道]  订阅频道,可以接收监听频道发布消息

 

  

  3.2 示例展示

     打开多个终端,都进入到redis

     终端1: 订阅频道 ,可以监听到频道发布的内容

             subscribe  cctv  

     终端2: 订阅频道

             subscribe  cctv  

     终端3: 发布消息 , 返回整数,代表多少终端监听

              publish  cctv  'hello world!' 

posted @ 2022-04-06 11:14  Monotonous  阅读(15)  评论(0)    收藏  举报