zoukankan      html  css  js  c++  java
  • cache业务

    最近一个业务为三个表的list数据分别展示
    以及根据三个表来渲染的图表
    分别有各种查询
    数据是excel导入
    想加入缓存处理
    构思解决:
    第一种:在导入excel后,不管哪个表,完成后调用@CacheEvit,指定对应缓存清除,
    这样@Cacheable无法命中,再走缓存查询并再次缓存。
    问题:比如图表有3个接口,而且查询时,要根据时间,各种id和类别进行查询,这样的话
    数据缓存不会一致。
    比如第次用类别A查询,第二次类别B,在Cacheable上指定key使用了这个#p0参数
    那么redis会有两个key对应,
    处理:当导入新excel数据,将图表的key全部清空

    第二种:查询图表有时间区间参数,如果导入的数据不在这个时间范围内,对应的图表key不予删除
    因为那个查询的区间并不代表最新导入数据
    所以就没必要进行清理
    唯独当指定的时间区间还囊括了新导入数据时间时,图表缓存key予以清理。
    处理:如上

    第三种:查询图表有根据数据内其它字段区间进行查询的,就要在导入数据后获取到本次数据中,
    在这个字段区间内的min和max值,对应图表的key,予以删除或保留。
    处理:如上,或直接删除图表key(简单)

    第四种:开启mybatis二级缓存,不使用redis
    https://www.cnblogs.com/happyflyingpig/p/7739749.html
    https://www.cnblogs.com/ukzq/p/15588398.html 最终采取了这个做法(单体)
    处理:这种简单易行,但不是那么强烈的缓存形式,有周期性时间性等待。

    第五种:对图表key再精细化处理,比如几个参数分别对应一个字符串的前缀,
    在判定是否有该时间区间或类型或id时,能更快地进行缓存的更新。
    处理:导出数据后,对应数据对应图表key的几个地方都进行相应处理,
    比如A类型,B类型,是导入A类型,则只清理类似type-A的key,
    B类型,只清理类似type-B的key。
    创建时间,这个一般在数据导入就固定了,而且越新导入的数据时间越新,
    只要看新导入数据是否囊括在之前的创建时间类似createTimeKey-2000-2002
    更新时间,这个不一定,但是起初的更新时间和createTime是一致的,除非后期处理数据才进行变更,
    这个也可以看更新时间类似是否在updateTimeKey-2000-2003之间
    比如数据是2021年导入的(笔记时间),那么这个updateTimeKey就不应进行删除。逻辑同创建时间。
    最后一个如数据内的时间,不同于创建和更新时间,比如用户的身份证上的出生时间,
    这个时间区间对应在idNumberKey-2000-2004之间的,才进行该key的删除。
    如导入的excel大批量的数据中,身份证从1960年的到1999年的不等,
    但是整体不包含在idNumberKey的下界,不予清理,
    但如果导入数据中身份号最低最大分别为1980-2003,那么对应的2003已在2000-2004之间
    所以该图表key予以删除。
    在一个如根据部门ids作为了key,那么在作为key前要先排序好,
    如果导入数据部门id就算有一个在里面,也要进行相应的图表的key的删除。当然,这个删除,
    整体要看先看时间区间。
    处理:如果仅是有时间区间(但包含创建/更新/身份证时间的区分),部门ids两种查询类别
    作为图表key,那么首先要先查相应导入数据时间,是否匹配上,如果匹配上,再看对应部门id
    是否包含,如果包含,则进行图表key的清理,让Cacheable重新获取缓存。
    如果时间区间都无法匹配,则保留图表key即可,部门ids无需判定。
    (开始)->
    【导入新数据】-> 【拿去时间及部门特征结果】->【对比现有缓存cacheNames对应的key的时间和部门特征】
    -> <<判定时间区间>> ->
    [key不包含时间特征]-> 【不清理key】-> (结束)
    [key包含时间特征]->
    -> <<判定部门特征>> ->
    [key不包含部门特征]-> 【不清理key】-> (结束)
    [key包含部门特征]-> 【清理key】-> (结束)

  • 相关阅读:
    LeetCode (160) Intersection of Two Linked Lists
    cmake命令 安装、用法简介
    算法——回文解密,判断一个数组是否为回文
    发现一个好用的播放插件---ckplayer
    阿里云ESC上的Ubuntu图形界面的安装
    tomcat 启动本地项目,但是报错的是另一个项目错误导致的tomcat启动失败
    发现一个有趣的时间控件
    Comparator 排序优先级
    项目Exception,项目前面有红色的小叉×
    日常问题,JasperException
  • 原文地址:https://www.cnblogs.com/ukzq/p/15574171.html
Copyright © 2011-2022 走看看