RedisTemplate实战应用--队列等

一、RedisTemplate队列插入

1、从集合左边插入值

https://blog.csdn.net/weixin_43658899/article/details/121040307

css 复制代码
leftPush(K key, V value)
redisTemplate.opsForList().leftPush("leftdatakey","bbbb");

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

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

3、从右侧插入新值

css 复制代码
rightPush(K key, V value)
redisTemplate.opsForList().rightPush("rightdatakey",'bbb');

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

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

5、从左边批量插入新值

css 复制代码
leftPushAll(K key, Collection values)

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

6、从右侧批量插入

css 复制代码
rightPushAll(K , V)
redisTemplate.opsForList().leftPushAll("key", JSONArray.parseArray(JSON.toJSONString(plist)));

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

css 复制代码
redisTemplate.opsForList().leftPushIfPresent("key", "a");

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

css 复制代码
redisTemplate.opsForList().rightPushIfPresent("key", "a");

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

css 复制代码
  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中最左的一个值

css 复制代码
redisTemplate.opsForList().leftPop("key");

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

css 复制代码
redisTemplate.opsForList().rightPop("key");

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

css 复制代码
redisTemplate.opsForList().leftPop("key",1,TimeUnit.MINUTES);

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

css 复制代码
redisTemplate.opsForList().rightPop("key",1,TimeUnit.MINUTES);

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

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

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

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

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

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

三、RedisTemplate队列替换

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

css 复制代码
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对应的新值

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

redisTemplate.opsForList().trim("key",1,3);

四、RedisTemplate队列查询

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

css 复制代码
redisTemplate.opsForList().range("key", 0, -1);

2、获取队列所有值

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

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

css 复制代码
Long size = redisTemplate.opsForList().size("key");

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

css 复制代码
String string1 = (String) redisTemplate.opsForList().index("key", 2);

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

css 复制代码
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);
            }
        }
相关推荐
尘浮生5 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
郑祎亦28 分钟前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
不是二师兄的八戒28 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生40 分钟前
Easyexcel(2-文件读取)
java·excel
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study2 小时前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data2 小时前
二叉树oj题解析
java·数据结构
牙牙7052 小时前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
paopaokaka_luck2 小时前
[371]基于springboot的高校实习管理系统
java·spring boot·后端