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);
            }
        }
相关推荐
元Y亨H5 小时前
微服务架构核心组件、职责与交互全解析
spring cloud
李慕婉学姐6 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆7 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin8 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20058 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉8 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国8 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882489 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈9 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_999 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc