跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 不考虑多线程的话,缓存是不是应该这样写
未分類
15 7 月 2020

不考虑多线程的话,缓存是不是应该这样写

不考虑多线程的话,缓存是不是应该这样写

資深大佬 : luxinfl 11

更新操作:先更新 A 信息,然后再从库里查询 A 所有字段,然后放入 redis 缓存??有没有更好的做法?

public void updateMerchantInfo(TbUserInfo tbUserInfo) {          //更新商户信息         tbUserInfoMapper.updateByPrimaryKeySelective(tbUserInfo);          //缓存更新后的数据         TbUserInfo merchantInfo = tbUserInfoMapper.getOneByCondition(tbUserInfo);         String redisKey = ZbpsConstant.RedisConstants.STORE_INFO + merchantInfo.getPlatformCode() + merchantInfo.getPlatformUserCode();         if(merchantInfo != null){             RedisUtils.set(redisKey,GsonUtils.objectToJson(merchantInfo),24*3600);         } } 

大佬有話說 (19)

  • 資深大佬 : wangltfwow

    这样也可以其实,但缓存的操作都统一放到注解上会优雅点

  • 主 資深大佬 : luxinfl

    @wangltfwow 用 spring 自带的注解吗?我看了那几个常用的,没有那种更新后自动加载的吧。

  • 資深大佬 : dallaslu

    @luxinfl CachePut 了解一下

  • 主 資深大佬 : luxinfl

    @dallaslu CachePut 放在 update 方法上面吗?这个也只能缓存入参吧

  • 資深大佬 : myCupOfTea

    我们是自己写的注解 也不难,,

  • 資深大佬 : yidinghe

    缓存 API 的两种封装方式:

    1. 注解封装,自己实现难度很高,一般直接使用 Spring 的 @Cacheable 注解 https://www.baeldung.com/spring-cache-tutorial

    2. LoadingCache 方式,将 if-else 判断封装为参数。下面是一个例子:

    TbUserInfoCache cache = new TbUserInfoCache();
    TbUserInfo info = cache.get(key, (_key) -> tbUserInfoMapper.query(_key));

    这个 get() 方法接受两个参数,如果缓存中存在则直接根据 key 返回缓存内容,否则调用第二个参数查询数据,放入缓存再返回。

  • 資深大佬 : JasonLaw

    我们是使用 canal 统一管理缓存的清除,在调用方法前判断是否存在缓存,没有就获取 MySQL 的数据,然后缓存起来。在方法里面处理缓存相关的逻辑,个人觉得不太好,就像 AOP 一样,不要污染业务逻辑。

  • 主 資深大佬 : luxinfl

    @myCupOfTea 是不难,这不过这样不封装写起来确实挺难看的。

  • 資深大佬 : RedBeanIce

    Spring 的 @Cacheable 个人是不使用的。

    除非很简单,但是没有那个习惯。

  • 資深大佬 : daimubai

    我也是不用 Spring 注解的。
    删除缓存 -> 更新数据库 -> 刷新到缓存,这种解决方法适合并发量不高的情况

  • 資深大佬 : yiyi11

    更新操作只删除缓存,更新缓存由读操作完成。

  • 資深大佬 : dallaslu

    @luxinfl 用 CachePut 的话,可以在方法里 return 要返回的值,然后把 result 写入缓存。或者在 update 方法上用 CacheEvict 注解,另有查询方法用 Cacheable 注解

  • 資深大佬 : 312ybj

    redis 跟 Spring 有集成, 使用注解就行,上的方法就行

  • 資深大佬 : wysnylc

    Sping Cache 有 jdkpoxy 的 this 问题和单 key 无法设置过期时间问题,其他的很不错

  • 資深大佬 : DixCouleur

    歪个,问一下,TbUserInfo 这个变量名的 Tb 前缀是什么意思,在好多地方看见过

  • 資深大佬 : iweisi

    @DixCouleur table 的缩写

  • 主 資深大佬 : luxinfl

    @yiyi11 那读操作每次都要去查数据库?这不合理吧。

  • 資深大佬 : MeowOvO

    @luxinfl 读操作读到缓存就不查数据库了- –

  • 資深大佬 : yiyi11

    @luxinfl 为什么会每次查数据库?第一次读操作产生了缓存,后面就一直读缓存。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具