当前位置: 首页 > 知识库问答 >
问题:

Spring Boot缓存Builder无法解决任何缓存

翁硕
2023-03-14

根据link,在spring boot中使用缓存的最简单配置是使用CacheManager(缓存映射将在这个类中初始化):

@Configuration
@EnableCaching
public class CacheService extends CachingConfigurerSupport {
    @Bean
    public CacheManager concurrentMapCacheManager() {
        ConcurrentMapCacheManager cmcm = new ConcurrentMapCacheManager();
        return cmcm;
    }

    @Bean
    @Primary
    public CacheManager guavaCacheManager() {
        GuavaCacheManager gcm = new GuavaCacheManager();
        return gcm;
    }
}

serviceImpl中。java

 @Cacheable(cacheManager="guavaCacheManager")
 @Override
 public List<RoleVO> getDataForCreateNewOperator() {
  ...
 }

但它抛出:

java.lang.IllegalStateException: No cache could be resolved for 'Builder[public java.util.List getDataForCreateNewOperator()] caches=[] | key='' | keyGenerator='' | cacheManager='guavaCacheManager' | cacheResolver='' | condition='' | unless='' | sync='false'' using resolver 'org.springframework.cache.interceptor.SimpleCacheResolver@38466d10'. At least one cache should be provided per cache operation.

编辑:如果我在cacheManager中分配一个cacheName,并在建议的方法中使用它,异常就消失了。但是bean中的所有方法都将被缓存,而我只在一个方法上分配了@Cacheable

共有1个答案

慕容成和
2023-03-14

我使用Ehache和我有同样的问题,因为我有两个不同的名称缓存和缓存

Please make you use same name for cache and Cacheable.

@Cacheable("codetable")

<cache name="codetable"
        maxEntriesLocalHeap="100"
        maxEntriesLocalDisk="1000"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>
 类似资料:
  • 我使用的是spring-boot-starter-parent版本2.0.1 这是我想要缓存结果的java方法。 我没有redis或缓存的任何其他配置。虽然它不抛出任何错误,但它不缓存任何东西。我和Redis-Cli核实了。

  • 我正在寻找集成Hazelcast到我的应用程序... 我的要求是将所有数据加载到缓存并从缓存中提取。。 我有两个选择。 1) Hazelcast IMap 2)因为我使用的是Spring启动,所以我可以使用(@Cacheable/@CacheEvict)。 我能得到一些建议吗... 提前谢谢你。。

  • Redis缓存穿透以及解决方法 一、缓存穿透 1.当用户查询的key在redis中不存在,对应的id在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在db上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。 2.解决方案一:把空的数据也缓存起来,比如空字符串,空对象,空数组或list,代码如下 3.解决方案二:布隆过滤器 布隆过滤器:判断一个元素是否在一个数组里面,如下图,利用二进

  • 本文向大家介绍如何解决 Redis 缓存穿透和缓存雪崩问题?相关面试题,主要包含被问及如何解决 Redis 缓存穿透和缓存雪崩问题?时的应答技巧和注意事项,需要的朋友参考一下 缓存雪崩: 由于缓存层承载着大量请求,有效地 保护了存储层,但是如果缓存层由于某些原因不能提供服务,比如 Redis 节点挂掉了,热点 key 全部失效了,在这些情况下,所有的请求都会直接请求到数据库,可能会造成数据库宕机的

  • 主要内容:1 缓存穿透,1.1 什么是缓存穿透?,1.2 怎么解决,1.3 Bloom Filter布隆过滤器,2 缓存雪崩,3 缓存击穿,4 缓存预热,5 防止Redis宕机详细介绍了Redis的缓存穿透、缓存雪崩、缓存击穿等问题的概念与解决办法。 1 缓存穿透 1.1 什么是缓存穿透? 缓存穿透是指查询一个在缓存和数据库中一定不存在的数据,按照传统使用缓存流程:由于缓存不命中,接着查询数据库,但是数据库也无法查询出结果,因此也不会将空值写入到缓存中,这将会导致每个这样的查询都会去请求数据库,

  • 问题内容: 我正在尝试缓存静态内容,这些内容基本上位于虚拟服务器配置中的以下路径内。由于某些原因,文件没有被缓存。我在缓存目录中看到了几个文件夹和文件,但总是像20mb一样高或低。例如,如果要缓存图像,则将至少占用500mb的空间。 这是nginx.conf缓存部分: 这是默认的虚拟服务器。 问题答案: 确保您的后端不返回标头。如果Nginx看到它,它将禁用缓存。 如果是这种情况,最好的选择是修复