1.4K Star 4.9K Fork 1.7K

GVP红薯 / J2Cache

2021-12-30 22:49
36 ld 1578913711 红薯

工作关系 J2Cache 好久好久没什么更新了,一些小伙伴们贡献了一些小的更新,也没有即时的发布到 maven 中央库。

今天终于抽出点时间来捯饬一下,换了新电脑后很多的过程又要重来一遍,忘了太多的过程总算是折腾完了。

这个版本的更新内容请看提交记录吧,特别提两个:

  1. lettuce 支持 cluster 策略
  2. 升级 fastjson 到 1.2.79 版本(之前依赖的版本有安全漏洞)

Maven

<dependency>
  <groupId>net.oschina.j2cache</groupId>
  <artifactId>j2cache</artifactId>
  <version>2.8.4-release</version>
  <type>pom</type>
</dependency>

祝大家在 2022 年越来越 2 :D

最后提交信息为: for maven 3.8.x
2018-10-15 21:51
36 ld 1578913711 红薯

J2Cache 2.7.2 版本更新了,该版本主要更新内容包括:

  • 新增使用 Lettuce 时对 Redis Cluster 模式的支持
  • 修复 Lettuce key 解码错误的问题 
  • 解决多个 CacheChannel 实例并存的问题
  • 解决使用 jedis 时无法通过 CacheChannelTest 单元测试的问题
  • CacheChannel 增加关闭状态的判断
最后提交信息为: 2.7.2
2018-08-28 07:46
36 ld 1578913711 红薯

该版本值得关注的改进内容包括:

  • 这里是列表文本增加 Spring Cache 模块(感谢 @zuisong 的贡献)
  • 这里是列表文本支持通过消息服务器来分发缓存消息(目前支持 RabbitMQ 和 RocketMQ)
  • 这里是列表文本将 XxxxClusterPolicy 类移至 cluster 包,并对基础类进行优化,减少代码量

此次增加对两个 MQ 服务器的支持,是为了满足个别人认为 Redis 的 Pub/Sub 不够可靠的问题。但其实我个人强烈推荐用默认的 Redis Pub/Sub 来做 J2Cache 的缓存消息同步,没有必要引入新的服务,增加系统的复杂度。

最后提交信息为: 2.5.2
2018-08-17 06:43
36 ld 1578913711 红薯

相信多数人都会遇到这样情况,我们在使用诸如 Redis 缓存一些 Java 对象时,后期我们更新程序,对对象的属性进行调整时,会导致读取缓存数据的时候,出现反序列化失败的情况。所以一般我们在出现对需要缓存的 Bean 类做调整的时候,需要实现清除缓存数据,这给实际运维带来不必要的麻烦。

而最新的 J2Cache 2.4.2 版本解决了这个问题,在进行反序列化时,一旦出现因为类的版本不同导致的反序列化失败,那么该缓存数据会被启动清除,打印警告信息,并返回空对象给应用层。

此特性目前只针对使用默认的 fst 序列化器有效。

最后提交信息为: 2.4.2
2018-05-06 09:22
36 ld 1578913711 红薯
  • 修复了 Ehcache3 配置不失效缓存时,写入缓存异常的问题
  • 修复了 Ehcache 下空指针的异常
最后提交信息为: add use case
2018-04-26 17:08
36 ld 1578913711 红薯

该版本增加了 redis 只读的模式,可通过配置启用

j2cache.L2.provider_class = readonly-redis
j2cache.L2.config_section = redis

最后提交信息为: 2.3.12
2018-02-13 07:54
36 ld 1578913711 红薯

请谨慎更新此版本,在 2.3.9 版本之前,存入 L2 的缓存数据都是不带失效时间的。而 2.3.9 版本的 generic 模式的 Redis 缓存数据写入时,都带有失效时间,失效时间跟 L1 的设置一致。如果你的应用不希望这么做,请不要升级。而我们不建议使用 hash 模式,hash 模式将在下一个版本中标注为废弃!

此外,从该版本开始,J2Cache 默认会缓存 null 对象,在此之前想要缓存 null 对象需要在方法中传递参数启用,因为这可能会导致你的应用逻辑有很多的不同,请谨慎审视。

最后提交信息为: 2.3.9
2018-02-07 08:19
36 ld 1578913711 红薯
  • 启用全新 Logo
  • 增加 redis 连接时间显示
  • 一级缓存数据失效时再一次清除一级缓存是为了避免缓存失效时再次从 L2 获取到值
  • 默认禁用 Jedis 的 JMX 功能
  • 修复了 generic 模式下 keys 方法返回的 key 包含 region 信息的问题
  • 内部代码优化
  • 完善使用文档
最后提交信息为: 2.3.8
2018-01-24 10:27
36 ld 1578913711 红薯
  • 同时兼容 JGroups 3.6.x 和 4.0.x 版本
  • 支持直接使用 J2CacheConfig 配置 J2Cache,请参考 J2CacheBuilder
  • get with loader 方法支持 cacheNullObject 参数
  • CacheChannel 提供直接访问底层 Redis 的接口,示例代码:
    CacheChannel channel = J2Cache.getChannel();
    RedisClient client = ((RedisCacheProvider)channel.getL2Provider()).getRedisClient();
    try {
        client.get().xxxxx(...);
    } finally {
        client.release();
    }
    
