jedis pool config 和 jedis pool没有配置好,建议把redis相关配置贴出来一下。
那肯定不好啊,有了连接就可以了
通过@Configuration @Bean注解
哦,看到后面明白了,可能我之前没写语句的时候开tomcat的时候redis已经有数据缓存,所以后面就不进数据库了?
你不做跟数据库的同步,缓存中哪里来数据
应该不是subuject.logout() 清空缓存信息,从源码看logout只是删除session信息
我从Shiro的CacheManager里面看了下,里面只有getChaceh方法,所以清空缓存应该是自己根据业务来判断是否需要清空缓存
package org.apache.shiro.cache; public interface CacheManager { <K, V> Cache<K, V> getCache(String var1) throws CacheException; }
当然不是啦,你要用到redis的时候才在spring.xml中配置,
(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
key-value的存储系统,用来存储的,
一、对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。
二、对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。
没事了,原来我session update写错了,我去调式了一个小时。
你可以重写更新session的方法,每次操作当前会话都会刷新session的过期时间,以下是参考的zheng项目的代码:
@Override protected void doUpdate(Session session) { // 如果会话过期/停止 没必要再更新了 if(session instanceof ValidatingSession && !((ValidatingSession)session).isValid()) { return; } // 更新session的最后一次访问时间 UpmsSession upmsSession = (UpmsSession) session; UpmsSession cacheUpmsSession = (UpmsSession) doReadSession(session.getId()); if (null != cacheUpmsSession) { upmsSession.setStatus(cacheUpmsSession.getStatus()); upmsSession.setAttribute("FORCE_LOGOUT", cacheUpmsSession.getAttribute("FORCE_LOGOUT")); } RedisUtil.set(ZHENG_UPMS_SHIRO_SESSION_ID + "_" + session.getId(), SerializableUtil.serialize(session), (int) session.getTimeout() / 1000); // 更新ZHENG_UPMS_SERVER_SESSION_ID、ZHENG_UPMS_SERVER_CODE过期时间 TODO LOGGER.debug("doUpdate >>>>> sessionId={}", session.getId()); }