摘要
最近接手的代码中遇到几个缓存的问题,存在一些设计原则的问题,这里总结一下,希望可以对你有帮助
问题
问题1: 店铺数据的获取,将用户关注的数据放在店铺信息一起返回
对外提供的接口
List getPageShop(final Query query,final Boolean cache);
返回的店铺信息
public class Shop {
public static final long DEFAULT_PRIORITY = 10L;
/**
* 唯一标识
*/
private Long id;
//省略了店铺其他信息
/**
* 用户关注
*/
private ShopAttention attention;
}
当调用方设置cache为true时,因为有缓存的存在,获取不到用户是否关注的数据。
问题2: 统计店铺的被关注数导致的慢SQL,导致数据库cpu飙高,影响到了整个应用
SQL
SELECT shop_id, count(user_Id) as attentionNumber
FROM shop_attention
WHERE shop_id IN
#{shopId}
GROUP BY shopId
这两种代码的写法都是基于一个基准
不同的地方的缓存策略不一样,比如我更新的地方,查找数据时不能缓存,页面展示的查找的地方需要缓存。 既然服务提供方不知道该不该缓存,那就不管了&#x