redis使用@Cacheable等注解为接口添加缓存
緩存處理方式應(yīng)該是
由此實(shí)現(xiàn)方式應(yīng)該如下:
private String baseKey = "category";public CmfCategories selectByPrimaryKey(Long id) {//1. 先從緩存中取CmfCategories cmfCategories = redisUtils.get(baseKey + id, CmfCategories.class);if (cmfCategories == null) { //如果取值為空//2. 從數(shù)據(jù)中查詢cmfCategories = cmfCategoriesMapper.selectByPrimaryKey(id);//3. 將查詢結(jié)果存入緩存redisUtils.set(baseKey + id, cmfCategories, DEFAULT_EXPIRE * 7);}return cmfCategories;}
這種方式是沒(méi)錯(cuò)的,但就是實(shí)現(xiàn)起來(lái),每個(gè)接口都要做一遍重復(fù)的操作,下面演示一種簡(jiǎn)潔的使用注解實(shí)現(xiàn)方式:
明顯簡(jiǎn)單多了,而且**對(duì)代碼無(wú)侵入**!
實(shí)現(xiàn)步驟
1、添加maven依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency>?
2、添加配置
/*** Redis緩存配置。*/ @Configuration @EnableCaching public class RedisCacheConfig {@Autowiredprivate RedisConnectionFactory factory;@Beanpublic CacheManager cacheManager() {RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());// 默認(rèn)緩存一天 86400秒redisCacheManager.setDefaultExpiration(86400L);return redisCacheManager;}@Beanpublic RedisTemplate<String, Object> redisTemplate() {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(factory);// 字符串Key序列化StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);// 對(duì)象值序列化ObjectRedisSerializer objectRedisSerializer = new ObjectRedisSerializer();redisTemplate.setValueSerializer(objectRedisSerializer);redisTemplate.setHashValueSerializer(objectRedisSerializer);return redisTemplate;}}
3、具體使用
在需要緩存的接口上添加注解
當(dāng)被緩存的數(shù)據(jù)被更新的時(shí)候,可以使用@CacheEvict來(lái)清除緩存,則可以保證緩存的數(shù)據(jù)是最新的
簡(jiǎn)單講解
? ??參考鏈接
? ? 緩存數(shù)據(jù)
? ? 對(duì)于緩存的操作,主要有:@Cacheable、@CachePut、@CacheEvict。
- @Cacheable
? ? Spring 在執(zhí)行 @Cacheable 標(biāo)注的方法前先查看緩存中是否有數(shù)據(jù),如果有數(shù)據(jù),則直接返回緩存數(shù)據(jù);若沒(méi)有數(shù)據(jù),執(zhí)行該方法并將方法返回值放進(jìn)緩存。 參數(shù): value緩存名、 key緩存鍵值、 condition滿足緩存條件、unless否決緩存條件
@Cacheable(value = "user", key = "#id") public User findById(final Long id) { System.out.println("cache miss, invoke find by id, id:" + id); for (User user : users) { if (user.getId().equals(id)) { return user; } } return null; }?
- @CachePut
? ? 和 @Cacheable 類似,但會(huì)把方法的返回值放入緩存中, 主要用于數(shù)據(jù)新增和修改方法。
@CachePut(value = "user", key = "#user.id") public User save(User user) { users.add(user); return user; }?
- @CacheEvict
方法執(zhí)行成功后會(huì)從緩存中移除相應(yīng)數(shù)據(jù)。 參數(shù): value緩存名、 key緩存鍵值、 condition滿足緩存條件、 unless否決緩存條件、 allEntries是否移除所有數(shù)據(jù)(設(shè)置為true時(shí)會(huì)移除所有緩存)
@CacheEvict(value = "user", key = "#user.id") // 移除指定key的數(shù)據(jù) public User delete(User user) { users.remove(user); return user; } @CacheEvict(value = "user", allEntries = true) // 移除所有數(shù)據(jù) public void deleteAll() { users.clear(); }原文鏈接:https://blog.csdn.net/sinstar1/article/details/82151249
總結(jié)
以上是生活随笔為你收集整理的redis使用@Cacheable等注解为接口添加缓存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdu 5493 Queue(逆序对,线
- 下一篇: Chrome 开发工具 Workspac