04.Redis---事务处理

分布式缓存技术redis学习系列(五)——spring-data-redis与JedisPool的区别、使用ShardedJedisPool与spring集成的实现及一致性哈希分析 一、Redis与spring的整合一般分为spring-data-redis整合和JedisPool整合,先看看两者的区别1)、引用的依赖不同:spring-data-redis使用的依赖如下: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data 阅读详情

一、简介

        Redis采用了乐观锁方式进行事务控制,它使用watch命令监视给定的key,当exec(提交事务)的时候,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。注意watch的key是对整个连接有效的,如果连接断开,监视和事务都会被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。

        Redis保证一个事务中的所有命令要么都执行,要么都不执行(原子性)。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。

常用指令:

  • multi 开启事务
  • exec 提交事务
  • discard 取消事务
  • watch 监控,如果监控的值发生变化,则提交事务时会失败
  • unwatch 去掉监控

二、模拟使用

模拟转账操作

 开启事务后所有操作都会进入到一个队列中,提交时一起执行

模拟取消事务

redis事务太简单,没有回滚,而只有取消。

当队列中有语句出现错误时,事务会自动取消

 乐观锁使用演示

        乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,期间该数据可以随便被其他人读取,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。
        版本号机制是乐观锁最常用的方式,就是在表中增加一个版本号的字段,更新前先查一遍获取版本号,再作为更新语句的where条件进行更新,如果数据在获取版本号之后,在更新之前已经改变了,那就会更新失败,因为最后更新了0条数据,java后台拿到更新数如果为0,则说明更新失败,出现了并发问题,然后做具体的处理。

1.添加测试数据语句

开启监控,开启事务,执行语句

 

 2.另起一个redis对数据进行修改

 3.返回第一个数据库提交事务

这里我们可以看到执行事务失败。a变成了666

 三、乐观锁秒杀抢票练习

/*基于reids实现一个简单的多线程抢票操作
* 重点延时乐观锁的应用*/
public class SecondsKillDemo02 {
    //定义抢票逻辑
    public static void KillTicket() {
        //1.连接
        Jedis jedis = JedisDataSource.getConnection();
        //2.监控reids中指定的key
        String a = jedis.get("a");
        if (a == null || Integer.valueOf(a) == 0)
            throw new RuntimeException("没票了");
        jedis.watch("a", "b");
        //3.开启事务执行业务
        Transaction multi = jedis.multi();
        try {
            multi.decr("a");
            multi.incrBy("b", 100);
            //4.提交事务
             multi.discard();
            System.out.println("ok");
        } catch (Exception e) {
            multi.exec();
        } finally {
            //5.取消监控
            jedis.unwatch();
            //6.释放
            jedis.close();
        }
    }

    public static void main(String[] args) {
        //1.定义初始数据
        Jedis jedis = JedisDataSource.getConnection();
        jedis.set("a", "1");
        jedis.set("b", "0");
        //2.创建多个线程,在线程中执行抢票
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                KillTicket();
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                KillTicket();
            }
        });
        t1.start();
        t2.start();

    }
}

Redis Desktop Manager - Windows版Redis数据库管理工具 Redis(Remote Dictionary Server)是一种开源的、使用内存存储的、基于键值对的数据结构服务器。它被广泛地应用于缓存、消息队列、数据库、计数器和游戏得分等场景中。本章将介绍Redis的基础知识,包括其数据模型、工作原理、优势与应用场景,帮助读者建立起对Redis整体的认知框架。Redis Desktop Manager (RDM) 是一款开源且免费的图形界面管理工具,旨在为Redis数据库提供一个方便快捷的操作环境。 阅读详情

相关推荐

TOD和PPS精确时间同步技术

授时

u010783226的专栏 1万+

Jedis使用教程完整版一

概述 Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的代码。这篇文章不描述怎么安装Redis和Reids的命令,只对Jedis的使用进行对介绍。 1. 基本使用 Jedis的基本使用非常简单,只需要创建Jedis对象的时候指定host,port, password即可。当然,Jedis对象又很多构造方法,都大同小异,只是对应和Redis连接的socket的参数不一样而已。 Jedis jedis = new.

AlbenXie的博客 1602

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1008

Jedis连接池的使用

为什么要使用Jedis连接池 Redis作为缓存数据库理论上和MySQL一样需要客户端和服务端建立起来连接进行相关操作,使用MySQL的时候相信大家都会使用一款开源的连接池,例如C3P0.因为直连会消耗大量的数据库资源,每一次新建一个连接之,使用后再断开连接,对于频繁访问的场景,这显然不是高效的。 Jedis直连Redis 生产环境一般使用连接池的方式对Redis连接进行管理,所有J

学习需要由浅入深,心怀敬畏 1万+

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

<硬件设计> 阻抗设计(二) 使用Si9000计算阻抗

阻抗设计(二) 使用Si9000计算阻抗

杰克拉力船长个人博客 1万+

从源码角度看JedisPoolConfig参数配置

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 你好,JedisPoolConfig Java中使用Jedis作为连接Redis的工具。在使用Jedis的也可以配置JedisPool连接池,JedisPool配置参数大部分是由JedisPoolConfig的对应项来赋值的。本文简单总结几个常用的配置,然后通过源码(版本jedis-3.1.0)的角度让你理解配置这些...

阿飞云漫步 2029

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 179

Jedis使用教程完整版

概述 Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的代码。这篇文章不描述怎么安装Redis和Reids的命令,只对Jedis的使用进行对介绍。 1. 基本使用 Jedis的基本使用非常简单,只需要创建Jedis对象的时候指定host,port, password即可。当然,Jedis对象又很多构造方法,都大同小异,只是对应和Redis连接的socket的参数不一样而已。 Jedis jedis = ne

