使用场景:
当后台数据更新需要通知前端同步更新缓存时,可以通过在接口拦截器里在response header里添加一个属性来通知前端。
处理逻辑:
1.管理用户缓存状态。
import java.util.HashMap;
import java.util.Map;
/**
* 管理前端用户是否需要清除缓存的状态
*/
public class CacheUtil {
private static Map<String,Boolean> cacheMap = new HashMap<>();
/**
* 新增/修改用户缓存状态
* @param username
*/
public static void putStatus(String username,boolean b){
cacheMap.put(username,b);
}
/**
* 获取用户缓存状态
* @param username
* @return
*/
public static Boolean getStatus(String username) {
Boolean b = cacheMap.get(username);
if (b==null) {
return false;
}
return b;
}
/**
* 获取登录用户缓存状态
* @return
*/
public static Boolean getStatus() {
String username = UserUtil.getLoginUser().getUsername();
Boolean cacheStatus = cacheMap.get(username);
boolean b = false;
if (cacheStatus!=null) {
b=cacheStatus;
}
putStatus(username,false);
return b;
}
/**
* 设置登录用户的缓存状态
*/
public static void setStatus(boolean b){
for (String username:cacheMap.keySet()){
cacheMap.put(username,b);
}
}
}
2.在拦截器里添加状态。
httpResponse.setHeader("Access-Control-Expose-Headers", "cache-status");//【设置该属性前端可见】
httpResponse.setHeader("cache-status", CacheUtil.getStatus().toString());//【设置属性】
3.在数据变更后修改缓存状态。
总结
当后台数据有变更时,会通过接口的response header里的状态通知前端状态