關(guān)于緩存 緩存是實(shí)際工作中非常常用的一種提高性能的方法。而在java中,所謂緩存,就是將程序或系統(tǒng)經(jīng)常要調(diào)用的對象存在內(nèi)存中,再次調(diào)用時可以快速從內(nèi)存中獲取對象,不必再去創(chuàng)建新的重復(fù)的實(shí)例。這樣做可以減少系統(tǒng)開銷,提高系統(tǒng)效率。 在增刪改查中,數(shù)據(jù)庫查詢占據(jù)了數(shù)據(jù)庫操作的80%以上,而非常頻繁的磁盤I/O讀取操作,會導(dǎo)致數(shù)據(jù)庫性能極度低下。而數(shù)據(jù)庫的重要性就不言而喻了:
在系統(tǒng)架構(gòu)的不同層級之間,為了加快訪問速度,都可以存在緩存 spring cache 特性與缺憾 現(xiàn)在市場上主流的緩存框架有ehcache、redis、memcached。spring cache可以通過簡單的配置就可以搭配使用起來。其中使用注解方式是最簡單的。 Cache 注解 從以上的注解中可以看出,雖然使用注解的確方便,但是缺少靈活的緩存策略, 緩存策略:
項(xiàng)目中可能有很多緩存的TTL不相同,這時候就需要編碼式使用編寫緩存。 條件緩存 根據(jù)運(yùn)行流程,如下@Cacheable將在執(zhí)行方法之前( #result還拿不到返回值)判斷condition,如果返回true,則查緩存; 如下@CachePut將在執(zhí)行完方法后(#result就能拿到返回值了)判斷condition,如果返回true,則放入緩存 如下@CachePut將在執(zhí)行完方法后(#result就能拿到返回值了)判斷unless,如果返回false,則放入緩存;(即跟condition相反) 如下@CacheEvict, beforeInvocation=false表示在方法執(zhí)行之后調(diào)用(#result能拿到返回值了);且判斷condition,如果返回true,則移除緩存; 小試牛刀,綜合運(yùn)用: 配置 ehcache 與 redis spring cache集成ehcache,spring-ehcache.xml主要內(nèi)容: spring cache集成redis,spring-redis.xml主要內(nèi)容: 項(xiàng)目中注解緩存只能配置一個,所以可以通過以下引入哪個配置文件來決定使用哪個緩存。 當(dāng)然,可以通過其他配置搭配使用兩個緩存機(jī)制。比如ecache做一級緩存,redis做二級緩存。 更加詳細(xì)的使用與配置,可以參考項(xiàng)目中spring-shiro-training中有關(guān)spring cache的配置:https://git.oschina.net/wangzhixuan/spring-shiro-training.git |
|