一、Redis支持简单的事务(不支持回滚)!
Redis与mysql事务的对比:
mysql | redis | |
开启 | start transaction | muitl |
语句 | 普通sql | 普通命令 |
失败 | rollback 回滚 | discard 取消 |
成功 | commit | exec |
注:当redis中的命令exec执行以后,discard取消是没有用的,只有exec之前(队列中),discard才会有效!
二、要想解决以上问题可以运用“watch”来监听;(运用“乐观锁”,场景:抢票)
watch key1 key2 keyn 作用:监听key1 key2 keyn有没有变化,如果有变化,则事务取消;
unwatch 作用:取消所有的监听
注:rollback与discard的区别!
如果已经成功执行前2条语句,第3条语句出错;
rollback后,前俩条语句影响会失效; 而 discard只是结束本次事务,前2条影响还在;
注:在muitl后面的语句中,语句出错可能有2中情况!
1:语法就有问题:这种exec时:报错,所有语句得不到执行;
2:语法本身没有错,但适用对象有问题,比如zadd操作link对象Exec之后,会执行正确的语句,并跳过有不适合的语句;
三、消息订阅(发布与订阅)
publish -> 频道 -> subscribe (publish news 内容--发布新闻内容 ; subscribe news ---订阅频道) 适宜做在线聊天,消息推送;
案例: