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);
            }
        }
相关推荐
摇滚侠21 小时前
Redis 秒杀功能 超卖问题 一人一单问题 分布式锁 精彩!精彩!
redis·分布式·bootstrap
庞轩px21 小时前
第七篇:Spring扩展点——如何优雅地介入Bean的创建流程
java·后端·spring·bean·aware·扩展点
tongluowan0071 天前
一个请求在Spring MVC 中是怎么流转的
java·spring·mvc
夜郎king1 天前
Spring AI 对接大模型开发易错点总结与实战解决办法
java·人工智能·spring
oradh1 天前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
组合缺一1 天前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring·ai·langchain·llm·solon
c++之路1 天前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌1 天前
Java——接口的细节
java·开发语言·算法
阿拉金alakin1 天前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on1 天前
Java—方 法
java·开发语言·算法·青少年编程