PHP Redis - 事务
Redis 事务可以一次执行多个命令, 并有两个重要的保证:
① 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
② 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:开始事务;命令入队;执行事务。
// 监视/取消监视 一个(或多个) key(Watch/Unwatch)
// 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
$redis->watch(array(key1, key2));
// 取消 WATCH 命令对所有 key 的监视
// 如果watch监视之后执行了exec或discard,会自动取消监视,不必再unwatch
$redis->unwatch(array(key1, key2));
开始事务(Multi)
// 标记一个事务块的开始
$redis->multi();
执行事务(Exec)
// 执行事务块内的所有命令
// 事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 nil 。
$redis->exec();
取消事务(Discard)
// 取消事务,放弃执行事务块内的所有命令。
$redis->discard();
示例
<?php
try {
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
} catch (Exception $e){
echo $e->getMessage();
die;
}
$key1 = 'page';
$key2 = 'page2';
$redis->set($key1, '520');
$redis->set($key2, '521');
try {
//监视一个(或多个)key,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
$redis->watch(array($key1, $key2));
//模拟监视 key 被打断
//$redis->set($key1, '12345');
$redis->multi();
$redis->set($key1, '1123');
$redis->set($key2, '2123');
//执行事务块内的所有命令
$status = $redis->exec();
//失败则取消事务
if (!$status) {
$redis->discard();
}
} catch (Exception $e){
echo $e->getMessage();
die;
}
echo $redis->get($key1) . '-' .$redis->get($key2);
PHP Redis - 事务的更多相关文章
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
- REDIS 事务机制
基本事务操作: 任何数据库都必须要保证一种原子执行操作:最基本的原子执行操作肯定是需要提供: 举一个例子来说明: 当对某个Key 做一个统计: 可能不同的Client做它那部分的统计,一段时间后,服务 ...
- redis 事务
概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...
- (6)redis 事务
redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所 ...
- Redis事务的分析及改进
Redis事务的分析及改进 Redis的事务特性 数据ACID特性满足了几条? 为了保持简单,redis事务保证了其中的一致性和隔离性: 不满足原子性和持久性: 原子性 redis事务在执行的中途遇到 ...
- Spring Framework 中启动 Redis 事务操作
背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...
- 2016022612 - redis事务命令集合
参考地址:http://www.yiibai.com/redis/redis_transactions.html Redis事务由指令 MULTI 启动,以EXEC结束. 1.multi 用途:事务开 ...
- 2016022606 - redis事务
Redis事务 Redis事务让一组命令在单个步骤执行.事务中有两个属性,说明如下: 1.在一个事务中的所有命令按顺序执行作为单个隔离操作.通过另一个客户端发出的请求在Redis的事务的过程中执行,这 ...
- Redis事务和分布式锁
Redis事务 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行.Redis事务的实现需要用到 MUL ...
随机推荐
- 004 jmeter断言、集合点、函数、分布式
1.断言 *定义:断言就是让程序代替人工去判断程序响应数据是否达到预期结果. *断言可以检查返回数据的正确性与完整性 *常见的断言 *响应断言(断言状态码+断言文本值)哪个接口需要断言就在哪一个接口后 ...
- Git客户端部署使用-生成ssh密钥2
1. 设置用户名 其中双引号中的 XXX 是用户名,记得替换成自己的用户名,需要注意的是这里的用户名是git服务器所使用的名称,一般公司用的都是员工名称的全拼. # 在git窗口中输入命令行: git ...
- Tomcat异常处理机制
声明 源码基于Spring Boot 2.3.12中依赖的Tomcat 异常例子 tomcat中返回错误页面目前主要是以下两种情况. 执行servlet发生异常 程序中主动调用response.sen ...
- DAC双通道模板
#define DAC_C #include "dac.h" float DAC_DispenseA; float DAC_DispenseB; void MyDAC_Init(v ...
- Vue watch监听 date中的变量 与 数组或者对象的数据变化
直接看下面代码: 1.红色的的为一个对象,watch监听时.需要借助 computed 属性,否则watch监听打印出来的新旧值看不出.(注:方法可以随便写,但是 computed 中 与 watch ...
- jenkins 连接Windows
1.Windows机器需要安装powershell Server 下载路径:https://www.nsoftware.com/powershell/server/ 点击startk开启该服务 2.配 ...
- Flink 消费RabbitMQ 和 Kafka
在消息RabbitMQ时,我们关心的一个问题是手动ack还是自动ack,如果是自动ack就怕出现丢消息的情况 Flink以RabbitMQ作为Source,是怎么保证消息唯一性的呢,是怎么保证ack的 ...
- 没解决的问题-git连接失败
[parallels@localhost ~]$ ssh-keygen -t rsa -C '1012144290@qq.com'Generating public/private rsa key p ...
- sqlalchemy 数据类型
- 前端项目线上部署记录 | vue-cli
一.修改公开路径后打包;npm run build 新建一个vue.config.js文件,如果本地打开,则路径为"./',线上则'/',不加'.' module.exports = { p ...