Java多线程连redis_在多线程环境中使用Jedis

本文介绍了在Java多线程环境中如何安全且高效地使用Jedis连接Redis。由于Jedis本身不是线程安全的,因此推荐使用JedisPool作为连接池。通过创建全局的JedisPool实例,并使用getResource()获取和returnResource()归还Jedis实例,可以实现线程安全并优化性能。在应用关闭时,别忘了调用JedisPool的destroy()方法来释放资源。
摘要由CSDN通过智能技术生成

Jedis是一个Java语言的Redis客户端,它为Java语言连接与操作Redis提供了简单易用的接口。

Jedis不是线程安全的。故不应该在多线程环境中共用一个Jedis实例。可是。也应该避免直接创建多个Jedis实例,由于这样的做法会导致创建过多的socket连接,性能不高。

要保证线程安全且获得较好的性能。能够使用JedisPool。JedisPool是一个连接池,既能够保证线程安全,又能够保证了较高的效率。

能够声明一个全局的JedisPool变量来保存JedisPool对象的引用,然后在其它地方使用。要知道。JedisPool是一个线程安全的连接池。

JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

使用JedisPool来获得一个Jedis实例的方法例如以下,

Jedis jedis = null;

try {

jedis = pool.getResource();

/// ... 运行相关的Redis操作

jedis.set("foo", "bar");

String foobar = jedis.get("foo");

jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");

Set sose = jedis.zrange("sose", 0, -1);

} finally {

if (jedis != null) {

jedis.close();

}

}

/// ... 当关闭应用程序时:

pool.destroy();

上面的程序首先通过pool.getResource()获得一个Jedis实例。然后利用这个Jedis实例向Redisserver发送相关的指令操作,最后调用Jedis类的close方法。将这个Jedis实例归还给JedisPool。

Jedis类的close方法例如以下,

public void close() {

if (dataSource != null) {

if (client.isBroken())

this.dataSource.returnBrokenResource(this);

else

this.dataSource.returnResource(this);

} else {

client.close();

}

}

能够看到,假设是从JedisPool取得的Jedis实例(Jedis的dataSource成员不为空。即指向 一个JedisPool),会进行对应的归还给JedisPool的操作。假设是单独生成的一个Jedis实例(Jedis的dataSource成员为空),则会直接断开与Redisserver的连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值