J2Cache 2.6.0 版本发布啦,该版本最最值得关注的就是支持分布式的 session 存储管理,支持不同的 Servlet 容器。
此外,该版本包含了如下小改动:
Maven
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-core</artifactId>
<version>2.6.0-release</version>
</dependency>
但是!!!!最最重要的是增加了全新的分布式 session 存储模块 session-manager !
session-manager 用来实现对 Java Web 应用的分布式 session 管理,它接管了 Servlet 容器自带的 session 管理机制,通过两级缓存的引入实现 session 的分布式高性能存储,同时避免对 redis 造成太大压力。
使用步骤:
1. 首先引入 maven 依赖:
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-session-manager</artifactId>
<version>1.0.0-beta</version>
</dependency>
2. 在 web.xml 中定义全局过滤器
<filter>
<filter-name>j2cache-session-filter</filter-name>
<filter-class>net.oschina.j2cache.session.J2CacheSessionFilter</filter-class>
<init-param><!-- 内存中存放会话数 -->
<param-name>session.maxSizeInMemory</param-name>
<param-value>2000</param-value>
</init-param>
<init-param><!-- 会话有效期,单位:秒钟 -->
<param-name>session.maxAge</param-name>
<param-value>1800</param-value>
</init-param>
<!-- cookie configuration -->
<init-param>
<param-name>cookie.name</param-name>
<param-value>J2CACHE_SESSION_ID</param-value>
</init-param>
<init-param>
<param-name>cookie.path</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>cookie.domain</param-name>
<param-value></param-value>
</init-param>
<!-- redis configuration -->
<init-param>
<param-name>redis.mode</param-name>
<param-value>single</param-value>
</init-param>
<init-param>
<param-name>redis.hosts</param-name>
<param-value>127.0.0.1:6379</param-value>
</init-param>
<init-param>
<param-name>redis.channel</param-name>
<param-value>j2cache-session</param-value>
</init-param>
<init-param>
<param-name>redis.database</param-name>
<param-value>0</param-value>
</init-param>
......
</filter>
<filter-mapping>
<filter-name>j2cache-session-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
根据实际环境的情况对配置中的值进行调整,并确保该过滤器优先执行。完整示例请看 web.xml
由于 session 的存储机制和普通的缓存不一样,因此 session-mananger 模块本身并不依赖 j2cache ,而是重新实现了一个精简版的 j2cache ,并针对 session 的机制进行了优化。一级缓存使用 caffeine (expireAfterAccess),二级缓存使用 redis (hash) ,基于 redis 的 pub/sub 进行消息广播,使用 fst 序列化器,而且无法修改。
目前该功能还处于 beta 测试阶段,代码量非常少(模块源码),欢迎大家试用和挑毛病。
点赞是参与开源社区的基本礼仪,欢迎 https://gitee.com/ld/J2Cache 点赞!