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流水线与事务 -> 正文阅读

[大数据]Redis流水线与事务

一、流水线

1、流水线简介

Redis提供的流水线允许客户端把任意多条Redis命令请求打包在一起,然后一次性地将它们全部发送给服务器,而服务器则会在流水线包含的所有命令请求都处理完毕之后,一次性地将它们的执行结果全部返回给客户端。使得将执行多个命令所需的网络通信次数从原来的N次降低为1次,并大幅度地减少程序在网络通信方面耗费的时间,程序的执行效率得到显著的提升。但这个特性还需要客户端支持才能使用。

虽然Redis服务器并不会限制客户端在流水线中包含的命令数量,但是却会为客户端的输入缓冲区设置默认值为1GB的体积上限:当客户端发送的数据量超过这一限制时,Redis服务器将强制关闭该客户端。因此用户在使用流水线特性时,最好不要一下把大量命令或者一些体积非常庞大的命令放到同一个流水线中执行,以免触碰到Redis的这一限制。

2、Java操作流水线

List<Object> results = stringRedisTemplate.executePipelined(
  new RedisCallback<Object>() {
    public Object doInRedis(RedisConnection connection) throws DataAccessException {
      StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
      for(int i=0; i< batchSize; i++) {
      // 具体的每条命令
        stringRedisConn.rPop("myqueue");
      }
    return null;
  }
});

二、事务

事务可以将多个命令打包一起来执行,当事务成功执行时,事务中包含的所有命令都会被执行,相反,如果事务中有一条命令没有执行成功,那么它所包含的所有命令都不会被执行。

  • 开启事务
    开启事务需通过MULTI命令,这个命令在成功执行之后将返回OK。当一个客户端执行MULTI命令之后,它就进入了事务模式,这时用户输入的所有数据操作命令都不会立即执行,而是会按顺序放入一个事务队列中,等待事务执行时再统一执行。
    在这里插入图片描述

  • 执行事务
    在使用MULTI命令开启事务并将多个命令放入事务队列中后,就可以通过EXEC命令来执行事务。
    在这里插入图片描述
    当事务成功执行时,EXEC命令将返回一个列表作为结果,这个列表会按照命令的入队顺序依次包含各个命令的执行结果。

  • 放弃事务
    DISCARD命令可在开启事务之后将当前事务抛弃,DISCARD命令会清空事务队列中已有的所有命令,并让客户端退出事务模式,最后返回OK表示事务已被取消。

  • 对键进行监听
    通过WATCH命令可使服务器对一个或多个数据库键进行监听,如果在客户端尝试执行事务之前,这些键的值发生了变化,那么服务器将拒绝执行客户端发送的事务,并向它返回一个空值。
    语法格式:WATCH key1 key2…

通过同时使用WATCH命令和Redis事务,可以构建出一种针对被监听键的乐观锁机制,确保事务只会在被监听键没有发生任何变化的情况下执行,从而保证事务对被监听键的所有修改都是安全、正确和有效的。

  • 取消对键的监听
    客户端可以通过执行UNWATCH命令,取消对所有键的监听。使用EXEC命令执行事务和使用DISCARD命令取消事务,同样会导致客户端撤销对所有键的监视,因为这两个命令在执行之后都会隐式地调用UNWATCH命令。

三、流水线与事务

Redis的事务在EXEC命令执行之前并不会产生实际效果,所以很多Redis客户端都会使用流水线去包裹事务命令,并将入队的命令缓存在本地,等到用户输入EXEC命令之后,再将所有事务命令通过流水线一并发送至服务器,这样客户端在执行事务时就可以达到“打包发送,打包执行”的最优效果。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:54:36  更:2021-10-07 13:57:05 
 
开发: 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/23 23:54:09-

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