`
xuelianbobo
  • 浏览: 174775 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

redis渐入佳境(08) 事务控制

阅读更多

的事务控制主要由如下几个命令:

MULTIEXECDISCARDWATCH

其中multi是用来开启一个事务、exec是提交事务、discard取消事务、watch是用来实现乐观锁。

注意:redis对事务的支持非常简单,它只能保证事务中的操作不被其他客户端打断。

还有redis事务不会自动回滚,也就是事务队列中不会因为一个操作的失败而自动回滚其他操作,这一点是与关系型数据库不一样的地方请注意。

下面就通过代码来实现一下事务:

[redies@localhost redis-2.4]$ redis-cli
redis 127.0.0.1:6379> auth xuelianbo
OK
redis 127.0.0.1:6379> keys *
1) "name"
redis 127.0.0.1:6379> multi   //开启一个事务的上下文
OK
redis 127.0.0.1:6379> set name xue  //执行各种写的操作
QUEUED
redis 127.0.0.1:6379> set name lian
QUEUED
redis 127.0.0.1:6379> exec //提交事务队列
1) OK
2) OK
redis 127.0.0.1:6379> get name
"lian"
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set name 1
QUEUED
redis 127.0.0.1:6379> discard  //取消事务队列
OK
redis 127.0.0.1:6379> get name
"lian"
redis 127.0.0.1:6379> set age 10
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> incr age
QUEUED
redis 127.0.0.1:6379> incr name
QUEUED
redis 127.0.0.1:6379> exec   //提交事务
1) (integer) 11  //此处就出现了,部分成功的现象
2) (error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> keys *
1) "age"
2) "name"
redis 127.0.0.1:6379> watch age   //制造一个乐观锁,watch age
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set age 11
QUEUED
redis 127.0.0.1:6379> set age 12
QUEUED
redis 127.0.0.1:6379> exec
1) OK
2) OK
redis 127.0.0.1:6379> watch age  //制造一个乐观锁的情形, 提交前其他客户端修改了watch的对象
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set age 12
QUEUED
redis 127.0.0.1:6379> exec
(nil) //返回修改失败
redis 127.0.0.1:6379>

   下面是另一个客户端制造乐观锁的指令,其实就是在上面的回话watch的时候进行了age的修改。

[redies@localhost redis-2.4]$redis-cli
redis 127.0.0.1:6379> keys *
(error) ERR operation not permitted
redis 127.0.0.1:6379> auth xuelainbo
(error) ERR invalid password
redis 127.0.0.1:6379> auth xuelianbo
OK
redis 127.0.0.1:6379> keys *
1) "age"
2) "name"
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379>

 

 

 

 

分享到:
评论

相关推荐

    08-Redis HyperLogLog与事务和Redis 7.0那点事-ev.rar

    08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar...

    记录redisson实现redis分布式事务锁

    本篇文章将详细探讨如何使用Redisson实现Redis分布式事务锁,以及在Spring Boot环境中如何进行集成。 首先,Redis作为一个内存数据库,其高速读写性能使其成为实现分布式锁的理想选择。分布式锁的主要作用是在多...

    redis事务与关系型数据库事务比较

    【Redis 事务与关系型数据库事务的比较】 Redis 和关系型数据库(如 MySQL)在事务处理上有显著的差异。在Redis中,事务提供了一种批量执行命令的方式,以确保原子性,但其机制与传统的ACID(原子性、一致性、隔离...

    springboot-redis事务

    本文将深入探讨“SpringBoot-Redis事务”这一主题,旨在帮助开发者理解如何在SpringBoot项目中利用Redis进行事务操作。 首先,SpringBoot是Spring框架的一种快速启动方式,它简化了配置,提供了自动配置的功能,...

    cpp-Redis分布式事务

    标题中的“cpp-Redis分布式事务”表明我们讨论的是如何在C++编程环境下利用Redis来实现分布式事务处理。Redis是一款开源的、基于键值对的数据存储系统,常用于缓存、消息队列以及分布式场景中。在大型游戏中,由于...

    基于rabbitmq+redis实现分布式事务项目源码.zip

    基于rabbitmq+redis实现分布式事务项目源码.zip 基于rabbitmq+redis实现分布式事务项目源码.zip 基于rabbitmq+redis实现分布式事务项目源码.zip 基于rabbitmq+redis实现分布式事务项目源码.zip 基于rabbitmq+redis...

    redis的高级事务CAS(乐观锁).rar

    在 Redis 的事务中,虽然没有像 SQL 事务那样的显式锁定机制,但通过 CAS 操作,可以实现类似的功能。 Redis 事务主要通过 `MULTI`、`EXEC` 命令来实现。当客户端发送 `MULTI` 命令后,Redis 会进入事务模式,接收...

    redis面试题之事务.zip

    相比普通的事务,Lua脚本提供了更强大的逻辑控制,并且能保证更高的性能。 6. **对比其他数据库事务**:与关系型数据库的ACID(原子性、一致性、隔离性、持久性)事务不同,Redis的事务只保证原子性和部分一致性,...

    redis事务回滚工具

    基于SpringBoot的轻量级redis事务回滚机制,使用栈和ThreadLocal记录业务链的redis操作,发生异常进行回滚,参考了阿里巴巴Seata AT模式的db回滚策略:补偿回滚,记录前镜像与当前操作语句,反向解析生成补偿动作。...

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    redis事务_动力节点Java学院整理

    Redis 事务(Transactions)是 Redis 数据库提供的一种批量执行命令的功能,尽管它的事务机制相比于传统的关系型数据库事务较为简化,但仍能满足一些基本的事务需求。Redis 事务的主要特点在于其简单、快速和高效,...

    redis事务常用操作详解

    Redis 事务是数据库系统中的一种特性,允许用户一次性提交多个操作,确保这些操作作为一个整体执行,从而提供数据的一致性和隔离性。在Redis中,事务提供了两种主要的保证:隔离性和原子性。这意味着在事务执行期间...

    springboot+redis+mybatis事务和引擎模板

    在本项目中,“springboot+redis+mybatis事务和引擎模板”是一个综合性的Spring Boot应用,它整合了MyBatis和Redis技术,用于实现高效的数据处理和缓存管理。下面将详细阐述其中涉及的关键知识点: 1. **Spring ...

    基于RabbitMQ+Redis的分布式事务框架

    在这个框架中,我们结合了RabbitMQ消息中间件和Redis键值存储来构建一个可靠的分布式事务解决方案。下面将详细介绍这个框架的关键技术和应用。 首先,RabbitMQ是一个开源的消息队列系统,遵循AMQP(Advanced ...

    redis中的事务操作案例分析

    **Redis中的事务操作详解** Redis,作为一个高性能的键值存储系统,虽然其事务处理功能相比传统的关系型数据库如MySQL较为简单,但也提供了基本的事务支持。本文将通过案例分析,探讨Redis中的事务操作。 **一、...

    Magento-Redismanager, 在 Magento,用于Redis的超级用户控制.zip

    Magento-Redismanager, 在 Magento,用于Redis的超级用户控制 Redis 管理Redis服务的实用程序特性系统> 配置>的自动或者手动配置高级> Redis管理在负载均衡环境中缓存服务不同的理想情况直接从magento面板管理员管理...

    控制访问redis的ip和设置redis访问密码.docx

    控制访问Redis的IP是指限制哪些IP地址可以访问Redis服务器。默认情况下,Redis服务器监听所有IP地址,为了提高安全性,我们需要限制哪些IP地址可以访问Redis服务器。 要控制访问Redis的IP,我们需要修改Redis配置...

    Redis之Redis事务

    本文主要介绍了Redis事务的概念、Redis不保证原子性、Redis事务的三个阶段、Redis事务相关命令以及Redis事务使用案例。 本文来自于博客园,由火龙果软件Anna编辑、推荐。Redis事务的本质是一组命令的集合。事务支持...

    redis事务处理:(error) EXECABORT

    然而,事务处理并非总是顺利进行,"redis事务处理:(error) EXECABORT" 是一个常见的错误提示,意味着在执行事务时遇到了问题。本文将深入探讨这个错误的原因以及如何解决。 一、Redis 事务基础 Redis 的事务机制...

Global site tag (gtag.js) - Google Analytics