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 ...
随机推荐
- zabbix编译安装,安装mysql数据库:configure: error: Not found mysqlclient library
在编译时,可能会出现题目中所示的错误,可以通过安装mysql-devel这个库解决: # yum install mysql-devel 注:如果出现"configure: error : ...
- K8S-PV和PVC
目录: emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PVC和PV 生命周期 一个PV从创建到销毁的流程 静态 回收策略 NFS使用PV和PVC 动态 总结 容器磁盘上的文 ...
- Redux Toolkit——基操
redux-toolkit是redux的升级版 安装 npm install @reduxjs/toolkit // 在react中还需要搭配react-redux使用 npm install rea ...
- vue 定时器 定时刷新页面 定时请求接口
data(){ return{ intervalId:null, } }, methods:{ // 定时刷新数据函数 dataRefreh() { // 计时器正在进行中,退出函数 if (this ...
- 事务(Transaction)逻辑应用
1.什么是事务? 是一个逻辑工作单元,这个工作单元中的所有操作,要么都成功,要么都失败 2.事务是如何保证数据的正确性的? 通过事务的四大特性:原子性.一致性.隔离性.持久性 原子性(Atomicit ...
- mmdetection3d安装
conda create -n openmmlab python=3.7 -y conda activate openmmlab pip install torch==1.8.1+cu101 torc ...
- Android拍照程序适配
public void takePic(){ String forderPath = getExternalFilesDir("") + "/pic"; Fil ...
- map转listmap
package com;import java.util.*;import java.util.stream.Collectors;public class LambadaTest { public ...
- 一个新App上线应该注意什么?
一个新App上线应该关注哪些地方: 功能使用上无大问题遗留 用户使用体验尚佳 (前两条属于普通app更新也需要关注的点) 用户需要有反馈的入口,比如app内的反馈.用户可以直接联系到对应负责人进行反馈 ...
- 1140. 石子游戏 II (Medium)
问题描述 1140. 石子游戏 II (Medium) 爱丽丝和鲍勃继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮 ...