更新缓存操作

需求分析:

问题描述:

并发操作redis,发现redis连接数增长异常(呈直线上升)

原因分析:

发现redis更新时,没有处理好之前的连接缓存,而是直接替换,导致旧的缓存没有及时删除。

修改方案:

1.更新时,先关闭之前的连接,再替换

2.只更新redis配置修改的连接

update:

之前的连接:

比较(ip,password,timeOut)的hash,不一致则更新。

dele:差集 old-new=dele

add:差集 new-old=add

3.考虑连接正在使用的情况

操作连接池,先关闭连接,再更新配置,创建新连接

 

new 

需求分析:

问题描述:

​    并发操作redis,发现redis连接数增长异常(呈直线上升)

原因分析:

​    发现redis更新时,没有处理好之前的连接缓存,而是直接替换,导致旧的缓存没有及时删除。

修改方案:

​    1.更新时,先关闭之前的连接,再替换

​    2.只更新redis配置修改的连接

​            update: 

​                    之前的连接:

​                    比较(ip,password,timeOut)的hash,不一致则更新。

​            dele:差集 old-new=dele

​            add:差集 new-old=add

​    3.考虑连接正在使用的情况

​            操作连接池,先关闭连接,再更新配置,创建新连接

代码实现

~~~java
Map oldServiceMap;
Map nowConfigHashMap = new HashMap();
for(){
    // 遍历获取原始数据
    // 生成(ip,password,timeOut)的hash
    nowConfigHashMap.put(toHash(ip,password,timeOut),obj);
    //
}
// 历史数据处理
    1.确定key([url+password+timeOut])
    2.如何保证更新过度
        
        
// 集合操作,过滤掉不需要更新的数据
oldServiceMap.getKey();
nowConfigHashMap.getKey();

update: 
dele:差集 old-new=dele
    nowConfigHashMap.getKey().stream().filter(item -> !oldServiceMap.getKey().stream().map(e -> e.getGoodsId()).collect(
    Collectors.toList()).contains(item.getGoodsId())).collect(Collectors.toList());

add:差集 new-old=add
    
~~~



~~~java
public static List<T> aa(List<T> list1, List<T> list2) {
        Set<T> set2 = new HashSet<>(list2);
        List<T> result = new ArrayList<>();
        list1.stream().forEach(e -> {
            if (!set2.contains(e)) {
                result.add(e);
            }
        });
        return result;
    }
~~~

 

posted on 2023-05-11 23:39  longlinji  阅读(28)  评论(0编辑  收藏  举报