簡體   English   中英

如何通過 Spring 啟動 Spring 數據從 redis 緩存中獲取所有密鑰?

[英]How do I get all the keys from a redis cache via Spring Boot with Spring Data Redis 2.x?

I am trying to get the entries in a Spring Boot Cache backed by Redis How do I get all the keys from a redis cache via Spring Boot? 使用 1.x 的 Spring-Data-Redis 並且當前版本使用DefaultRedisCacheWriter作為本機緩存。

幾年前我用 spring boot 2 做到了這一點(所以不確定這是否適用於 v1),但我記得 Redis 緩存實際上是建立在多個緩存之上的,每個緩存都有一個名稱。 這通常在@Configuration class 中設置。 然后,每個緩存只是鍵值對的 map,這是應用程序將提供的。

這只是這個用例的一個示例(開發人員完全控制緩存),因為我對用於緩存方法響應的 Spring 注釋方法並不真正感興趣。

在我的配置 class 中,我創建了一個CacheManager object,它配置了我打算在我的應用程序中使用的各種緩存,這些緩存將包括 ZDDA7806A4847EC61B5940C2623A5AABD 中提供的名稱及其 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());
    });
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM