PHP使用Redis的Transaction(事务)命令
1.Transaction命令
命令 | 作用 | 返回值 |
---|---|---|
watch | 监视一个或多个key | 总是OK |
multi | 声明事务开始,后续命令将排队按顺序等待exec执行 | 总是OK |
exec | 顺序执行multi之后的命令,如果multi之前使用watch命令监视的键的值发生变化,执行将失败 | 执行成功时返回数组包含每个命令执行结果,失败时原生命令返回null,php-redis扩展方法返回false |
discard | 取消事务 | 总是OK |
unwatch | 取消watch监视,如果watch监视之后执行了exec或discard,会自动取消监视,不必再unwatch | 总是OK |
2.执行事务
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/24 * Time: 21:03 */ try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); //开启事务 $redis->multi(); $redis->setex('keyTest', 60, 1); $redis->get('keyTest'); $redis->incr('keyTest'); $redis->get('keyTest'); //执行事务 $ret = $redis->exec(); print_r($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果:以数组形式返回了每个命令执行结果
Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 2 )
3.取消事务
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/24 * Time: 21:03 */ try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); //先设置缓存keyTest为1 $redis->setex('keyTest', 60, 1); //开启事务 $redis->multi(); $redis->setex('keyTest', 60, 10); $redis->get('keyTest'); $redis->incr('keyTest'); $redis->get('keyTest'); //取消事务 $redis->discard(); $ret = $redis->get('keyTest'); var_dump($ret); //查看keyTest } catch (Exception $e){ echo $e->getMessage(); }
执行结果:keyTest还是原值,并未发生变化
string(1) "1"
4.监视键,并执行事务
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/24 * Time: 21:03 */ try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); //先设置缓存keyTest为1 $redis->setex('keyTest', 60, 1); //监视keyTest $redis->watch(array('keyTest')); //假设在开始监视之后,执行事务之前,keyTest被并发操作redis的其他用户修改了 $redis->setex('keyTest', 60, 10); //开启事务 $redis->multi(); $redis->incr('keyTest'); //执行事务 $ret = $redis->exec(); var_dump($ret); $ret = $redis->get('keyTest'); var_dump($ret); //查看keyTest } catch (Exception $e){ echo $e->getMessage(); }
执行结果:exec返回false
bool(false) string(2) "10"
Transaction(事务)命令的关键在于,redis在给我们提供了高性能的同时,虽然命令是原子性的,但无法和我们的php产生上下文关联,这个时候,Transaction(事务)命令就派上了用场
原文地址:https://www.jmsite.cn/blog-601.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PHP使用Redis的Pub/Sub(发布订阅)命令
1.概念 名称 含义 channel 频道:生产者和消费者直接操作的对象 publish 生产者:向channel发送消息 subscribe 消费者:订阅一个或多个channel psubscribe 消费者:匹配订阅一个或多个channel punsubscribe 退订:匹配退订,无参数则退订全部channel unsubscribe 退订:退订指定的channel,无参数则退订全部channel pubsub 列出当前活动channel(至少有一个订阅) 2.注意事项 1.生产者publish消息时打开一个连接,publish后连接可以立即关闭2.channel只接收publish发送的消息,自身不存储消息,如果channel没有被订阅,则消息丢弃3.订阅的消费者需要一直在线,阻塞获取消息,连接断开表示立即退订 3.使用rawCommand命令实现发布订阅 rawCommand是php-redis扩展中提供的命令,可以向redis发送任何原生的命令1.消费者订阅Subscribe.php消费者需要创建redis长连接,并且设置set_time_limit和default_soc...
- 下一篇
PHP使用Redis的Hash(哈希表)命令
1.Hash(哈希表)命令 命令 作用 返回值 hDel 删除哈希表key中一个或多个字段,传入不存在的字段将被忽略 返回成功删除的字段数 hExists 判断哈希表key中是否存在给定的字段 存在true,不存在false hGet 从哈希表key中获取给定的一个字段值 存在返回字段值,不存在返回false hGetAll 从哈希表key中获取全部的字段和值 存在返回关联数组,不存在返回空数组 hIncrBy 整形数值递增(有符号) 递增后的值 hIncrByFloat 浮点型数值递增(有符号) 递增后的值 hKeys 返回哈希表key中所有的字段 存在字段返回关联数组,不存在返回空数组 hLen 返回哈希表key中字段数量 大于等于0的整数 hMGet 返回哈希表key中给定的一个或多个字段的值 返回一个关联数租,键为查询的字段,值为查询到的值,查询的字段不存在则值为false hMSet 对哈希表key设置一组字段值 如果命令成功,返回true hSet 对哈希表key设置一个字段值 如果是设置了一个新值,返回1,如果覆盖了一个旧值,返回0 HSetnx 在哈希表key中不存在给...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果