八、redis的事务及锁应用

redis事物及锁应用

过程:把命令输入后,就把命令放在队列里
打完exec,再集中执行

redis事物的执行

redis的事物开启multi
redis的语句普通命令
redis的失败取消 discard(所有放在队列中的语句都不执行)
redis成功exec

在mutil后面的语句中,语句出错可能有2种情况

语法错误,exec,直接报错,所以语句都不执行
语法本省没错,但使用对象有问题,exec之后,会执行正确的语句,跳过不正确的语句

思考

我在买票,ticket-1,money-100
而票只有一张,如果再我multi之后,和exec之前,票被别人买了,即ticket变成了0。我该如何观察这种情景,并不再提交。

对key进行检测,只要我设置监听后,一有人改动,我最后的exec就不能成功执行

具体的命令 watch命令
watch ticket
multi
decr ticket
decrby money 100
exec
(nil)返回nil,说明监视的ticket已经被改变了,事物就取消了
watch key1 key2 ……keyn
作用:监听key1 key2 keyn有没有变化,只要其中一个有变化,则事物取消(所有影响都失效)

unwatch

作用:取消所有的watch监听

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自:http://bbs.redis.cn/forum.php?mod=viewthread&tid=481 p...
    木十2036阅读 4,355评论 0 7
  • redis事务 Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务...
    全能程序猿阅读 6,464评论 0 11
  • Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先...
    binge1024阅读 3,424评论 0 2
  • phpredis是php的一个扩展Redis::__construct构造函数$redis = new Redis...
    hello大象阅读 4,101评论 0 2
  • PHP-redis中文文档 phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务...
    神秘者007阅读 7,661评论 0 2