您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何使用Shiro性能優化EhCache,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
* evict : 驅逐,趕出
ps : 使用shiro進行權限管理后,每次都需要調用realm查詢角色和權限,每次都需要查數據庫,性能不是很好
pps : 是否可以將數據庫中的數據放到緩存中,減少數據庫交互,提高性能?
Shiro 默認對 ehcache 的支持
在后臺管理系統中 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
復制src/main/resources
改名ehcache.xml
默認緩存區
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </defaultCache>
可以自定義緩存區(不想改的話照著默認的寫)
<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的后臺推手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>
注意 : 需要緩存的對象要實現serializable接口
spring提供一套整合緩存器的注解
開啟注解緩存
<bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehCacheManager"/> </bean> <cache:annotation-driven cache-manager="springCacheManager"/>
清除緩存,通常數據庫數據發生變化后,清除緩存,如增,刪改
@Override @CacheEvict(value="myCache",allEntries=true) public void save(User user) { userDao.save(user); }
能緩存的,查詢后緩存
@Override @Cacheable("myCache") public List<User> findAll() { return userDao.findAll(); }
針對數據在不同條件下進行不同緩存,我們可以指定緩存的key
,支持對象嵌套,支持spel表達式
@Override @Cacheable(value="myCache",key="#pageable.pageNumber+'_'+#pageable.pageSize") public List<User> findPageData(Pageable pageable) { return userDao.findAll(pageable); }
上述內容就是如何使用Shiro性能優化EhCache,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。