redis 事务

redis 事务基本操作

MULTI

标记一个事务块的开始。

事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

当命令输入错误时(输入时检查):事务被打断,整个事务不会被执行

当命令语法错误时(运行时检查):事务正常执行,错误的语法命令将会抛弃  (这种2种错误在编写代码是可以避免的)

 

EXEC

执行所有事务块内的命令。

假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort),不会被执行。

 

DISCARD

取消事务,放弃执行事务块内的所有命令。

如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。

 

WATCH key [key …]

监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

 

UNWATCH

取消 WATCH 命令对所有 key 的监视。

 

 

redis 锁

这个锁本质就是一个key,利用setnx在key未存在才可以set成功的特点来操作锁。在执行命令前通过setnx 的返回值判断是否上锁,1表示设置成功,当前客户端拿到锁,其他客户端再通过setnx结果为0,必须等待。当前客户端执行结束后,通过del删除该锁,其他客户端等待结束。

上述方法的风险是:当前客户端若down机了,导致锁没有被释放,其他客户端无法进入造成堵塞。这个问题造成的原因是:这个锁的设置和释放都是由程序员自己控制的。 解决方法是:使用expired为当前锁设置一个过期时间

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值