如何解决实施 Guava 缓存作为 EHCache 的后备
我想在我的 springboot 应用程序中实现 Guava 缓存作为 EHcache 2.10 的后备。如果 EH 缓存以某种方式失败或崩溃,系统必须回退到 Guava 缓存并获得结果。请指导我如何操作。
解决方法
在这种情况下,可以使用**内置**注释,以便您可以自行检查和构建所有逻辑。
您可以随时定义 DAO(数据访问对象)层,这将与 EHCahe 和 Guava 缓存进行通信。
interface UserDao{
Optional<User> findById(int id);
...
}
实现 UserDao
class UserDaoImpl implements UserDao {
@Autowired @Qualifier("ehCacheManager") private CacheManager ehCacheManager;
@Autowired @Qualifier("cacheManager") private CacheManager cacheManager;
@Autowired UserRepository userRepository;
private Cache ehCache;
private Cache guavaCache;
@PostConstruct
public void init(){
ehCache = ehCacheManager.get("userCache");
guavaCache = cacheManager.get("userCache");
}
@Override
public Optional<User> findById(int id){
User user = null;
boolean ehCacheError;
try{
user = ehCache.get(id,User.class);
} catch (Exception e){
user = guavaCache.get(id,User.class);
ehCacheError = true;
}
if( user == null ){
// query db to fetch User as all cache has miss
Optional<User> optUser = userRepository.findById( id );
if(optUser. isPresent()){
user = optUser.get();
}
// cache miss
if(!ehCacheError){
ehCache.put( id,user) ;
guavaCache.put(id,user);
}
}
return Optional.ofNullable(user);
}
}
一个奇怪的问题,你为什么要逆向,你应该总是执行Guava缓存查找,如果有缓存未命中,你应该咨询EHCache,在这里你应该添加一个失败案例来查询数据库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。