Redis教程

Redis 事务

本文主要是介绍Redis 事务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • redis事务就是将一系列命令打包成一个队列之后,一起执行。中间不允许其他命令打断。

1. 基本操作

  • 开启事务。此后所有命令,都会放进队列里面。
    multi
    
  • 执行事务。一次性将队列里面所有事务都执行了。
    exec
    
    在这里插入图片描述
  • 取消事务。终止当前事务的定义,发生在multi之后,exec之前
    discard
    
    在这里插入图片描述

2. 注意事项

  • 如果在定义事务期间,出现语法错误,就直接整个事务崩了。最后也没办法执行。
    在这里插入图片描述
  • redis的事务没有回滚操作,执行了就是执行了。即使中间出错了,前面执行的也不会回滚。
    在这里插入图片描述

3. 锁

3.1 监视锁

  • 即监视某个key的变化,如果在事务初始化multi之后,事务执行(exec)之前,该key发生了变化。则该事务不能执行。
  • 无论在事务里面有没有对该key进行操作,事务一律不能执行。
  • 该操作,可以防止多个客户端同时操作的时候,发生一些并发的情况。

3.1.1 操作

  • 在声明事务之前,声明要监视的key
    watch key1 [key2……]
    
  • 可以在事务声明之前,提前取消所有watch。否则,在事务里面就没办法取消了。
    unwatch
    
  • 声明事务
    multi
    
  • 一系列操作
  • 执行事务。如果再次之前key发生了变化,那就直接崩了,没办法执行。
    exec
    

3.2 分布式锁

  • 这就是个防君子不防小人的玩意…
  • 之前在基本数据类型中提到,在创建key的时候,可以通过setnx实现当没有的时候创建,存在的时候不创建。
  • 借此,这里就可以创建一个分布式锁。当该锁已经被创建了,那就不执行自己的任务,直到上一个客户端执行完之后,删除了该锁。
  • 因此,需要客户端之间协商出一个协议,将该锁取相同的名字。

3.2.1 实现

  • 创建一个公共锁。如果已经被设置了,那就自己在外面等待,直到该锁已经被del
    setnx lock-key value
    
  • 删除锁。其他客户端就可以设置了。
    del lock-key
    
  • 但是,如果客户端忘记了解锁。那就完蛋了,别的客户端一直在外面等。因此,可以给锁设一个生命周期,在指定时间内,如果没被删除,那就自动失效。
    expire lock-key second
    pexpire lock-key milliseconds
    

    第一个是秒级的,第二个是毫秒级的

  • 由于操作通常都是微秒或毫秒级,因此该锁定时间不宜设置过大。具体时间需要业务测试后确认。
这篇关于Redis 事务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!