spring + shiro +ehcache + redis整合自我总结2

有两种方式来创建缓存实列:
一、 Spring  创建方式。


添加命名空间:xmlns:p="http://www.springframework.org/schema/p"
<bean id="cacheManagerFactory"  class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"  p:configLocation="classpath:ehcache.xml"></bean>  
<bean id="shiroEhcacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"   p:cacheManager-ref="cacheManagerFactory" ></bean>  
二、Bean创建方式。


<!-- shiro的缓存管理器,然后需要将缓存管理器注入到安全管理其中  -->  
<bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
       <property name="cacheManagerConfigFile" value="classpath:config/ehcache-shiro.xml" />  <!--classpath是缓存属性的配置文件  -->  
</bean>
为 Shiro 配置 EHCache 缓存


在 resources/spring-shiro.xml 里生成 EhCacheManager 的 Bean,把 EhCacheManager 的 Bean 注入到 SecurityManager
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="realm"/>
    <!-- 需要使用cache的话加上这句 -->
    <property name="cacheManager" ref="shiroEhcacheManager" />
</bean>


<!-- 需要使用cache的话加上这句 -->
<bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManagerConfigFile" value="classpath:spring-shiro-ehcache.xml" />
</bean>




Shiro 使用 Redis 存储 Session


Redis 是一个高速的分布式缓存。
虽然配置 EhCache 提升了效率,但是,Session 仍然存储在 Server 的内存里(Shiro 默认使用 MemorySessionDAO 把 Session 存储在 ConcurrentMap 里),当有大量的用户登录后 Server 的内存就会急剧增加,而且由于 Server 之间内存里的 Session 不能共享,所以没法实现集群。为了解决这两个问题,我们本地仍然使用 EhCache 缓存 Session,但是 Session 存储在 Redis 里。
流程说明:


Servlet 容器在用户浏览器首次访问后会产生 Session,并将 Session 的 ID 保存到 Cookie 中(浏览器不同 ID 不一定相同),同时 Shiro 会将该 Session 缓存到 Redis 中
用户登录认证成功后 Shiro 会修改 Session 属性,添加用户认证成功标识,并同步修改 Redis 中 Session
用户发起请求后,Shiro 会先判断本地 EhCache 缓存中是否存在该 Session,如果有,直接从本地EhCache 缓存中读取,如果没有再从 Redis 中读取 Session,并在此时判断 Session 是否认证通过,如果认证通过将该 Session 缓存到本地 EhCache 中
如果 Session 发生改变,或被删除(用户退出登录),先对 Redis 中 Session 做相应修改(修改或删除);再通过 Redis 消息通道发布缓存失效消息,通知其它节点 EhCache 失效
注意


本地缓存的过期时间要小于 Redis 上 Session 的过期时间,防止本地缓存里 Session 过期了 Redis 上 Session 还没有过期
Session 不要存不必要的东西


更新中.......
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值