一、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);
}
}