RedisTemplate实战应用--队列等

一、RedisTemplate队列插入

1、从集合左边插入值
https://blog.csdn.net/weixin_43658899/article/details/121040307

leftPush(K key, V value)
redisTemplate.opsForList().leftPush("leftdatakey","bbbb");

2、从集合左边开始在v1值后边插入新值v2

leftPush(key, v1, v2)
// 在队列中从左向右查找v1  没有不插入 有在v1值左侧插入v2  多个v1取左数第一个v1
redisTemplate.opsForList().leftPush("leftdatakey", "bb", "cc");

3、从右侧插入新值

rightPush(K key, V value)
redisTemplate.opsForList().rightPush("rightdatakey",'bbb');

4、从集合右边边开始在v1值后边插入新值v2

rightPush(key, v1, v2)
// 在队列中从右向左查找v1  没有不插入 有在v1值右侧插入v2  多个v1取右数第一个v1
redisTemplate.opsForList().rightPush("leftdatakey", "bb", "cc");

5、从左边批量插入新值

leftPushAll(K key, Collection values)redisTemplate.opsForList().leftPushAll("key", JSONArray.parseArray(JSON.toJSONString(plist)));

6、从右侧批量插入

rightPushAll(K , V)
redisTemplate.opsForList().leftPushAll("key", JSONArray.parseArray(JSON.toJSONString(plist)));

7、如果key存在,从左边插入新值 否则不插入

redisTemplate.opsForList().leftPushIfPresent("key", "a");

8、如果key存在,在右侧新插入新值 ,否则不插入

redisTemplate.opsForList().rightPushIfPresent("key", "a");

9、将key作为对象插入队列

  IMPlatformResult<Object> result = new IMPlatformResult<>();result.setUserId(71L);result.setGroupId(73L);String key = StrUtil.join(":", RedisKey.IM_USER_GROUP_MEMBER_TIME,appName);// 插入队列redisTemplate.opsForList().rightPush(key, JSONObject.toJSONString(result));

在这里插入图片描述

二、RedisTemplate队列删除

1、默认移除key中最左的一个值

redisTemplate.opsForList().leftPop("key");

2、默认从最右侧移除一个值

redisTemplate.opsForList().rightPop("key");

3、指定过期时间后删除key中最左的一个值

redisTemplate.opsForList().leftPop("key",1,TimeUnit.MINUTES);

4、指定过期时间后删除key中最右的一个值

redisTemplate.opsForList().rightPop("key",1,TimeUnit.MINUTES);

5、移除k1中最右的值,并将移除的值插入k2中最左侧

// k1和k2不是同一个key时,k1右侧移除,k2左侧插入,k2不存在时则新增一个然后在插入
// k1和k2是同一个key时,相当于把最右侧的值移到了最左侧
redisTemplate.opsForList().rightPopAndLeftPush("key1", "key2");

6、指定过期时间后,移除k1中最右的值,并将移除的值插入k2中最左侧

// k1和k2不是同一个key时,k1右侧移除,k2左侧插入,k2不存在时则新增一个然后在插入
// k1和k2是同一个key时,相当于把最右侧的值移到了最左侧
redisTemplate.opsForList().rightPopAndLeftPush("key1", "key2",1,TimeUnit.MINUTES);

7、删除列队中指定位置的key值

// 队列左从0 开始 0/1/2/3
redisTemplate.opsForList().remove(key, 3, "a");

在这里插入图片描述

三、RedisTemplate队列替换

1、在指定坐标位置插入(替换)新值

set(K key, final long index, V value)
index不存在,报错(ERR index out of range)
key不存在,报错(ERR no such key)
从左侧插入
redisTemplate.opsForList().set("key",2,"a");

2、截取下标long1和long2之间的值,包括long1和long2对应的值,并将其保留为key对应的新值

