文章目录
  1. 1. 添加/删除收藏流程优化(Guava+Redis)
    1. 1.1. 一、缓存的使用
    2. 1.2. 二、缓存逻辑
    3. 1.3. 三、二级缓存的好处到底是什么?

添加/删除收藏流程优化(Guava+Redis)

一、缓存的使用

Google的Cache——Guava

  1. 本地缓存开关
  • 创建缓存对象

    1
    private static Cache<String, String> CACHE_SWITCH = CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite(2, TimeUnit.MINUTES).build();
  • 调用缓存中的get方法,当缓存命中时直接返回结果,当不命中时,通过给定的Callable类call()方法返回结果,再缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
String flagKey = B2C_ITEM_FAVORITE_SWITCH + tenantId;
try {
String key = CACHE_SWITCH.get(flagKey, new Callable<String>() {
@Override
public String call() throws Exception {
String flag = cacheClient.get(tenantId, flagKey);
return "true".equals(flag) ? "true" : "";
}
});
return key;
} catch (Exception e) {
return "";
}

Redis缓存

  • 生成Redis的key
1
String redisKey = this.getSkuItemFavorsKey(favoriteItemVo.getTenantId(), favoriteItemVo.getUserId(), favoriteItemVo.getSkuId());
  • 调用cacheClient

    1
    String favor = cacheClient.get(favoriteItemVo.getTenantId(), redisKey);
  • 保存到Redis

    1
    2
    //favorFlag为value,0为expireSecond
    cacheClient.save2Cache(favoriteItemVo.getTenantId(), redisKey, favorFlag, 0);

二、缓存逻辑

  1. 本地缓存作为开关,如果有收藏功能,流程才继续
  2. 查Redis看是否命中缓存,如果命中,收藏结束
  3. (Redis未命中)查询商品是否已经收藏
  4. 如果已经收藏,补充Redis缓存内容
  5. (商品未收藏)启动DAO操作,向数据库中添加信息

三、二级缓存的好处到底是什么?

在缓存到远程Redis的同时,缓存一份到本地进程Cache。使用了这样的二级缓存之后,取缓存的时候会先取本地,本地没有再向redis请求。这样会减少应用服务器<–>缓存服务器redis之间的网络开销。

文章目录
  1. 1. 添加/删除收藏流程优化(Guava+Redis)
    1. 1.1. 一、缓存的使用
    2. 1.2. 二、缓存逻辑
    3. 1.3. 三、二级缓存的好处到底是什么?