RestTemplate JedisCluster scan

2,460 阅读1分钟

我的朋友周五碰到一个问题,使用@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