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)

相关推荐

  • ngk的发展(ngk高级和低级怎么区别)

    技术怎么浅析NGK的发展蓝图怎么浅析NGK的发展蓝图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NGK作为分布式商业公链项目,致力于打造可服务于各类型商业

    攻略 2021年12月18日
  • PHP CLI应用的调试原理是什么

    技术PHP CLI应用的调试原理是什么PHP CLI应用的调试原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们在Eclipse里

    攻略 2021年10月19日
  • 如何自定义 Mac 上的控制中心和菜单栏

    技术如何自定义 Mac 上的控制中心和菜单栏 如何自定义 Mac 上的控制中心和菜单栏就像在 iPhone 或 iPad 上一样,您的 Mac 也有一个控制中心,您可以使用它来控制 Wi-Fi、蓝牙、A

    礼包 2021年11月4日
  • C语言函数分类自定义参数及调用方法是什么

    技术C语言函数分类自定义参数及调用方法是什么本篇内容主要讲解“C语言函数分类自定义参数及调用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数分类自定义参数及

    攻略 2021年11月24日
  • 利用socket实现一个简单的web聊天(websocket服务器开源)

    技术如何分析基于WebSocket的聊天开源项目如何分析基于WebSocket的聊天开源项目,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如果你是站长,是否

    攻略 2021年12月24日
  • 如何理解Java设计模式的桥接模式

    技术如何理解Java设计模式的桥接模式这篇文章主要讲解了“如何理解Java设计模式的桥接模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Java设计模式的桥接模

    攻略 2021年11月8日