`
aa87963014
  • 浏览: 154895 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

spring cache 拓展

 
阅读更多

spring cache 的一大缺陷是无法对集合缓存操作

例如:信箱功能

 

 

@Cacheable(value="mailCache",key="#uid+'list'")
public List<Mail> getMails(Integer uid);

@Cacheable(value = "mailCache", key = "#id")
public Mail getMail(Integer id);

@CacheEvict(value = "mailCache", key = "#mail.uid + 'list'")
@CachePut(value = "mailCache", key = "#mail.id")
public Mail update(Mail mail);

@CacheEvict(value = "mailCache", key = "#mail.uid + 'list'")
public Mail saveMail(Mail mail);

 

 

 

 

这4个接口是一个典型的数据操作接口,get、update、save、findList

 

其中的缓存的处理分为2部分:实体缓存(get、update、save)、集合缓存(findList)

 

1、执行get 方法把Mail实体缓存起来

2、执行getMail方法把Mail集合缓存起来

3、执行update更新Maill实体缓存并且清除Mail的集合缓存

4、执行save清除Mail的集合缓存

 

以上4点的问题所在:

1、save操作无法缓存Mail(因为缺少主键ID,Spring Cache限定了只能从参数中解析key)

2、save、update只能清除Mail的集合缓存,降低了集合缓存的利用率

 

 

为此,拓展Spring AOP Cache 添加annotation:@CacheUpdate、@CacheDelete、@CacheSave

 

1、在@CacheSave注解下,通过方法的返回值生成key,并且把返回值添加至集合Cache中。并且把返回值缓存起来

2、在@CahceUpdate注解下,通过参数生成key,并且把返回值更新至集合Cache中

3、在@CacheDelete注解下,通过参数生成key,并且从集合Cache中移除该实体

4、在@CacheDelete注解下,可以缓存住删除操作

 

以上3点做法的缺陷:

1、@CacheSave不保证顺序

2、@CacheUpdate需要自行考虑是否适用。例如:

 

 

@Cacheable(value="mailCache",key="#uid+'list'")
public List<Mail> getUnReadMails(Integer uid,boolean read){
     return find("select * from Mail where uid = ? and read = ?",uid,read);
}

 之前的getMail方法,参数只有uid,而uid是一个不变值。所以Mail实体update操作不会改变uid

而getUnReadMails多了一个参数read,Mail实体update是有可能update read从而影响getUnreadMails的缓存,导致不一致(这里的getUnreadMails方法就有可能多出/少一个实体,虽然@CacheUpdate有更新到最新的Mail,但是getUnreadMails的集合会多出这个)

 

解决办法是正确的使用@CacheDelete和@CacheUpdate

例如:上面这个例子应该在update方法上面加上一个@CacheDelete用于移除掉符合条件的实体

 

 

具体的代码因为还缺少同步、测试所以暂时不上传

 

 

 

 

分享到:
评论
4 楼 aa87963014 2015-03-27  
ipconfig1 写道

我现在也遇到这样的问题,当缓存的数据被更新或者删除时,缓存没有做相应的动作。
希望能从你的代码中得到参考,谢谢
我的qq是948945618



可以查看我的  freyja框架 https://github.com/121077313/freyja

net,cache,jdbc
3 楼 aa87963014 2015-03-27  
xcw931924821 写道
楼主现在实现了吗?


可以查看我的  freyja框架 https://github.com/121077313/freyja

net,cache,jdbc
2 楼 xcw931924821 2015-03-19  
楼主现在实现了吗?
1 楼 ipconfig1 2013-03-06  

我现在也遇到这样的问题,当缓存的数据被更新或者删除时,缓存没有做相应的动作。
希望能从你的代码中得到参考,谢谢
我的qq是948945618

相关推荐

    springboot 使用spring cache缓存 和 使用fastjson配置redis系列化

    在Spring Boot应用中,Spring Cache是一个强大的工具,用于在应用程序中实现缓存抽象,它可以减少对数据库或远程服务的重复调用,从而提高性能。在本篇文档中,我们将探讨如何使用Spring Cache来缓存数据,并结合...

    SpringCache与redis集成,优雅的缓存解决方案.docx

    SpringCache与Redis集成,优雅的缓存解决方案 SpringCache是一种基于Java的缓存解决方案,它可以与Redis集成,提供了一种优雅的缓存解决方案。在本文中,我们将对SpringCache与Redis集成的优雅缓存解决方案进行详细...

    spring-cache(通过key值更新缓存)

    Spring Cache是一个抽象层,它允许开发者在不关注具体缓存实现的情况下,轻松地在应用程序中添加缓存功能。本篇文章将详细探讨如何通过key值更新Spring Cache中的指定缓存,以及相关的缓存管理策略。 首先,让我们...

    springcache+redis springboot maven

    在这个项目中,"springcache+redis"的整合意味着我们要利用Spring Cache的特性,将缓存存储在Redis中,以提升应用的性能。 首先,Spring Cache提供了`@Cacheable`、`@CacheEvict`和`@Caching`等注解,允许我们在...

    SSM与memcached整合项目Spring Cache

    在本项目中,我们主要探讨的是如何将Spring Cache与memcached进行整合,以提升应用程序的性能和效率。Spring Cache是Spring框架的一部分,它提供了一种抽象的缓存管理机制,可以方便地集成到各种缓存解决方案中,如...

    Redis整合SpringCache实例

    **Redis整合SpringCache实例** 在现代的Web应用中,数据缓存是提高系统性能的关键技术之一。本示例主要探讨如何将开源的内存数据结构存储系统Redis与Spring Cache框架结合,实现高效的分布式缓存解决方案。Redis以...

    spring cache + redis 主从

    此外,还需要掌握如何将Spring Cache与Redis整合,以便在应用中高效使用缓存机制。 一、Redis的主从配置 1. 准备工作: - 操作系统要求:Ubuntu 16.04。 - Redis版本:选择适合的稳定版本,例如redis-4.0.9.tar....

    Spring cache

    ### Spring Cache核心知识点 #### 一、Spring Cache简介与特性 Spring Cache 是 Spring 3.1 版本引入的一项重要特性,它不是一种具体的缓存实现(如 EHCache 或 OSCache),而是一种缓存使用的抽象层。通过在现有...

    springCache

    Spring Cache 是 Spring 框架的一个重要组成部分,它提供了一种在应用程序中统一管理缓存的能力,无需依赖特定的缓存实现,如 Ehcache、Redis 或 Hibernate 二级缓存等。通过 Spring Cache,开发者可以方便地在方法...

    springboot使用springCache和不使用springCache的对比.zip

    在Spring Boot应用中,Spring Cache是一个强大的功能,它允许我们以声明式的方式管理应用程序的缓存,从而提高性能。Spring Cache抽象了缓存提供者的具体实现,如 EhCache、Redis 或 Hazelcast,使得开发者可以方便...

    JAVA编程之spring cache本机缓存应用

    1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项 2、Spring Cache利用了AOP,实现了基于注解的缓存...

    spring cache

    spring cacke spring cacke

    spring-cache-mongodb:基于MongoDB的Spring Cache实现

    Spring Cache是Spring框架提供的一种抽象层,允许开发者轻松地在应用程序中引入缓存机制,而无需关心具体的缓存实现。本项目"spring-cache-mongodb"正是一个针对Spring Cache的实现,它利用MongoDB作为底层的存储...

    spring-cache.xsd+spring-encache.xsd

    标题中的"spring-cache.xsd+spring-encache.xsd"提到了两个XML Schema定义文件,它们是Spring框架中用于缓存管理的配置规范。Spring框架是一个广泛应用的Java企业级应用开发框架,它提供了多种功能,包括但不限于...

    springcache-1.1.0.zip

    《SpringCache深度解析与实战应用》 在Java开发领域,Spring框架因其强大的功能和灵活性而备受推崇。SpringCache是Spring框架的一部分,它提供了一种在应用程序中统一管理和使用缓存的解决方案,使得开发者能够轻松...

    Spring Cache 复合缓存管理器

    在Spring框架中,Spring Cache是用于提供统一的缓存抽象层的一个重要组件,它使得开发者能够在不修改代码的情况下,方便地在应用中引入缓存机制,以提高性能和响应速度。"Spring Cache 复合缓存管理器"指的是通过...

    SpringCache缓存初探共5页.pdf.zip

    SpringCache是Spring框架提供的一种轻量级的缓存解决方案,旨在简化在应用程序中集成缓存的能力,以提高性能和响应速度。在这个“SpringCache缓存初探共5页.pdf.zip”压缩包中,很可能是对SpringCache的基础知识进行...

    redis-string-springcache.zip

    《SpringCache与Redis结合在Mybatis中的应用》 在当今的Web开发中,缓存技术是提高系统性能、减轻数据库压力的重要手段。本教程将详细探讨如何将SpringCache与Redis集成,结合Mybatis进行高效的数据缓存。我们将从...

    redis-cluster和spring集成,基于cache注解

    综上所述,"redis-cluster和spring集成,基于cache注解" 的项目是一个使用 Spring Cache 集成 Redis 集群的实例,旨在通过注解的方式简化缓存管理,提高应用性能。开发者可以通过导入提供的项目,快速了解和实践这一...

Global site tag (gtag.js) - Google Analytics