IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis事物机制实现缓存+DB一致性保障 -> 正文阅读

[大数据]Redis事物机制实现缓存+DB一致性保障

一、前言

1.1、Redis事务基本概念

事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中

redis事务就是一次性、顺序性、排他性的执行一个队列中的一组命令)

?Redis的事务总是具有ACID中的原子性、一致性和隔离性

1.2、Redis事务基础命令:

  1. watch:?watch某个key,当该key被其它客户端改变时,则会中断当前的操作? ? ? ? ? ? ? ? ? ? ? ? ? (?带有WATCH命令的事务会将客户端和被监视的键在数据库的watched_keys字典关联,当键被修改时,程序会将所有监视被修改键的客户端的REDIS_DIRTY_CAS标识打开,服务只有在REDIS_DIRTY_CAS标识没有打开时,才会执行客户端提交的事务,否则服务器拒绝执行事务。)
  2. multi:开启事物
  3. exec:提交一组事物
  4. discard:取消事物(Redis事务不支持回滚机制,只支持取消了)

Redis事务允许在一次单独的步骤中执行一组命令(Redis要么执行其中的所有命令,要么什么都不执行——原子性),Redis会将一个事务中的所有命令序列化,然后按顺序执行

(1)当某个客户端正在执行一次事务时,如果它在调用MULTI命令之前就从Redis服务端断开连接,那么就不会执行事务中的任何操作;

(2)如果它在调用EXEC命令之后才从Redis服务端断开连接,那么就会执行事务中的所有操作

二、demo1

 stringRedisTemplate.execute(new SessionCallback<Object>() {
        @SneakyThrows
        @Override
        @SuppressWarnings({ "unchecked"})
        public Object execute(@NotNull RedisOperations operations) throws DataAccessException {
          operations.watch(redisUsernameMap.keySet());
          operations.multi();
          try {
            redisUsernameMap.forEach((k, v) -> {
              // hash key操作
              operations.opsForHash().putAll(k, v);
            });
            // db操作
            xxMapper.batchBandUpdate(db);
            operations.exec();
          } catch (Exception e) {
            log.error(e.getMessage(), e);
            // 放弃执行
            operations.discard();
            throw new IoTApiException(
                AccessErrorCode.ACCESS_INFO_REDIS_DB_EXECUTE_ERROR.getErrorCode(),
                "redis db transaction consistency failed.");
          }
          return null;
        }
      });

三、demo2

      stringRedisTemplate.execute((RedisConnection connection) -> {
        byte[][] rawKeys = mqttAuthUtil.rawArrays(cacheKeysDeleting);
        connection.watch(rawKeys);
  
        connection.multi();
        try {
          connection.del(rawKeys);
          byte[] channel = mqttAuthUtil.rawStr(Constants.CACHE_CHANGE_CHANNEL);
          byte[] msg = xxx;
          // 发布/订阅操作
          connection.publish(channel, msg);
          // 提交一组事务
          connection.exec();
        } catch (Exception e) {
          log.error(e.getMessage(), e);
          connection.discard();
          throw new IotApiRuntimeException("redis db transaction consistency failed.");
        }
        return null;
      });

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:32:03  更:2022-03-30 18:34:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:24:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码