我们正在使用redis缓存以及我们存储的数据样本类型
LLPUSH mylist "abc" "xyx" "awe" "wwqw"
现在我想从spring项目中搜索redis,例如我的spring项目类从一些外部客户端接收一个元素“abc”,如何按值搜索redis列表,如下所示
ListOperations<String, Object> listOperations= redisTemplate.opsForList();
listOperations.get(key,"abc") , returns abc
或至少我想确认此元素存在于redis缓存列表中
listOperations.contains(key,"abc") returns either true or false , based value present in the list or not
有人可以建议这种类型的客户端lib存在于java端的redis,我们可以在spring boot项目中使用
答案 0 :(得分:1)
Redis列表实现为链接列表。
LRANGE
获取列表的所有元素并迭代才能找到特定元素。如果列表中不包含多个条目且订单不包含
相关的,我们可以使用LREM
删除特定元素和if
列表大小存在差异,元素存在。后来了
如果存在,则可以重新插入已删除的元素。
Long initialSize = redisTemplate.opsForList().size(key);
redisTemplate.opsForList().remove(key,0, value);
Long finalSize = redisTemplate.opsForList().size(key);
if(finalSize - initialSize > 0){
redisTemplate.opsForList().rightPush(key,value);
return true; //Element exists
}
return false; //Does not exist
考虑进行操作atomic。
您可以从here获取其他spring redis列表操作。
答案 1 :(得分:1)
您可以使用具有sismember(keyForSet,valueToSearch)
的Redis Set按值搜索元素,其中O(1)复杂度是有效的,为了与redisTemplate一起使用,您可以使用redisTemplate.opsForSet.isMember(keyForSet,valueToSearch)
插入时可以插入列表 jedis.sadd(keyForSet,myList.toArray(new String [myList.size()])); 或者使用redisTemplate
redisTemplate.opsForSet.add(keyForSet, myList.toArray(new String[myList.size()]));
答案 2 :(得分:-1)
您可以使用Redisson Redis客户端和基于Redis的List对象轻松完成此操作:
List<String> list = redisson.getList("myList");
list.add("aaa");
list.add("bbb");
list.add("ccc");
// returns true
list.contains("aaa");