概念请参考w3school文章: redis watch ,redis exec (看完基本秒懂)
(1)基本事务:
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//开启事务
$redis->multi();
//操作key
$redis->flushAll();
$redis->incr('user_id');
$redis->incr('user_id');
$redis->incr('user_id');
$ping = $redis->ping();
//执行事务
$result = $redis->exec();
if ($result)
{
echo '执行事务成功' . PHP_EOL;
}
else
{
echo '执行事务失败' . PHP_EOL;
}
//打印执行事务可以看到所有的执行结果
var_dump($result);输出结果:
array(5) {
[0]=>
bool(true)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
string(5) "+PONG"
}(2).监视key执行事务(Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断)
<?php
exec('chcp 65001');
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//清空redis
$redis->flushAll();
//操作的redisKey
$key = 'user_id';
//监视key
$redis->watch($key);
//开启事务
$redis->multi();
//睡眠点时间,手动开一个终端也去操作这个key
sleep(60);
//操作key
$redis->incr($key);
//执行事务
$result = $redis->exec();
if ($result)
{
echo '执行事务成功' . PHP_EOL;
}
else
{
echo '执行事务失败' . PHP_EOL;
}
//打印执行事务可以看到所有的执行结果
var_dump($result);执行结果:
执行事务失败 bool(false)
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $lati...
因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的member表字段id username &...
array_merge是最常用的数组合并方法,+号同样也可以,但是却有很大不同。array_merge遇到相同字符串key,后面数组的key会覆盖前面数组的key,+号正好相反。$a = [ 'one' => 'A on...
PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts { public f...
逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event { /** &nbs...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...