redis事务
(1)mysql和redis事务的区别
Mysql | Redis |
---|---|
start transaction | multi |
普通sql | 普通命令 |
rollback 回滚 | discard 取消 |
commit | exec |
(2)基本操作
set han 1000
set zhao 2000
成功时:
开启事务: multi
han 减少500 : decrby han 500
zhao增加500: incrby zhao 500
成功: exec
失败时:
开启事务: multi
han 减少500 : decrby han 500
zhao增加500: incrby zhao 500
成功: discard
如果在开启事务multi的情况下,执行期间有错误的话,就算之后成功提交exec也会执行回滚discard,数据不会受到任何影响
如果在开启事务multi的情况下, 2条redis语句都不存在语法错误, 但是只有一条执行成功的话, 并且还能提交. 只能多注意. .
watch(监视, 如果数据在事务在未提交的情况下更改,则不做提交操作)
商品秒杀实例
$redis = new Redis();
$redis->connect('localhost');
//创建100个商品
/*for ($i=0; $i<100;$i++){
$redis->lpush('goodstore',1);
}
//将这个存储商品的链表名设定为90
$redis->expire('goodstore',90);*/
//用户每登录一个则进行依次删除, 也就抢购
$id = $redis->lPop('goodstore');
if(!$id){
echo "fail";
}else {
echo 'successs';
}