美文网首页
分布式二级缓存组件

分布式二级缓存组件

作者: 梦想又照进现实 | 来源:发表于2023-04-24 21:55 被阅读0次

    简介

    分布式二级缓存组件,本地缓存支持二级,远端控制协调版本,可避免集中式缓存的IO开销,尤其是在异地部署同一个应用时候,能避免跨区域通信,提高缓存时效和可用性;

    适用场景

    1、当参数(业务参数、系统参数)需要被多个应用实例进行缓存到本地时候,可以使用本组件;
    2、单个应用云上分布式部署时候,需要保证各个实例缓存的参数都要最新,可以使用本组件;

    架构设计

    关键设计

    数据结构:Map<String, List<Map<String, Object>>>,两个String分别存储表名和字段名。
    版本号:用于解决多个工程之间,数据一致性问题。
    Cache:控制手动或定时刷新缓存;提供接口,通过表名获取数据;提供接口,通过字段过滤数据;提供二级缓存,数据查询后存入二级缓存,下次查询更加快捷。
    Redis:用于和Redis数据库交互,获取或更新版本信息;提供锁机制,保证多个工程之间更新版本信息时互不影响。
    acc-params-query:提供数据查询接口,数据结构Map<String, List<Map<String, Object>>>


    xxx.png

    交互方式

    第一步:当数据库数据更新时,需通知Redis数据库,更新远程版本号(使用唯一的key值,一般使用工程名、系统名、类型等拼接组成)。
    第二步:缓存组件定时(或手动)向Redis数据库获取远程版本号,和本地版本号进行对比,若版本相同,则说明本地数据为最新数据,无需更新;若本地版本与远程版本不同,则需更新本地数据,缓存会向数据请求接口发送获取数据请求,返回最新数据存入本地缓存,同时清空二级缓存。
    第三步:主工程(父容器)向缓存组件发起查询请求后,缓存组件根据查询条件(表名、字段名等)首先到二级缓存查询对应数据,如果有相应的数据,则直接返回;若无相应数据,则到本地缓存中获取相应数据后返回,并将该数据写入二级缓存。

    Maven依赖

     <!--依赖缓存组件,加载缓存数据-->
     <dependency>
        <groupId>com.xxx.cache</groupId>
        <artifactId>tw-cache</artifactId>
        <version>1.0.0-SNAPSHOT</version>
     </dependency>
    

    配置信息

    # 产品名称  
    zcRedis.key.productCode=xxx
    # 系统名称  
    zcRedis.key.systemName=cache
    # 系统名(用于区分使用缓存组件的各个系统) 
    cache.system.name=xxx
    # accParams
    # 查询服务地址,通过系统名获取对应若干张表数据
    cache.paramServer.url=http://xxx/xxx/queryCashData
    # 定时任务
    cache.refresh.job.schedule=0 0/5 * * * ?
    
    

    接口

    常用接口有:
    1、获取当前类型的所有参数
    List<T> getParamList(Class<T> paramClass)
    2、根据条件返回单个对象
    T getParamObject(Class<T> paramClass, Map<String, Object> filters)
    3、获取当前类型的所有参数,优先走本地二级缓存
    List<T> getParamList(Class<T> paramClass, Map<String, Object> filters)

    使用示例

    List<Map<String,Object>> tableData = ParamsCache.getParamList(GlobalKeyEnum.T_OUTMAP_INF.getTableName(),hashMap);
    ....
    

    相关文章

      网友评论

          本文标题:分布式二级缓存组件

          本文链接:https://www.haomeiwen.com/subject/qdkpjdtx.html