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)

相关推荐

  • 星期4英文,星期四的英文单词缩写是什么

    技术星期4英文,星期四的英文单词缩写是什么星期四的英文单词为Thursday 星期4英文,单词缩写为Thur. 【Thursday】
    是一个英文单词,中文意义为星期四或称礼拜四,指的是一周中星期三之后、星期五之前的那一

    生活 2021年10月22日
  • python文本进度条怎么实现

    技术python文本进度条怎么实现本篇内容介绍了“python文本进度条怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年12月9日
  • 图文详解两种算法:深度优先遍历,DFS)和广度优先遍历,BFS)

    技术图文详解两种算法:深度优先遍历,DFS)和广度优先遍历,BFS) 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)前言深度优先遍历(Depth First Search, 简称 DF

    礼包 2021年12月24日
  • Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令

    技术Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令这篇文章给大家介绍Linux前台的程序如何转到后台执行并且关闭终端而不杀死命令,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。过SSH或

    攻略 2021年10月21日
  • 美国服务器提供的功能和优势

    技术美国服务器提供的功能和优势美国服务器相比其他地区的海外服务器拥有多种优势,包括安全性,速度和可靠性。美国服务器支持用户完全控制权限,并保护您的数据免受未经授权的访问。美国服务器还允许您轻松升级美配置及其服务。如有必要

    礼包 2021年12月16日
  • base 关键字用法

    技术base 关键字用法 base 关键字用法base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。前半句实例:
    public class Person
    {
    protected

    礼包 2021年11月24日