我的朋友周五碰到一个问题,使用@Cacheable注解整合redis,存了茫茫多数据,但是key没有设置过期,存储对象更换导致redis已存数据反序列化失败报错,报错大致是这个样的
Could not read JSON: Could not resolve type id 'xxxxxx' into a subtype of [simple type, class java.lang.Object]: no such class found\n at [Source: [B@7f0cc8aa; line: 1, column: 11];
别的不说先给个删除缓存的接口吧
redis采用三主三从的集群配置
大致实现如下:
public Set<String> scanAllKeysByPattern(String key) {
return stringRedisTemplate.execute((RedisCallback<Set<String>>) connection -> {
Set<String> keys = Sets.newHashSet();
JedisCluster jedisCluster = (JedisCluster) connection.getNativeConnection();
jedisCluster.getClusterNodes().values().forEach(x->{
Jedis jedis = x.getResource();
if (jedis.info("replication").contains("role:slave")){
ScanParams scanParams = new ScanParams();
scanParams.match(key);
scanParams.count(1000);
ScanResult<String> scan = jedis.scan("0", scanParams);
while (null != scan.getStringCursor()) {
keys.addAll(scan.getResult());
if (!StringUtils.equals("0", scan.getStringCursor())) {
scan = jedis.scan(scan.getStringCursor(), scanParams);
} else {
break;
}
}
}
});
return keys; });}
这里记下一个jedis和lettuce