redis中使用pipeline批量执行命令,提升性能

注意:此操作非原子性 
       将一批要执行的redis命令提交到pipeline中,pipeline一次性的将数据发送给服务器,服务器再逐条执行命令。

        redisTemplate中已经提供了对应方法executePipelined()可以直接调用,它支持两个类型的参数:RedisCallback更接近redis原生命令,但是需要自己将键和值都转换为字节码传递过去;SessionCallback对操作进行了封装,可以根据操作不同的数据类型进行转换,方便api使用

代码示例

import lombok.extern.slf4j.Slf4j;
import org.example.service_a.service_a_App;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.*;
import java.nio.charset.StandardCharsets;
import java.util.List;@SpringBootTest(classes={service_a_App.class})
@Slf4j
public class Test_Pipelined {@Autowiredprivate StringRedisTemplate redisTemplate;@Testvoid executePipelined_RedisCallback() {List<Object> datas = redisTemplate.executePipelined(new RedisCallback<Object>() {@Overridepublic Object doInRedis(RedisConnection connection) throws DataAccessException {connection.set("key1".getBytes(StandardCharsets.UTF_8), "value1".getBytes(StandardCharsets.UTF_8));connection.set("key2".getBytes(StandardCharsets.UTF_8), "value2".getBytes(StandardCharsets.UTF_8));connection.set("key3".getBytes(StandardCharsets.UTF_8), "value3".getBytes(StandardCharsets.UTF_8));connection.set("key4".getBytes(StandardCharsets.UTF_8), "value4".getBytes(StandardCharsets.UTF_8));connection.set("key5".getBytes(StandardCharsets.UTF_8), "value5".getBytes(StandardCharsets.UTF_8));connection.set("key6".getBytes(StandardCharsets.UTF_8), "value6".getBytes(StandardCharsets.UTF_8));connection.get("key1".getBytes(StandardCharsets.UTF_8));// 这里必须返回null,在 connection.closePipeline() 时覆盖原来的返回值,所以返回值没有必要设置,设置会报错return null;}});System.out.println("datas = " + datas);}@Testvoid executePipelined_SessionCallback() {List<Object> datas = redisTemplate.executePipelined(new SessionCallback<Object>() {@Overridepublic <K, V> Object execute(RedisOperations<K, V> operations) throws DataAccessException {ValueOperations<String, String> op1 = (ValueOperations<String, String>) operations.opsForValue();op1.set("key7", "value7");op1.set("key8", "value8");op1.get("key2");SetOperations<String, String> op2 = (SetOperations<String, String>) operations.opsForSet();op2.add("set_demo", "value1", "value2", "value3");op2.randomMember("set_demo");return null;}});System.out.println("datas = " + datas);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET实验室预约系统的设计

摘 要 实验室预约系统的设计主要是基于B/S模型&#xff0c;在Windows系统下&#xff0c;运用ASP.NET平台和SQLServer2000数据库实现实验室预约功能。该设计主要实现了实验室的预约和管理功能。预约功能包括老师对实验室信息、实验项目和实验预约情况的查询以及对实验室的预约…

Linux--05---相对路径与绝对路径、终端的认识

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. 相对路径与绝对路径切换到用户家目录&#xff1a;cd ~当前目录&#xff1a;./ 2. 对终端的认识3. 文件的类型颜色表示的文件类型&#xff1a;文件类型和权限的表…

基于深度学习的实时人脸检测与情绪分类

情绪分类 实时人脸检测与情绪分类 Kaggle Competion 数据集 fer2013 中的测试准确率为 66%CK数据集的检验准确率为99.87%情绪分类器模型预测从网络摄像头捕获的实时视频中的平均成本时间为 4~ 10ms 关键技术要点&#xff1a; 实时人脸检测&#xff1a;系统采用了前沿的人脸检…

sql将日期区间拆分为多行

将日期区间拆分为多行 将二维表格中的开始时间结束间用sql拆分成多行连续的时间 源数据 start_dateend_date2023-12-012023-12-03 结果 biz_datestart_dateend_date2023-01-012023-12-012023-12-032023-01-022023-12-012023-12-032023-01-032023-12-012023-12-03 代码 S…

明日周刊-第8期

现在露营的人越来越多了&#xff0c;都是带着帐篷或者遮阳篷聚在一起喝喝茶聊聊天&#xff0c;这是一种很好的放松方式。最近我养了一只金毛&#xff0c;目前两个月大&#xff0c;非常可爱。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、人工智能领域 本周&#xff…

迈威通信首秀成都工博会,迸发品牌强势能

4月26日&#xff0c;在繁花似锦的成都&#xff0c;一场工业界的盛会刚刚落下帷幕。而在这场盛会的璀璨星辰中&#xff0c;迈威通信以其首秀之姿&#xff0c;迸发出耀眼的光芒&#xff0c;强势展现了品牌的实力与魅力。 此次展会&#xff0c;迈威通信以“工业互联赋能新数字化智…

武汉大学计算机复试经验贴(完善版)

一、复试考察内容及比例 1、上机测试&#xff0c;40% 2、口语测试&#xff0c;20% 3、综合面试&#xff0c;40% 二、上机测试 1、考察形式&#xff1a; 时长120分钟&#xff0c;5道题目&#xff0c;编译环境是DevCpp&#xff0c;题目难度比PAT乙级略低&#xff0c;人工打分…

Go 语言函数

函数是基本的代码块&#xff0c;用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能&#xff0c;逻辑上每个函数执行的是指定的任务。 函数声明告诉了编译器函数的名称&#xff0c;返回类型&#xff0c;和参数。 Go 语言标准库提供了多种可动…

C语言求 MD5 值

MD5值常被用于验证数据的完整性&#xff0c;嵌入式开发时经常用到。md5sum命令可以求MD5码&#xff0c;下面介绍如何用C语言实现MD5功能。 一、求字符串MD5值 1、md5sum命令 $ echo -n "12345678" | md5sum //获取"12345678"字符串的md5值 结果&…

偏测试技术面试,高频面试题分享

一.介绍下你们公司产品的后端模块? 以电商微服务架构示例&#xff1a; 用户服务 (User Service)&#xff1a; 负责用户注册、登录、个人信息管理等功能。存储用户数据&#xff0c;如用户名、密码、个人资料等。商品服务 (Product Service)&#xff1a; 管理商品信息&#xf…

2023 网络工程师软考-真题解析(1)

在某台主机上无法访问域名为wwww.aaa.cn 的网站&#xff0c;而局域网中的其他主机可正常访问&#xff0c;在该主机上执行ping命令时有如下所示的信息: C:\>ping www.aaa.cn Pinging www.aaa.cn [202.114.10.56lwith 32 bytes of data. Reply from 202.114.10.56:Destinat…

react 学习笔记二:ref、状态、继承

基础知识 1、ref 创建变量时&#xff0c;需要运用到username React.createRef()&#xff0c;并将其绑定到对应的节点。在使用时需要获取当前的节点&#xff1b; 注意&#xff1a;vue直接使用里面的值&#xff0c;不需要再用this。 2、状态 组件描述某种显示情况的数据&#…

python绘制三维散点图

在Python中&#xff0c;我们通常使用matplotlib库的mplot3d工具包来绘制三维散点图。以下是一个简单的示例&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建一些随机数据 np.random.seed(0) x np.…

VCSA6.7重置root密码

VCSA6.7重置root密码 1、登录VCSA所运行的ESXI主机 2、打开VCSA虚拟机Web控制台&#xff0c;先拍摄一个快照&#xff0c;然后重启虚拟机&#xff0c;在如下界面按"e" 3、找到linux开头的段落&#xff0c;在末尾追加rw init/bin/bash; 4、输入完成后&#xff0c;按&…

常用的网站和软件

编程社区 Stack Overflow - 全球最大的编程问题解答社区&#xff0c;涵盖各种编程语言和技术。网址&#xff1a;https://stackoverflow.comCSDN - 主要面向中国开发者的技术社区&#xff0c;提供技术文章、论坛帖子和博客。网址&#xff1a;https://www.csdn.net 开发软件 J…

多传感器标定、数据融合与状态估计导读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言1、机器人/无人驾驶常用传感器模型、选型与安装2、传感器数据获取、数据采集方案3、自动驾驶相关传感器原理及标定4、卡尔尔曼滤波(KF)、扩展卡尔曼…

LPDDR5和LPDDR5X区别

发布时间 LPDDR5和LPDDR5X的发布时间如下&#xff1a; LPDDR5的具体发布时间没有直接提及&#xff0c;但它在市场上的应用早于LPDDR5X。LPDDR5作为LPDDR4(X)的继任者&#xff0c;其规范发布和商用化大致发生在2019年至2020年间&#xff0c;具体技术细节和产品商用则依据各制造…

开发使用Git的实践操作

程序员在使用Git进行代码管理时&#xff0c;涉及到许多常用的Git命令和功能&#xff0c;以下是详细的解释和分析&#xff1a; 程序员常用的Git命令 git init - 初始化一个新的Git仓库。这是开始使用Git跟踪项目的第一步。git clone - 复制一个远程仓库到本地&#xff0c;这样…

Docker之安装部署

本次部署使用openEuler操作系统&#xff1a; 方式一&#xff1a;使用yum安装(openEuler源中有自带的docker18.09.0版本) [rootnode1 ~]# yum install docker -y [rootnode1 ~]# docker version Client: Version: 18.09.0 EulerVersion: 18.09.0.332 API ver…

k8s的PV/PVC详解以及使用范例

PV和PVC是什么 在 Kubernetes (k8s) 中&#xff0c;Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 是管理存储资源的两个重要概念。它们抽象了存储细节&#xff0c;允许用户在不了解底层存储细节的情况下使用存储资源。 Persistent Volume (PV)&#xff1a; PV …