首页  

Spring @Cacheable 注解     所属分类 spring 浏览量 40
SpringBoot默认提供多种缓存管理器实现
ConcurrentMapCacheManager EhCacheCacheManager RedisCacheManager 等

org.springframework.cache.CacheManager

public interface CacheManager {
	@Nullable
	Cache getCache(String name);
	Collection getCacheNames();
}

org.springframework.cache.Cache

public interface Cache {

	String getName();
	// Return the underlying native cache provider.
	Object getNativeCache();
    ValueWrapper get(Object key);
    < T > T get(Object key, @Nullable Class< T > type);
    < T > T get(Object key, Callable< T > valueLoader);
    void put(Object key, @Nullable Object value);
    default ValueWrapper putIfAbsent(Object key, @Nullable Object value)
    void evict(Object key);
    void clear();

}


@Cacheable 的 value 和 key value:指定缓存的名称或分组,必须指定。 key:指定缓存数据的键,可以使用 SpEL 表达式动态生成,如果不指定,则默认使用方法的所有参数组合生成键。 value 参数用于指定缓存的名称或分组。它表示方法的结果将被缓存到哪个缓存中。 在Spring4及更高版本中,value 和 cacheNames 是等价的,可以互换使用。 value 属性是必须指定的,除非在类级别使用了 @CacheConfig 注解来指定默认的缓存名称。 key 参数用于指定缓存数据的键。 如果未指定 key,Spring 默认使用方法的所有参数组合生成一个键。 key 参数支持使用 SpEL(Spring Expression Language)表达式来动态生成键。 @Cacheable(value = "users") public User find(Integer id) { return null; } @Cacheable(value = {"cache1", "cache2"}) public User find(Integer id) { return null; } @Cacheable(value = "users", key = "#id") public User find(Integer id) { return null; } @Cacheable(value = "users", key = "#user.id") public User find(User user) { return null; } @Cacheable(value = "searchResults", key = "#query + '_' + #page + '_' + #count + '_' + #sortDirection") public List< SearchResult > search(String query, int page, int count, String sortDirection) { return performSearch(query, page, count, sortDirection); }
spring 本地缓存 和 redis 切换 spring-boot-starter-cache spring-boot-starter-data-redis spring.cache.type=redis spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= spring.redis.database=0 spring.redis.timeout=30000 @EnableCaching @Cacheable、@CachePut、@CacheEvict 切换到本地缓存 spring.cache.type=simple
@Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "users", key = "#id") public User getUserById(Long id) { System.out.println("从数据库查询用户信息"); return userRepository.findById(id).orElse(null); } @CachePut(value = "users", key = "#user.id") public User updateUser(User user) { System.out.println("更新用户信息"); return userRepository.save(user); } @CacheEvict(value = "users", key = "#id") public void deleteUser(Long id) { System.out.println("删除用户信息"); userRepository.deleteById(id); } @CacheEvict(value = "users", allEntries = true) public void clearAllUsersCache() { System.out.println("清除所有用户缓存"); } } @CacheConfig 在类级别共享缓存配置,如缓存名称、键生成器等。 @Caching注解用于组合多个缓存操作,如同时更新和清除缓存。 @Service public class UserService { @Autowired private UserRepository userRepository; @Caching( put = @CachePut(value = "users", key = "#user.id "), evict = @CacheEvict(value = "users", allEntries = true) ) public User updateUserAndClearCache(User user) { System.out.println("更新用户信息并清除所有用户缓存"); return userRepository.save(user); } }

上一篇     下一篇
springboot Selenium Chrome ChromeDriver 实现网页截屏

Quartz 2.3.2 使用

裸K price action 概述

《底层逻辑》笔记

《底层逻辑》笔记2

推荐书单