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);
            }
        }
相关推荐
程序猿乐锅3 小时前
从0-1一文详解RabbitMQ
java·分布式·后端·中间件·rabbitmq·ruby
考虑考虑6 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长6 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
for_ever_love__7 小时前
MySQL 主从复制讲透:binlog 原理、搭建步骤与读写分离
java·数据库·mysql·binlog·读写分离·原理·主从复制
ly76898 小时前
Redis 内存优化与性能调优:编码转换、内存碎片与慢查询的定位链路
redis·性能调优·内存优化·慢查询·编码转换
小π军9 小时前
操作系统面试题
java·linux·服务器
倔强的石头1069 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Shaoshing10 小时前
ThreadLocal
java·jvm·threadlocal
写后端的胖头鱼10 小时前
一文详解CAS
java·jvm·spring·cas·乐观锁·自旋