redis--事务

事务:一个队列中,一次性,顺序性,排他性的执行一系列命令

基本操作

  1. multi 开启事务,后面的指令暂时加入任务队列
  2. exec 执行事务
  3. discard 取消事务

注意

  1. 开启事务后,如果输入错误命令,不存在的指令,形式不对,则报错且关闭事务
  2. 开启事务后,如果语法格式正确,但操作类型错误,形式正确,执行事务时不会影响其他指令的运行,即不会回滚

  1. 添加监视锁:watch key (check-and-set)乐观锁机制
  2. 一个客户端watch某个键后,不管其后的事务是否涉及到该键,只要其他客户端修改了该键,则本客户端的事务都会失败,返回(nil)
  3. 在事务中不能watch, 但是可以unwatch
  4. 取消监视的情况:
    1. exec被调用,无论事务是否成功执行,对所有键的监视都会取消
    2. 某客户端断开连接时,该客户端对键的监视也会取消
    3. 使用无参数指令unwatch取消该客户端对所有键的监视

分布式锁

考虑一些问题:

  1. 保证锁总能释放掉 ——->设置失效时间
  2. 失效时间设置多久合适 ——–> 延长锁机制,每隔1/3的失效时间进行检测,如果还在执行,则延迟锁时间
  3. 避免解掉别人的锁 ——->解锁时对随机标识串进行校验
  4. 如果不能保证redis总是可用的———>Redlock算法,整多个redis,至少获取到N/2+1redis的锁且未失效