概念请参考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)
项目中使用服务来执行webservice,由于对方系统api不稳定,经常导致服务崩溃,只能重启,一个月差不多要重启一次。初期的解决办法是捕获异常,然后continue掉。<?php try { $url = 'http...
(1).config.php 配置文件<?php /** * RabbitMQ_Config */ $config = [ 'host' => ...
主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /** * 订单任务 */ class Order { &n...
参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)代码:<?php $dbms = 'mysql'; $host = '192.168.8.8'; $dbName =&n...
文章篇幅较长,如果不喜欢看文章的,此处抛出韩顺丰老师的位运算视频,韩老师应该是全网讲php位运算符最详细的一个老师了。链接:https://pan.baidu.com/s/14xj7er8eVSUcJ-jYXyA0GA 提取码:731m 链接:https://pan.baidu.com...
今天朋友面试遇到的问题:php如何阻止一个类被序列化,首先我想到的是使用serialize函数进行序列化对象首先会检查对象是否存在__sleep方法,如果有的话先调用__sleep方法。(1).普通序列化对象代码:class member {  ...