daobuxinzi的博客 1万+

4、教育数据挖掘:公共数据集与研究进展

本文综述了教育数据挖掘(EDM)领域的研究进展与公共数据集应用情况。从2013年至2020年,EDM在电子学习系统、大规模开放在线课程(MOOC)等方面快速发展,涵盖了多种研究任务、工具与方法。文章梳理了UCI、Mendeley、DataShop等平台的公开数据集,分析了其特点与局限性,并介绍了KDD Cup、Kaggle等竞赛中的教育数据集及其评价指标。同时,探讨了多模态、心理行为等特色数据集的应用场景。最后指出当前EDM面临的主要挑战是缺乏系统性数据集综述、数据预处理复杂及可重复性不足,呼吁加强数据共享

rgv2345678的博客 171

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 800

【Redis】04-Redis 事务处理实践

Redis事务简介 概述 Redis采用了乐观锁方式进行事务控制,它使用watch命令监视给定的key,当exec(提交事务)的时候,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。 注意watch的key是对整个连接有效的,如果连接断开,监视和事务都会被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。 基本指令 redis进行事务控制时,通常是基于如下指令进行实现,例如: multi 开启事务 exec 提交事务

李鲤驴的博客 155

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

step04day18 Redis事务处理及高级运用实践

1.redis事务处理实践 2.redis主从复制实践 3.redis 构建集群 4.

lydon1314的博客 228

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Ubuntu 16.04 Redis配置及常用命令

安装:点击打开链接 Redis 有点像一个大Map,根据key value 存储 value 可以放基本类型 基本类型:1)·字符串                 2)hash类型                 3)·set类型                 4)·list类型                 5)·sortedset类型 (排序的set)1)· 字符串类型:        ...

Old3的博客 1294

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Redis数据类型简介(十分钟快速学习Redis)

Redis不是简单的键值存储,它实际上是一个数据结构服务器,支持不同类型的值。这意味着在传统键值存储中,您将字符串键与字符串值相关联,而在Redis中,该值不仅限于简单的字符串,还可以容纳更复杂的数据结构。二进制安全字符串。列表:根据插入顺序排序的字符串元素的集合。它们基本上是链表。集:唯一,未排序的字符串元素的集合。类似于Sets的排序集合,但每个字符串元素都与一个称为score的浮点值相关联。

pingguocu3的博客 1028

07-python-数据库

本文是Python全栈开发面试实战指南的数据库章节,重点讲解关系型和非关系型数据库操作。实验在华为云ECS服务器(Ubuntu 24.04)上完成,使用Python 3.12.3环境。主要内容包括:SQLite关系型数据库的CRUD操作(创建表、插入数据、条件查询、聚合统计、JOIN查询、更新和删除)、事务处理、索引优化等,并对比Redis和MongoDB非关系型数据库的特性。通过实际代码演示了数据库连接、表创建、数据操作等面试常见知识点,帮助开发者掌握Python数据库编程的核心技能。

cpyaxjq的博客 170

【Redis-04 补充】Redis事务

超时问题 通过Redis连接池解决超卖问题通过Lua脚本解决watch的乐观锁会造成库存问题。

Blue_Pepsi_Cola的博客 1303

springboot中redis的事务处理

优点:简单粗暴。缺点:如何你是一个小项目,方法一则会多引入两个依赖,导致jar包变大。

honoursky的博客 527

redis_day04_note

day04笔记 Redis事务 特点 1. 单独的隔离操作:事务中的所有命令会被序列化、按顺序执行,在执行的过程中不会被其他客户端发送来的命令打断 2. 不保证原子性:redis中的一个事务中如果存在命令执行失败,那么其他命令依然会被执行,没有回滚机制 事务命令 1、MULTI # 开启事务 2、命令1 # 执行命令 3、命令2 ... ... 4、EXEC # 提交到数据库执行 4、DI...

huhaidi123的博客 227

04.Redis进阶使用

本篇文章介绍了redis的管道、发布/订阅、事物、模块、过期淘汰策略以及redis作为数据库与缓存的区别。

起个破名真费劲..的博客 325

搜狗workflow--04.redis_cli

class RedisValue { public: // nil RedisValue(); virtual ~RedisValue(); //copy constructor RedisValue(const RedisValue& copy); //copy operator RedisValue& operator= (const RedisValue& copy); //move constructor RedisValue(RedisValue&amp

gdut17的博客 532

Redis笔记二

这里需要注意和缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着高并发,高并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的高并发就穿破缓存,直接请求数据库,就像在一个屏幕上凿开了一个洞。当某个key在过期的瞬间,又大量的请求并发访问,这类数据一般都是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且回写缓存,会导致数据库瞬间压力过大。

m0_58533479的博客 971

04[掌握] Java连接redis操作

1,Jedis所需要的jar包依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency> ...

杨不易呀 131

超强、超详细Redis入门教程

超强、超详细Redis入门教程 2017年03月04日 16:20:02liqingtx阅读数:128956 转载自: http://www.h5min.cn/article/56448.htm 这篇文章主要介绍了超强、超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 【本教程目录】 1.redis是什么 2.redis的作者何许人...

taihexuelang的专栏 247

Redis 事务的精髓:原子性与隔离性

Redis 事务是一种将多个命令打包成一个单独执行单元的机制,确保了命令的**原子性**和**隔离性**。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 8320
上一篇: 03.Redis---Java操作Redis---Jedis
下一篇: 05.Redis---架构设计
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值