内容简介:这个版本你们没有槽点可喷了吧,因为没有 Bug 了!!! J2Cache 2.3.19 带来了部分性能的提升达 30% ,而且进一步降低对 Redis 请求的压力。 纳尼?你说我吹牛逼?下面说说详情! 假设有 100 个线程同时读取同一...
这个版本你们没有槽点可喷了吧,因为没有 Bug 了!!!
J2Cache 2.3.19 带来了部分性能的提升达 30% ,而且进一步降低对 Redis 请求的压力。
纳尼?你说我吹牛逼?下面说说详情!
假设有 100 个线程同时读取同一个 region 、同一个 key 的数据时,也就是说这 100 个线程同时调用了 get 方法,这个时候的 L1 上的数据为空,L2 上有数据。
那么相当于重复执行 L2 -> L1 -> App 这个操作 100 次,也就是说读了 100 次 Redis 的数据。
这个 get 方法(也是最常用的方法)改造之前的代码如下:
public CacheObject get(String region, String key) {
CacheObject obj = new CacheObject(region, key, CacheObject.LEVEL_1);
obj.setValue(CacheProviderHolder.getLevel1Cache(region).get(key));
if(obj.rawValue() == null) {
obj.setLevel(CacheObject.LEVEL_2);
obj.setValue(CacheProviderHolder.getLevel2Cache(region).get(key));
if(obj.rawValue() != null)
CacheProviderHolder.getLevel1Cache(region).put(key, obj.rawValue());
}
return obj;
}改造之后的代码如下:
/**
* 读取缓存(用户无需判断返回的对象是否为空)
* @param region Cache region name
* @param key Cache data key
* @return cache object
*/
public CacheObject get(String region, String key) {
CacheObject obj = new CacheObject(region, key, CacheObject.LEVEL_1);
obj.setValue(CacheProviderHolder.getLevel1Cache(region).get(key));
if(obj.rawValue() != null)
return obj;
String lock_key = key + '%' + region;
synchronized (_g_keyLocks.computeIfAbsent(lock_key, v -> new Object())) {
obj.setValue(CacheProviderHolder.getLevel1Cache(region).get(key));
if(obj.rawValue() != null)
return obj;
try {
obj.setLevel(CacheObject.LEVEL_2);
obj.setValue(CacheProviderHolder.getLevel2Cache(region).get(key));
if (obj.rawValue() != null)
CacheProviderHolder.getLevel1Cache(region).put(key, obj.rawValue());
} finally {
_g_keyLocks.remove(lock_key);
}
}
return obj;
}相当于是在读取 redis 数据之前对这个key加锁,也就是说只有一个线程会进入同步块,后进的线程直接读取一级缓存的数据。
这个改进有什么用呢?你自己不会想啊?有效缓解缓存雪崩!!!
第二个改进内容是允许在 j2cache.properties 中配置默认是否缓存 null 对象的行为(老的版本默认是启用,如果不想启用需要在 API 中通过参数指定),配置项为:
j2cache.default_cache_null_object = true
Maven:
<dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-core</artifactId> <version>2.3.19-release</version> </dependency>
点赞是参与开源社区的基本礼仪,请前往 https://gitee.com/ld/J2Cache 点赞(Star)
----- 吐槽分割线 -----
有新特性必将引来新 Bug
坐等下午发布 Bug 修复版
吓屎了,红薯又发版了
J2Cache 是我见过的最有创意,最库的缓存框架
红薯太帅了,不愧是开源第一帅
码云 Gitee 好好好!
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS禅意花园
[美] Dave Shea、Molly E. Holzschlag / 陈黎夫、山崺颋 / 人民邮电出版社 / 2007-6 / 49.00元
这本书的作者是世界著名的网站设计师,书中的范例来自网站设计领域最著名的网站——CSS Zen Garden(CSS禅意花园)。全书分为两个主要部分。第1章为第一部分,讨论网站“CSS禅意花同”及其最基本的主题,包含正确的标记结构和灵活性规划等。第二部分包括6章,占据了书中的大部分篇幅。 每章剖析“CSS禅意花园”收录的6件设计作品,这些作品围绕一个主要的设计概念展开,如文字的使用等。通过探索......一起来看看 《CSS禅意花园》 这本书的介绍吧!