J2Cache 2.3.19 性能提升 30%,这不是 Bugfix 版本

栏目: 软件资讯 · 发布时间: 6年前

内容简介:这个版本你们没有槽点可喷了吧,因为没有 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)

J2Cache 2.3.19 性能提升 30%,这不是 Bugfix 版本

----- 吐槽分割线 -----

  • 有新特性必将引来新 Bug 

  • 坐等下午发布 Bug 修复版

  • 吓屎了,红薯又发版了

  • J2Cache 是我见过的最有创意,最库的缓存框架

  • 红薯太帅了,不愧是开源第一帅

  • 码云 Gitee 好好好!


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

再启动

再启动

[日] 大前研一 / 田龙姬、金枫 / 中华工商联合出版社有限责任公司 / 2010-1 / 29.00元

1、“全球管理大师”、“日本战略之父”大前研一,职场励志最新巨作。 2、2010年1月中华工商联合出版社有限责任公司与日知公司继《货币战争2》《中国大趋势》之后,再度联手,重磅推出。 3、震撼中国职场的宗师级巨作,势必引领2010年中国职场4、世界著名出版商小学馆授予独家中文简体出版权。 5、试问,哪个老板不希望自己的员工不断实现自身的“再启动”呢? 6、只有不断激励鞭策自......一起来看看 《再启动》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换