您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何使用Shiro性能優(yōu)化EhCache,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
* evict : 驅(qū)逐,趕出
ps : 使用shiro進(jìn)行權(quán)限管理后,每次都需要調(diào)用realm查詢角色和權(quán)限,每次都需要查數(shù)據(jù)庫(kù),性能不是很好
pps : 是否可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)放到緩存中,減少數(shù)據(jù)庫(kù)交互,提高性能?
Shiro 默認(rèn)對(duì) ehcache 的支持
在后臺(tái)管理系統(tǒng)中 ehcache 使用非常普遍
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.8.RELEASE</version> </dependency>
解壓ehcache-core.jar
包 ,將ehcache-failsafe.xml
復(fù)制src/main/resources
改名ehcache.xml
默認(rèn)緩存區(qū)
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </defaultCache>
可以自定義緩存區(qū)(不想改的話照著默認(rèn)的寫(xiě))
<cache name="myCache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </cache>
<!-- spring整合ehcache --> <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> </bean>
<!-- shiro封裝ehCacheManager --> <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager" > <property name="cacheManager" ref="ehCacheManager"/> </bean>
<!-- 配置subject的后臺(tái)推手securityManager --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myRealm"/> <property name="cacheManager" ref="shiroCacheManager"/> </bean>
<bean id="myRealm" class="club.info.bos.realm.MyRealm"> <property name="authorizationCacheName" value="myCache"/> </bean>
注意 : 需要緩存的對(duì)象要實(shí)現(xiàn)serializable接口
spring提供一套整合緩存器的注解
開(kāi)啟注解緩存
<bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehCacheManager"/> </bean> <cache:annotation-driven cache-manager="springCacheManager"/>
清除緩存,通常數(shù)據(jù)庫(kù)數(shù)據(jù)發(fā)生變化后,清除緩存,如增,刪改
@Override @CacheEvict(value="myCache",allEntries=true) public void save(User user) { userDao.save(user); }
能緩存的,查詢后緩存
@Override @Cacheable("myCache") public List<User> findAll() { return userDao.findAll(); }
針對(duì)數(shù)據(jù)在不同條件下進(jìn)行不同緩存,我們可以指定緩存的key
,支持對(duì)象嵌套,支持spel表達(dá)式
@Override @Cacheable(value="myCache",key="#pageable.pageNumber+'_'+#pageable.pageSize") public List<User> findPageData(Pageable pageable) { return userDao.findAll(pageable); }
上述內(nèi)容就是如何使用Shiro性能優(yōu)化EhCache,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。