左侧坐标从0开始,右侧从-1开始
当long1超过坐标时(此时与long2无关),都会截取为空,key会被删除
当long1为负时(此时与long2无关),都会截取为空,key会被删除
当long1为正且在下标存在其中,long2为负数时,只要两个没有重叠,相当于去左去右,保留了中间的部分
当long1为正且在下标存在其中,long2为负数时,只要两个交叉重叠,截取为空,如下图redisTemplate.opsForList().trim("key",1,3);

四、RedisTemplate队列查询

1、获取队列中指定下标间的值

redisTemplate.opsForList().range("key", 0, -1);

2、获取队列所有值

0代表左侧开始 -1代表右侧末端
redisTemplate.opsForList().range(key, 0,-1)

3、获取对应key的集合长度

Long size = redisTemplate.opsForList().size("key");

4、获取指定位置的值(index从左往右,从0开始)

String string1 = (String) redisTemplate.opsForList().index("key", 2);

5、取队列集合转为list集合

List<IMPlatformResult> results = new LinkedList<>();log.info("缓存队列 " + redisTemplate.opsForList().range(key, 0,-1));List<Object> jsonArray =  redisTemplate.opsForList().range(key, 0, -1);if(CollectionUtils.isNotEmpty(jsonArray)){for(Object o: jsonArray){IMPlatformResult b  = JSONObject.parseObject(o.toString(),IMPlatformResult.class);results.add(b);}}

在这里插入图片描述

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

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

相关文章

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

Mac安装第三方软件的命令安装方式

场景&#xff1a; 打开终端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一个空格&#xff01;然后打开Finder&#xff08;访达&#xff09;&#xff0c;点击左侧的 应用程序&#xff0c;找到相关应用&#xff0c;拖进终端qua…

(超实用)京东订单数据分析案例-维度下钻

1&#xff0c;数据介绍&#xff0c;字段了解 尽可能熟悉业务&#xff0c;多知道字段的含义&#xff0c;字段字段间的逻辑关系&#xff0c;后期数据分析思路才能更清晰&#xff0c;结果才能更准确 2&#xff0c;订单数据分析基本思路 维度下钻 3&#xff0c;代码实现全流程思路…

华为telnet的两种认证方式

华为telnet的两种认证方式 实验拓扑&#xff1a; 实验要求&#xff1a; 1.采用普通密码认证实现telnet 远程登录机房设备R3 2.采用AAA认证服务方式实现telnet 远程登录机房设备R3 实验步骤&#xff1a; 1.完成基本配置&#xff08;设备接口配置IP&#xff0c;此步骤略过&#…

Facebook的隐私保护挑战:用户数据安全的新时代

在全球范围内&#xff0c;Facebook已经成为了不可忽视的社交媒体巨头&#xff0c;它连接着超过20亿的活跃用户。然而&#xff0c;随着其影响力的不断扩大&#xff0c;关于用户隐私和数据安全的问题也愈加引人关注。本文将深入探讨Facebook面临的隐私保护挑战&#xff0c;以及它…

一个程序员的牢狱生涯(47)学法

星期一 学法 二铺不知道什么时候走到了我的身边,向我说道,这是二铺在我进来号子后主动过来和我说话。 我听到二铺这声突兀的说话后,抬起头。这时我才看到,除了二铺,还有六子、棍子都围在我的身边,看着我。虽然六子和棍子依旧一副‘吊儿郎当’的样子,但我从他们几个的眼神…

解析前端开发中同源策略与配置代理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中&#xff0c;跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

C++高手进阶:Windows 模块加载的艺术与策略

前文我们讲到了怎么不依赖第三库&#xff0c;搭建自己的测试框架 没有看的读者可以通过这个链接自行阅读&#xff1a; &#x1f449;&#x1f449;&#x1f449; 自力更生&#xff1a;0依赖三方库&#xff0c;手把手教你打造专属C测试框架 作为项目开发来说&#xff0c;我们通常…

Leetcode:最长回文子串

题目链接&#xff1a;5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;暴力枚举&#xff09; 解题关键&#xff1a; 1、记录最长回文字串的长度和起始字符的下标 2、判断回文字串的逻辑与整体逻辑分离 3、先确定寻找回文字串的边界范围后从两边向…

