Java中使用Jedis连接池,避免频繁创建销毁

package com.fly.test;

import java.util.HashSet;
import java.util.Set;


import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;


/**
 * Jedis 连接池
 * @author YuLF
 *
 */
public class JedisPoolUtil {
	/* redis连接池 */
	private static volatile JedisPool jedisPool = null;
	/* redis的一些配置信息 */
	private static JedisPoolConfig poolConfig = null;
	/* redis哨兵,方便主服宕机之后随时获取最新的主服master ip端口 */
	private static JedisSentinelPool jedisSentinelPool = null;

	/* 类加载时初始化配置 */
	static {
		/* 值可以放到配置文件动态读取 */
		poolConfig = new JedisPoolConfig();
		poolConfig.setMaxIdle( 32 );                    /* 空闲连接 */
		poolConfig.setMaxTotal( 999 );                  /* 最大jedis连接数 */
		poolConfig.setMaxWaitMillis( 100 * 1000 );      /* 最大等待时间100秒 */
		poolConfig.setTestOnBorrow( true );             /* 检查有效的连通 */
		Set<String> set = new HashSet<>();
		/* set中放的是哨兵的Ip和端口,可以放到配置文件动态读取 */
		set.add( "192.168.174.130:6399" );


		/*
		 * set.add("192.168.0.9:26380");
		 * set.add("192.168.0.9:26381");
		 */
		jedisSentinelPool = new JedisSentinelPool( "master_redis", set, poolConfig, 60000 );
	}

	private JedisPoolUtil()
	{
	}


	public static JedisPool getJedisPoolInstance()
	{
		if ( null == jedisPool )
		{
			synchronized (JedisPoolUtil.class ) {
				if ( null == jedisPool )
				{
					HostAndPort ipAndPort = jedisSentinelPool.getCurrentHostMaster();
					jedisPool = new JedisPool( poolConfig, ipAndPort.getHost(), ipAndPort.getPort() );
				}
			}
		}
		return(jedisPool);
	}


	public static void release( Jedis jedis )
	{
		if ( jedis != null )
		{
			/*
			 * 
			 * jedisPool.returnResource修饰符被改为protected了
			 */
			jedis.close();
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值