首页 > 数据库 >Redis 事务

Redis 事务

时间:2024-09-26 15:12:55浏览次数:8  
标签:事务 Redis 命令 执行 redisTemplate 客户端

概述

Redis 支持分布式环境下的事务操作,其事务可以一次执行多个命令,事务中的所有命令都会序列化地顺序执行。事务在执行过程中不会被其他客户端发送来的命令请求打断,服务器在执行完事务中的所有命令之后,才会继续处理其他客户端的其他命令。Redis 的事务操作分为开启事务、命令入队列、执行事务三个阶段

Redis 的事务执行流程如下:

  1. 开启事务:客户端执行 Multi 命令开启事务
  2. 提交请求:客户端提交命令到事务
  3. 任务入队列:Redis 将客户端的请求放入事务队列中等待执行
  4. 反馈入队状态:服务器返回 QUEUD,表示命令已被放入事务队列
  5. 执行命令:客户端通过 Exec 执行事务
  6. 事务执行错误:在 Redis 事务中如果某条命令执行错误,则其他命令会继续执行,不会回滚,可以通过 Watch 监控事务执行的状态并处理命令执行错误的异常情况
  7. 反馈执行结果:服务器向客户端返回事务执行的结果

Redis 事务相关命令有:

  • Multi:标记一个事务块的开始
  • Exec:执行所有事务块内的命令
  • Discard:取消事务,放弃执行事务块内的所有命令
  • Watch:监视一个(或多个)Key,如果在事务执行之前这个(或这些)Key 被其他命令改动,那么事务将被打断
  • Unwatch:取消 Watch 命令对所有 Key 的监视

代码实现

public void transactionSet(Map<String, Object> commandList) {
  // 1:开启事务权限
  redisTemplate.setEnableTransactionSupport(true);
  try {
    // 2:开启事务
    redisTemplate.multi():
    // 3:执行事务命令
    for (Map.Entry<String, Object> entry : commandList.entrySet()) {
      String mapkey = entry.getKey();
      Object mapValue = entry.getValue();
      redisTemplate.opsForValue().set(mapKey, mapValue);
    }
    // 4:执行成功,提交事务
    redisTemplate.exec();
  } catch (Exception e) {
    // 5:执行失败,回滚事务
    redisTemplate.discard();
  }
}

标签:事务,Redis,命令,执行,redisTemplate,客户端
From: https://www.cnblogs.com/Yee-Q/p/18410190

相关文章

  • redis常用命令
    目录Redsi最核心的命令(set和get)1.set2.get全局命令(通用命令)1.keys(按照匹配规则查看key)2.exists(用来判断指定key是否存在)3.del(删除指定的key)4.expire(给key设置过期时间)5.ttl(查看key的过期时间)reidis的key的过期策略怎么实现的?定时器的比较高效的实现方式6.type(查询key......
  • (Centos7/麒麟V10)服务器 Redis安装指南
    1.下载或上传安装包安装包官方下载地址:https://download.redis.io/releases/2.准备GCC编译环境查看gcc编译器版本:gcc-v若不存在则执行:yuminstall-ygcc或参考服务器gcc离线安装指南3.解压安装包并移至目标目录本文以redis-7.0.8.tar.gz安装包,部署路径/home/redis为......
  • [Redis]Redisson
    waitTime等待时间。客户端尝试获取锁时最大等待时间,超过这个等待时间必然返回获取锁失败。leaseTime锁的租期。客户端可持有锁的时间,超过这个时间锁自动过期。竞争锁的客户端执行Lua脚本获取锁,如果获取失败,则订阅解锁消息,并挂起线程。持有锁的客户端执行Lua脚本解锁,删除锁......
  • Ubuntu 安装Mysql+Redis+Nginx
    一、安装MySql1.新系统需要安装一下更新aptupdate-yaptdist-upgrade-yaptinstall-ywget2.安装mysql,并修改配置aptinstall-ymysql-servermysql配置文件通常位于vi/etc/mysql/mysql.conf.d/mysqld.cnf在[mysqld]把bind改成0.0.0.0,增加连接数,修改mode,开......
  • Redis过期时间删除策略详解
    文章目录Redis过期时间删除策略详解一、引言二、Redis过期键删除策略1、定时删除2、惰性删除3、定期删除三、Redis实际采用的策略1、惰性删除Java伪代码2、定期删除Java伪代码四、总结Redis过期时间删除策略详解一、引言在许多应用程序中,我们经常需要缓存一......
  • 计算机毕业设计—64422 个人事务app,免费领取源码
    摘要 随着人们生活压力的增加和事务的增多,个人事务管理变得越来越重要。人们需要一个有效的方式来管理和组织各种个人事务,如日程安排、任务管理、记账预算等。基于此,使用Java开发技术,基于SSM框架结合MySQL数据库设计与实现一个的个人事务app可以满足用户的需求,提供包括但......
  • [redis命令]set&zset命令汇总
    set命令命令含义SADD向集合添加一个或多个成员SCARD获取集合的成员数SDIFF返回给定所有集合的差集SDIFFSTORE返回给定所有集合的差集并存储在destination中SINTER返回给定所有集合的交集SINTERSTORE返回给定所有集合的交集并存储在destination中SISMEMBER判断member......
  • Spring Boot 三层架构结合 Redis 和 ELK 实现高效应用开发
    目录一、技术选型二、项目结构三、SpringBoot三层架构实现四、配置Redis五、配置ELK六、代码解析在企业级应用开发中,良好的架构设计和强大的技术栈能够提高开发效率、增强系统性能和可维护性。本文将介绍如何使用SpringBoot构建三层架构,并结合Redis和ELK(Ela......
  • Redisson与分布式锁
    一.Redis的常用客户端:Jedis:和命令最相似,API全面。缺点:多线程不安全(多线程可以使用连接池,安全使用Jedis)SpringData:线程安全的,底层基于Netty(异步的支持)Redisson:线程安全的,底层基于Netty,提供很多的分布式服务(分布式锁,分布式集合,分布式下的JUC的封装,延时队列)二.Redis实现......
  • Spring事务
    文章目录1.Transactional注解2.事务进阶2.1rollbackFor2.1propagation1.Transactional注解@Transactional作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。@Transa......