redis模板有查询语言吗?。假设我在redis缓存中有一个这样存储的列表:key value mylist->[1,2,3,4,5]我想得到列表中符合特定条件的值。我们能用redis模板做这个吗?
hwamh0ep1#
您应该使用redis命令sort来填写需求。你可以参考这里。在spring中,使用sortquerybuilderMap此命令。mylist是redis中存储的[1,2,3,4,5]键。定义模板bean
@Bean(name="myRedisTemplate") public RedisTemplate myRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(stringRedisSerializer); return template; }
在服务类中,这个bean是自动连线的
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.query.SortQuery; import org.springframework.data.redis.core.query.SortQueryBuilder; import org.springframework.data.redis.connection.SortParameters; @Service public class MyService{ @Autowired private RedisTemplate myRedisTemplate; public void find(){ // >=3 SortQuery<String> sortQuery = SortQueryBuilder.sort("myList").order(SortParameters.Order.ASC).limit(2,-1).build(); List<String> sortRslt = myRedisTemplate.sort(sortQuery); for(String s : sortRslt) { System.out.print(s+" "); } System.out.print("\n"); // >3 sortQuery = SortQueryBuilder.sort("myList").order(SortParameters.Order.ASC).limit(3,-1).build(); sortRslt = myRedisTemplate.sort(sortQuery); for(String s : sortRslt) { System.out.print(s+" "); } System.out.print("\n"); // >2 && < 5 sortQuery = SortQueryBuilder.sort("myList").order(SortParameters.Order.ASC).limit(2,2).build(); sortRslt = myRedisTemplate.sort(sortQuery); for(String s : sortRslt) { System.out.print(s+" "); } System.out.print("\n"); }
如果是查询字符串,则应将数据类型从list更改为set。然后使用“sscan”命令和match pattern param来执行此操作。例如,在名为myset的集合中有{'、'hello'、'follow'、'five'、'beijing'}。你想找到以f开头的字符串。
ScanOptions options = ScanOptions.scanOptions().match("f*").count(1).build(); try (Cursor<String> cursor = myRedisTemplate.boundSetOps("mySet").scan(options)){ while (cursor.hasNext()) { String value = cursor.next(); System.out.println("value is " + value); } }catch(Exception ex){ }
1条答案
按热度按时间hwamh0ep1#
您应该使用redis命令sort来填写需求。你可以参考这里。在spring中,使用sortquerybuilderMap此命令。mylist是redis中存储的[1,2,3,4,5]键。
定义模板bean
在服务类中,这个bean是自动连线的
如果是查询字符串,则应将数据类型从list更改为set。然后使用“sscan”命令和match pattern param来执行此操作。
例如,在名为myset的集合中有{'、'hello'、'follow'、'five'、'beijing'}。你想找到以f开头的字符串。