Redis事务处理的操作方法是什么

技术Redis事务处理的操作方法是什么本篇文章给大家分享的是有关Redis事务处理的操作方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、简介

这篇文章讲的是Redis交易处理的操作方法,边肖觉得挺实用的,所以想分享给大家学习。希望大家看完这篇文章能有所收获。我不多说,让我们和边肖一起看看。

一、简介

Redis采用了乐观锁方式进行事务控制,它使用watch命令来监视给定的键。当exec(提交事务)时,如果被监控的键在调用watch后发生了变化,整个事务将失败。您也可以调用watch多次监控多个按键。请注意,手表的钥匙对整个连接都有效。如果连接断开,监控和事务将自动清除。当然,exec、discard和unwatch命令将清除连接中的所有监控。

Redis保证事务中的所有命令要么被执行,要么不被执行(原子性)。如果客户端在发送EXEC命令之前断开连接,Redis将清空事务队列,事务中的所有命令都不会执行。一旦客户端发送了EXEC命令,所有的命令都会被执行,即使客户端后来断开了连接,因为所有要执行的命令都已经记录在Redis中了。

常用指令:

多重未结交易。

Exec提交事务。

放弃取消交易。

观察监控,如果监控值发生变化,提交时交易会失败。

取消监视。

二、模拟使用

模拟转账操作

Redis事务处理的操作方法是什么

打开事务后,所有操作将进入一个队列,并在提交时一起执行。

模拟取消事务

redis交易太简单,没有回滚,只有注销。

Redis事务处理的操作方法是什么

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

Redis事务处理的操作方法是什么

10-1010乐观锁,顾名思义就是非常乐观。每次得到数据,我都认为别人不会修改,所以不会锁定。在此期间,数据可以被其他人随意读取,但在更新时,我会判断在此期间是否有其他人更新过数据,我可以使用版本号等机制。

版本号机制是乐观锁定中最常用的方法,即在表中增加一个版本号字段,在更新前检查以获取版本号,然后将其更新为update语句的where条件。如果数据在获取版本号后更新前发生了变化,那么更新会失败,因为最后更新了0条数据,如果java后台获取的更新号为0,则意味着更新失败并出现并发问题,然后再做具体处理。

乐观锁使用演示

开始监控,开始交易,执行语句。

Redis事务处理的操作方法是什么

1.添加测试数据语句

Redis事务处理的操作方法是什么

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

Redis事务处理的操作方法是什么

00-1010/*实现一个简单的基于reids的多线程抢票操作。

*密钥延迟乐观锁定的应用*/

publicclassSecondsKillDemo02{

//定义票务逻辑。

n

bsp; 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事务处理的操作方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/37089.html

(0)

相关推荐

  • spring security csrf 认证控制(springboot如何关掉csrf)

    技术如何分析Spring对CSRF的防范这篇文章将为大家详细讲解有关如何分析Spring对CSRF的防范,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是 CSRF跨站

    攻略 2021年12月16日
  • 怎么解决TensorFlowGPU版出现OOM错误的问题

    技术怎么解决TensorFlowGPU版出现OOM错误的问题这篇文章主要介绍“怎么解决TensorFlowGPU版出现OOM错误的问题”,在日常操作中,相信很多人在怎么解决TensorFlowGPU版出现OOM错误的问题

    攻略 2021年11月4日
  • 铁与稀盐酸反应的化学方程式,用稀盐酸除铁锈的化学反应方程式

    技术铁与稀盐酸反应的化学方程式,用稀盐酸除铁锈的化学反应方程式铁锈的主要成分是氧化铁(fe2o3)铁与稀盐酸反应的化学方程式,将生锈的铁钉放入稀盐酸中,先是表面的铁锈的主要成分氧化铁与盐酸反应生成氯化铁与水,反应现象为:

    生活 2021年10月23日
  • 张飞穿针的歇后语是什么,歇后语,张飞穿针下一句是

    技术张飞穿针的歇后语是什么,歇后语,张飞穿针下一句是张飞穿针——大眼瞪小眼张飞穿针的歇后语是什么。 附:“张飞系列”歇后语 张飞吃豆芽——小菜一碟 张飞穿针——大眼瞪小眼 张飞使计谋——粗中有细 张飞卖针——人强货扎手

    生活 2021年10月26日
  • 华为手机什么型号好,现在华为哪款手机值得购买

    技术华为手机什么型号好,现在华为哪款手机值得购买华为手机比较好的型号当然推荐华为mate 系列和P系列了华为手机什么型号好。华为手机现在型号系列不断拓展,型号分布也十分丰富了,最为顶尖的华为手机型号先推荐华为mate 系

    生活 2021年10月28日
  • Spring2.5.6中面向切面编程及实现的示例分析

    技术Spring2.5.6中面向切面编程及实现的示例分析这期内容当中小编将会给大家带来有关Spring2.5.6中面向切面编程及实现的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收

    攻略 2021年10月27日