最后提交信息为: 2.3.6
2018-01-23 11:03
36 ld 1578913711 红薯
  • [新特性] 支持缓存空对象
  • [BUG] 修复了批量加载缓存后没有设置 L1 数据的问题
  • [BUG] 修复了 generic 模式下如果没有对应的数据会导致 clear 方法执行失败的问题
  • [BUG] 修复 java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to java.lang.String
2018-01-18 11:47
36 ld 1578913711 红薯
  • 增加 regions 方法获取所有缓存中的已用缓存区域
  • 整理对第三方库的依赖关系
  • 删除 DataLoader 接口,改用 Java 8 的 Function 接口替代(传递 key 参数)
  • 接口增加 get(String region, Collection<String> keys, Function<String,Object> loader) 方法
最后提交信息为: 2.3.4
2018-01-17 11:04
36 ld 1578913711 红薯

J2Cache 2.3.2-release (2018-1-17)

  • 配置默认启用 testWhileIdle 以保持到 redis 的网络连接
  • RedisPubSubClusterPolicyRedisCacheProvider 独立两个连接池
  • [增强] 改善 redis 连接的可靠性,包括被 redis 服务器强行断开连接的处理
  • 继续优化同时获取多个缓存数据的方法
  • 增加 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
    
最后提交信息为: 2.3.2 请看 CHANGES.md
2018-01-16 10:28
36 ld 1578913711 红薯
  • 重构:RedisPubSubClusterPolicy 不再依赖 RedisCacheProviderRedisClient 实例
  • 增加单独的 Redis PubSub 服务器配置项 redis.channel.hostredis.channel.timeout , redis 数据存储和订阅服务可以分开
  • 优化 get(Collection<String> keys) 使用 Redis 的 MGET 操作符
  • 优化 evict 多个 key 的操作
2018-01-15 17:23
36 ld 1578913711 红薯
  • 删除缓存读取方法 getXxx 只保留 get 方法(自动识别不同类型数据),可通过 CacheObject 的 asXxx 方法来获取不同类型数据
  • 删除 incr 和 decr 方法
  • 内部结构的重构,减少模块间的耦合,简化内部接口
  • 去掉对 commons-beanutils 的依赖,由于 beanutils 1.8 和 1.9 版本 api 变化大,此举可避免对宿主系统的影响
  • 修复了 RedisGenericCache 中 clear 方法的逻辑错误[BUG]
最后提交信息为: 2.3.0-release
2018-01-10 11:50
36 ld 1578913711 红薯

紧急发布 2.2.2-release 版本,该版本修复了释放 redis 连接的问题,请 2.x 用户必须升级

改进内容包括:

  • 修复使用 redis 的订阅广播方式没有释放 redis 连接的问题(严重)
  • sharded 模式下的 Redis 启用连接池
  • redis.mode 的配置如果无效默认使用 single 模式,而不是抛出异常
2018-01-09 17:58
36 ld 1578913711 红薯
  • 提供 clearkeys 方法在 generic 存储方式下的非 cluster 模式下可用(性能可能会比较差,慎用)
    官方文档声称:KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。
  • 命令行测试工具支持上下键调用历史命令记录(依赖 JLine 库)
  • 当 Redis 重启时会导致订阅线程断开连接,J2Cache 将进行自动重连
  • 支持指定 jgroups 配置文件名称 (jgroups.configXml = /network.xml
  • 删除 setIfAbsent 方法(有点多余,二级缓存以及有一些缓存框架不支持这个方法,开发者只需自行判断即可)
  • 支持自定义的 ClusterPolicy ,详情请看 j2cache.properties
  • getObject 改名 get ,能自动识别缓存中的数据是字符串还是序列化对象
2018-01-06 18:40
36 ld 1578913711 红薯

注意,该版本跟以往版本在 API 上不兼容!!!

新特性

  • 原有的 get/getAll 方法替换成 getXxxx 方法(删除原有方法)
  • 增加对 Caffeine 的支持(一级缓存)
  • 支持设置缓存对象的有效期
  • 支持多种 Redis 普通存储模式和哈希存储模式(redis.storage = generic|hash)
  • 增加 incr 和 decr 方法

Bug修复

  • 修复 redis 连接没有释放的问题(严重,必须升级)
最后提交信息为: 2.2.0-beta
2018-01-03 15:27
36 ld 1578913711 红薯

J2Cache 2.1 (2018-1-3)

  • 为了避免在实际应用中的混淆,缓存的key统一为字符串(如果你不能确定,请谨慎升级到2.1)
  • 增加更多的缓存操作方法(getAll,setAll)
  • 增加新节点加入和退出集群的日志信息
  • 增加了 Spring Boot Starter 模块(感谢 @zhangsaizz 的贡献)
最后提交信息为: v2.1.0
2017-12-26 22:53
36 ld 1578913711 红薯

J2Cache 2.0.1 (2017-12-26)

  • 修复了 database 参数无效的问题
  • 统一了几种 Redis 模式下的密码认证处理
  • 修复了 sharded 模式无法使用 database 和 password 参数的问题
  • 给子模块定义版本号,统一父模块的版本号
  • 补充和完善 Javadoc 文档
最后提交信息为: changes
Java
1
https://gitee.com/ld/J2Cache.git
git@gitee.com:ld/J2Cache.git
ld
J2Cache
J2Cache

搜索帮助

14c37bed 8189591 565d56ea 8189591