关于Spring Cache的简化和优化:
- 优化缓存的获取和设置方式:
* 通常,Spring Cache 的 `get(key)` 方法用于获取缓存值,而 `put(key, value)` 方法用于设置缓存值。为了简化设置缓存的过程,你可以考虑使用 `putIfAbsent(key, value)` 方法,该方法仅在缓存中不存在指定键时才设置值。
* 对于删除缓存,`evict(key)` 方法用于删除指定键的缓存项。但如果你想删除所有缓存项,可以使用 `clear()` 方法。
- 消除 IDE 的警告:
* 对于 IDE 的警告,可能是因为 `@Cachable` 注解需要指定 `name` 属性。你可以尝试使用 `@Cacheable` 注解(注意大小写),它是 `@Cachable` 的正确拼写,并且不需要指定 `name` 属性。
- 简化缓存值的获取过程:
* 获取缓存值时,通常需要先获取 Cache 实例,然后调用 `get(key)` 方法。为了简化这一过程,你可以考虑使用 Spring Cache 的 `Cache.ValueWrapper` 接口,它提供了更简便的获取缓存值的方式。例如,`cache.get(key, Cache.ValueWrapper.class)` 可以直接返回缓存值,避免了中间的包装类转换。
* 在获取缓存值时,检查是否为 null 确实有些繁琐。一种简化的做法是使用 Optional 类来处理可能的 null 值。这样,你可以使用 `Optional.ofNullable(cache.get(key).get())` 来避免直接与 null 值的交互。
通过以上优化,你可以简化 Spring Cache 的使用并提高代码的简洁性和可读性。
spring cache
实现如此,怪也得按格式写。@CacheConfig(cacheNames = "test")
对此类统一设置来替代在application.yml
配置文件中配置,以解决IDE
的警告;但一般不推荐这么做,因为一个缓存类下要定义多个缓存的时候就不合适了,一般是要在缓存类的每个缓存方法(@Cacheable/@CachePut/@CacheEvict
)中定义(还因为缓存一般要实现过期时间)。@Cacheable
注解的方法就行。有缓存值会返回值,无缓存值会执行方法体。当然在无缓存值的时候也会将返回值写入缓存,如果不希望写入缓存,可以用@Cacheable(cacheNames = "test", key = "#id", unless = "#result == 0")
类似这种通过unless
指明无缓存时不缓存的判断条件。