redis進階之快取管理(1課時)

powerx_yc發表於2018-10-03

配置

spel表示式:https://blog.csdn.net/wujiaqi0921/article/details/79123873

參考spring手冊36小節,領著看一下Spring手冊

<!-- 啟用快取註解功能,這個是必須的,否則註解不會生效,另外,該註解一定要宣告在spring主配置檔案中才會生效

-->

<cache:annotation-driven cache-manager="cacheManager" />

<!--初始化快取管理器

-->

<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">

<constructor-arg

ref="redisTemplate" />

</bean>

注意:在使用快取的時候,一定要定義快取管理器為id="cacheManager" 

定義其他名字,伺服器已啟動就報找不到cacheManager,應該是spring快取內建需要這個bean


程式碼樣例

@CacheConfig(cacheNames={IUserManager.cacheName})

public class UserManager implements IUserManager {

@Autowired

private IUserMapper userMapper;

@Override

@CacheEvict(allEntries=true)

public void updateUser(User

user) {

System.out.println("update"+ user.getId);

   userMapper.updateUser(user);

}

@Override

@Cacheable(key="#root.methodName+#root.args[0]+#root.args[1]")

public List<User> getAll(int pageNum,int pageSize)

{

PageHelper.startPage(pageNum, pageSize);

List<User> userList=userMapper.getAll();

return userList;

}

}

相關注解

1、@Cacheable 

@Cacheable 可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支援快取的,當標記在一個類上時則表示該類所有的方法都是支援快取的。

@Cacheable(value=”accountCache”),這個註釋的意思是,當呼叫這個方法的時候,會從一個名叫 accountCache 的快取中查詢,如果沒有,則執行實際的方法(即查詢資料庫),並將執行的結果存入快取中,否則返回快取中的物件。這裡的快取中的key 就是引數 userName,value 就是Account 物件。“accountCache”快取是在 spring*.xml

中定義的名稱。

2、@CachePut

@CachePut 的作用

主要針對方法配置,能夠根據方法的請求引數對其結果進行快取,和 @Cacheable

不同的是,它每次都會觸發真實方法的呼叫

@CachePut 註釋,這個註釋可以確保方法被執行,同時方法的返回值也被記錄到快取中,實現快取與資料庫的同步更新。

3、@CacheEvict

@CachEvict 的作用

主要針對方法配置,能夠根據一定的條件對快取進行清空

@CacheConfig

所有的@Cacheable()裡面都有一個value=“xxx”的屬性,這顯然如果方法多了,寫起來也是挺累的,如果可以一次性宣告完那就省事了,

所以,有了

@CacheConfig這個配置,@CacheConfig is a class-level annotation that

allows to share the cache names,如果你在你的方法寫別的名字,那麼依然以方法的名字為準。

相關文章