redis应用基于状态控制的批量任务执行

1. 事务的基本操作

  • 开启事务
multi
  • 作用

    设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中

  • 执行事务
exec
  • 作用

    设定事务的结束位置,同时执行事务。与multi成对出现,成对使用


注意:加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行


  • 取消事务
discard
  • 作用

    终止当前事务的定义,发生在multi之后,exec之前



2. 事务的工作流程

基于特定条件的事务执行---锁

业务场景

天猫双11热卖过程中,对已经售罄的货物追加补货,4个业务员都有权限进行补货。补货的操作可能是一系列的操作,牵扯到多个连续操作,如何保障不会重复操作?

业务分析
  • 多个客户端有可能同时操作一组数据,并且该数据一旦被操作修改后,将不适用于继续操作
  • 在操作之前锁定要操作的数据,一旦发生变化,终止当前操作
解决方案
  • 对key添加监视锁,在执行exec前如果key发生了变化,终止事务执行
watch key1 [key2...]
  • 取消对所有key的监视
unwatch


Trips 18:

  • redis应用基于状态控制的批量任务执行

原文地址:https://www.cnblogs.com/ifme/p/12322629.html

时间: 2024-08-29 06:08:44

redis应用基于状态控制的批量任务执行的相关文章

Java多线程 2 线程的生命周期和状态控制

一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它

Java多线程——线程的生命周期和状态控制

一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它

聊聊高并发(四十一)解析java.util.concurrent各个组件(十七) 任务的异步执行和状态控制

聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计这篇说了ExecutorService接口扩展了Executor接口,在执行任务的基础上,提供了执行框架生命周期的管理,任务的异步执行,批量任务的执行的能力.AbstractExecutorService抽象类实现了ExecutorService接口,提供了任务异步执行和批量执行的默认实现.这篇说说任务的异步执行和状态控制 说明一点,使用Executor框架执行任务的方式

Java多线程(二)、线程的生命周期和状态控制(转)

Java多线程(二).线程的生命周期和状态控制 分类: javaSE综合知识点 2012-09-10 16:11 15937人阅读 评论(3) 收藏 举报 一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadSt

SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统

1.前言本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelper.Mapper插件.druid.dataTables.ztree.jQuery 开发工具:intellij idea 数据库:mysql.redis 2.表结构还是是用标准的5张表来展现权限.如下图:image 分别为用户表,角色表,资源表,用户角色表,角色资源表.在这个demo中使用了mybat

WireMock之定义状态控制返回

WireMock之定义状态控制返回 定义操作习惯 可以定义一个场景,然后通过状态来控制每次请求返回的内容 基本语法,初始状态总是为Started XXX.inScenario("Scenario") .whenScenarioStateIs("Started") .willSetStateTo("NewStatus")); XXX.inScenario("Scenario") .whenScenarioStateIs(&quo

关于C++ 输入输出流状态控制

关于这一点呢,是在做<C++primer >关联容器map的一道习题中发现这个蛋疼的问题的. 问题是这样的: 我想要将while循环条件设置为cin,这样就可以不断等待输入,普通的程序可以直接按下ctrl+z中止输入,麻烦在于这里有两层这样的while循环,而ctrl+z会一次性全部退出,导致无法实现想要的目的(在每个外层循环内部,可以输入有限量可中止的内层循环变量,也就是说第一次按下ctrl+z只停止内层的循环,等待进行下一次外层循环,然后再进入内层循环……) 1 #include<&

16、基于状态的iptable+高级路由(重点)

-- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有12种之多 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及INVALID 这两个分类是两个不相干的定义.例如在TCP/IP标准描述下UDP及ICMP数据包是没有连接状态的,但在state模块的描述下,任何数据包都有连接状态. new(第一次) |      |-------------------->|      | |      |   established(回来)  |      |

小米范工具系列之十:小米范SSH批量命令执行工具

小米范SSH批量命令执行工具的主要功能是自动登录多台机器,并执行指定的命令,比如批量抓去shadow.批量获取系统版本等. 界面如下图: 使用方法: 1.输入目标ip.用户名.密码.ssh端口(使用空格或tab键分隔),每行一个目标. 2.设置线程数(如果不设置默认为5). 3.选择输出,默认为右侧输出窗口,可以设置每个ip一个文件,比如抓去shadow,可以把每个ip的执行结果保存到一个txt文件放在当前目录下. 4.点击执行即可. 最新版本下载地址:http://pan.baidu.com/