如何通过Spring Data redis 2.x的Spring Boot从redis缓存中获取所有密钥



我正在尝试获取Redis支持的Spring Boot缓存中的条目如何通过Spring Boot从Redis缓存中获取所有密钥?使用1.x的Spring Data Redis,当前版本使用DefaultRedisCacheWriter作为本机缓存。

几年前,我在spring-boot 2中就这样做了(所以不确定这是否适用于v1(,但我记得Redis缓存实际上是建立在多个缓存之上的,每个缓存都有一个名称。这通常是在@Configuration类中设置的。然后,每个缓存只是键值对的映射,这就是应用程序将提供的。

这只是这个用例的一个例子(开发人员完全控制缓存(,因为我对用于缓存方法响应的Spring注释方法并不感兴趣。

在我的配置类中,我创建了一个CacheManager对象,该对象配置有我打算在应用程序中使用的各种缓存,这些缓存将包括哈希图中提供的名称及其TTL值。

以下是一些代码(未经测试,因此您可能需要对其进行调整(:

@Autowired
private CacheManager cacheManager;
@Autowired
private RedisTemplate redisTemplate;

public String getValue(String cacheName, String key) {
cacheManager.getCache(cacheName).get(key);
}
public Map<String, String> getCache(String cacheName) {
return redisTemplate
.keys(cacheName+"*")
.parallelStream()
.map(key -> {
Map<String, String> cacheEntries = new HashMap<>();
cacheEntries.put(key, getValue(cacheName, key));
return cacheEntries;
}
)
.collect(Collectors.toList());
}
public void getAllCaches() {
cacheManager.getCacheNames().forEach(cacheName -> {
Map<String, String> cacheObject = getCache(cacheName);
cacheObject.entrySet().stream().peek(entry -> {
System.out.println(entry.getKey() + " = " + entry.getValue());
});
}
}

操作已经很晚了,但万一对任何访问者都有帮助。我有一个类似的要求:

public StringBuffer getAllKeys() {

StringBuffer sb = new StringBuffer();
Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes());
Iterator<byte[]> it = keys.iterator();
while(it.hasNext()){
byte[] data = (byte[])it.next();
sb.append(new String(data, 0, data.length));
}
return sb;
}

最新更新