解析Java中1000个常用类:CharSequence类,你学会了吗?

在 Java 编程中,字符串操作是最常见的任务之一。为了提供一种灵活且统一的方式来处理不同类型的字符序列,Java 引入了 CharSequence 接口。 通过实现 CharSequence 接口,各种字符序列类可以提供一致的 API,增强了代码的灵活性和可扩展性。 本文将深入探讨 CharSequence 接…

NBM 算法【python,算法,机器学习】

朴素贝叶斯法&#xff08;Naive Bayes model&#xff09;是基于贝叶斯定理与特征条件独立假设的分类方法。 贝叶斯定理 P ( A ∣ B ) P ( B ∣ A ) ∗ P ( A ) P ( B ) P(A|B)\frac{P(B|A) * P(A)}{P(B)} P(A∣B)P(B)P(B∣A)∗P(A)​ 其中A表示分类&#xff0c;B表示属性&…

Unity中的MVC框架

基本概念 MVC全名是Model View Controller 是模型(model)-视图(view)-控制器(controller)的缩写 是一种软件设计规范&#xff0c;用一种业务逻辑、数据、界面显示 分离的方法组织代码 将业务逻辑聚集到一个部件里面&#xff0c;在改进和个性化定制界面及用户交互的同时&#x…

【嵌入式硬件】DRV8874电机驱动

目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…

AI换脸FaceFusion一键云部署指南

大家好&#xff0c;从我开始分享到现在&#xff0c;收到很多朋友的反馈说配置很低玩不了AI。本篇是一个云端部署AI项目的指南&#xff0c;帮助大家在云端进行AI项目的部署。我会从云平台的选择、代码部署、保存镜像几个方面进行详细的介绍。没有代码基础的小白也不用担心&#…

exe4j innosetup

exe4j:jdk: 打包时&#xff1a;需要的文件最好放到单独的一个文件夹下&#xff0c;主机安装32位jdk,exe4j用32位的。 附带jre: jre用32位的&#xff08;jdk下的jre&#xff09;可使用X86,X64.用相对路径。 只打64位时&#xff0c;需要选择32-bit or 64-bit (generate 64…

乐观锁 or 悲观锁 你怎么选?

你有没有听过这样一句话&#xff1a;悲观者正确&#xff0c;乐观者成功​。那么今天我来分享下什么是乐观锁​和悲观锁。 乐观锁和悲观锁有什么区别&#xff0c;它们什么场景会用 乐观锁 乐观锁基于这样的假设&#xff1a;多个事务在同一时间对同一数据对象进行操作的可能性很…

fps游戏中如何将矩阵转换为二维屏幕上的矩形坐标

fps游戏中如何将矩阵转换为二维屏幕上的矩形坐标 matrix[4][4]: 4x4 矩阵&#xff0c;通常用于3D变换&#xff08;如模型视图投影矩阵&#xff09;。 float* location: 一个指向位置坐标的指针&#xff0c;表示要转换的3D位置。 int Window_w, int Window_h: 窗口的宽度和高…

工厂模式详情

一.介绍工厂模式的用途与特点 工厂方法模式是一种创建型设计模式&#xff0c; 其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例化对象的类型。定义工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口&#xff0c;但让实现这个接口的类来决定实例…

Python导出Jira列表

import requests import urllib3 urllib3.disable_warnings() from jira import JIRA import pandas as pd def login_jira(username,password):jira JIRA("https://jira.cn/",basic_auth(username,password))#projectsjira.project(id13)# jqlproject"云链-…

基于强化学习的控制率参数自主寻优

1.介绍 针对控制建模与设计场景中控制参数难以确定的普遍问题&#xff0c;提出了一种基于强化学习的控制律参数自主优化解决方案。该方案以客户设计的控制律模型为基础&#xff0c;根据自定义的控制性能指标&#xff0c;自主搜索并确定最优的、可状态依赖的控制参数组合。 可…