• Spring Cache 自定义注解


    1.在使用spring cache注解如cacheable、cacheevict、cacheput过程中有一些问题;

    比如,我们在查到一个list后,可以将list缓存到一个键对应的区域里;当新增、修改、删除一个元素的时候,其实我们

    需要的是只将cache的list里的元素变动就可以了,但因为只有一个键,没法做到只更改一个元素,只能整个list重新加载,

    对性能还是有一定的影响;

    2.对spring扩展,增加自定义cache,

    @MyCacheDelete:当删除元素后,从cache里取出该key的缓存list,从list里删除指定id的元素,再将list写入缓存;

    @MyCachePut :当新增修改元素后,从cache里找到该key对应的list,从list里找到修改的元素删除(新增不需要删除),然后将修改后的记录写入list,再将list写入缓存;

    3.具体的步骤:

    1)定义注解@MyCacheDelete,@MyCachePut

    2)定义注解拦截器

    clip_image001[4]

    该拦截器,其中最重要的一点就是解析key值,因为在缓存查询数据时我们还是使用cacheable,所以定义的key也要和cacheable一致;

    @MyCachePut( key="'"+ ConstUtil.C_CACHE_KEY_PRE+"BasicData'+#info.parentId",value = ConstUtil.C_CACHE_NAME, pid = "recid")

    上面info.parentId的值, 是spring表达式运行时解析出的;所以自定义拦截器里也要和spring框架一样算出key值;

    这里重新实现了CacheAnnotationParser,让它解析自定义的注解,这样,可以调用spring框架里的generateKey;

    clip_image002

    3)有了cache的key,后面就简单了,就是从cache里的取数据、修改数据、更新缓存操作了;

    虽然这种方式,解决了单条数据影响cache的list重新加载问题;但我们在设计缓存时,还是要尽量通过细分的业务去缓存对应的数据,不要让

    缓存的list过大,过大的list对于cache的存取、序列化反序列化都有性能的影响;

  • 相关阅读:
    Oracle9i数据库移动过程
    基于索引的SQL语句优化之降龙十八掌
    activex发布步骤
    用ftpsupport进行ftp上传
    周五晚上看了变形金刚
    故宫游
    UTF8转GB2312
    跨数据库的视图【自己留着看】
    数学之美 - 布隆过滤器(Bloom Filter)【转】
    搜索引擎优化SEO的ppt讲义
  • 原文地址:https://www.cnblogs.com/sl21100/p/5520455.html
Copyright © 2020-2023  润新知