redis事务
- redis也是有事务的,类似mysql的mvcc那样的,也就是说在你开启事务到结束这个期间,别人对这个数据是做不了修改的
事务的基本操作
- 开启事务:multi :设定事务的开启位置,这个指令执行后,后续的命令都加入到事务中
- 执行事务:exec 设定事务的结束,同时执行事务,和multi成对出现
- 加入事务的命令暂时进入了队列,没有立即执行,只有执行了exec命令才开始执行
- 取消事务:discard:终止当前事务的定义,在multi之后,exec之前
事务的执行流程

事务的注意事项
- 如果在事务过程中,命令格式出入错误,则整体事务所有命令都不会执行,包括正确的指令
- 如果是执行出现了错误,比如对list进行排序操作,能够正确执行的执行,不能执行的不执行
- 已经执行完的命令无法自动回滚,只能在代码中回滚
- 记录操作过程中被影响的数据之前的状态
- 设置指令恢复所有被修改的项
redis 锁
- 对key添加监视锁,如果在执行exec前key发生了变化,终止事务执行 watch key1 key2
- 取消对所有key的监视 unwatch
分布式锁
- 使用setnx设置一个公共锁 setnx lock-key value
- 利用setnx命令返回值的特征,有值返回设置失败,无值返回设置成功
- 对于返回设置成功的,拥有控制权,进行下一步
- 对于返回失败的,不具有控制权,排队或等待
- 改良:使用expire为锁key添加时间限定,到时不释放,放弃锁
- expire lock-key second
- pexpire lock-key milliseconds (毫秒)
相关文章: