工作关系 J2Cache 好久好久没什么更新了,一些小伙伴们贡献了一些小的更新,也没有即时的发布到 maven 中央库。
今天终于抽出点时间来捯饬一下,换了新电脑后很多的过程又要重来一遍,忘了太多的过程总算是折腾完了。
这个版本的更新内容请看提交记录吧,特别提两个:
Maven
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache</artifactId>
<version>2.8.4-release</version>
<type>pom</type>
</dependency>
祝大家在 2022 年越来越 2 :D
J2Cache 2.7.2 版本更新了,该版本主要更新内容包括:
该版本值得关注的改进内容包括:
此次增加对两个 MQ 服务器的支持,是为了满足个别人认为 Redis 的 Pub/Sub 不够可靠的问题。但其实我个人强烈推荐用默认的 Redis Pub/Sub 来做 J2Cache 的缓存消息同步,没有必要引入新的服务,增加系统的复杂度。
相信多数人都会遇到这样情况,我们在使用诸如 Redis 缓存一些 Java 对象时,后期我们更新程序,对对象的属性进行调整时,会导致读取缓存数据的时候,出现反序列化失败的情况。所以一般我们在出现对需要缓存的 Bean 类做调整的时候,需要实现清除缓存数据,这给实际运维带来不必要的麻烦。
而最新的 J2Cache 2.4.2 版本解决了这个问题,在进行反序列化时,一旦出现因为类的版本不同导致的反序列化失败,那么该缓存数据会被启动清除,打印警告信息,并返回空对象给应用层。
此特性目前只针对使用默认的 fst 序列化器有效。
该版本增加了 redis 只读的模式,可通过配置启用
j2cache.L2.provider_class = readonly-redis
j2cache.L2.config_section = redis
请谨慎更新此版本,在 2.3.9 版本之前,存入 L2 的缓存数据都是不带失效时间的。而 2.3.9 版本的 generic 模式的 Redis 缓存数据写入时,都带有失效时间,失效时间跟 L1 的设置一致。如果你的应用不希望这么做,请不要升级。而我们不建议使用 hash 模式,hash 模式将在下一个版本中标注为废弃!
此外,从该版本开始,J2Cache 默认会缓存 null 对象,在此之前想要缓存 null 对象需要在方法中传递参数启用,因为这可能会导致你的应用逻辑有很多的不同,请谨慎审视。
J2CacheBuilder
类CacheChannel channel = J2Cache.getChannel();
RedisClient client = ((RedisCacheProvider)channel.getL2Provider()).getRedisClient();
try {
client.get().xxxxx(...);
} finally {
client.release();
}
generic
模式下如果没有对应的数据会导致 clear
方法执行失败的问题java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to java.lang.String
DataLoader
接口,改用 Java 8 的 Function 接口替代(传递 key 参数)get(String region, Collection<String> keys, Function<String,Object> loader)
方法J2Cache 2.3.2-release (2018-1-17)
RedisPubSubClusterPolicy
和 RedisCacheProvider
独立两个连接池get(String region, String key, DataLoader loader)
方法用于从外部获取需要缓存的数据CacheChannel cache = J2Cache.getChannel();
CacheObject obj = cache.get("Users", "13", () -> "Hello J2Cache");
System.out.println(obj);
//[Users,13,L3]=>Hello J2Cache
RedisPubSubClusterPolicy
不再依赖 RedisCacheProvider
的 RedisClient
实例redis.channel.host
和 redis.channel.timeout
, redis 数据存储和订阅服务可以分开get(Collection<String> keys)
使用 Redis 的 MGET 操作符CacheObject
的 asXxx 方法来获取不同类型数据commons-beanutils
的依赖,由于 beanutils 1.8 和 1.9 版本 api 变化大,此举可避免对宿主系统的影响紧急发布 2.2.2-release 版本,该版本修复了释放 redis 连接的问题,请 2.x 用户必须升级
改进内容包括:
redis
的订阅广播方式没有释放 redis
连接的问题(严重)sharded
模式下的 Redis
启用连接池redis.mode
的配置如果无效默认使用 single
模式,而不是抛出异常clear
和 keys
方法在 generic
存储方式下的非 cluster
模式下可用(性能可能会比较差,慎用)KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
JLine
库)jgroups.configXml = /network.xml
)getObject
改名 get
,能自动识别缓存中的数据是字符串还是序列化对象注意,该版本跟以往版本在 API 上不兼容!!!
新特性
Bug修复
J2Cache 2.1 (2018-1-3)
J2Cache 2.0.1 (2017-12-26)