redis jedis jedispool 获取不到连接

每次都在第8次获取 jedis的时候 获取不到

 package com.ryx.sync.util;

import java.util.concurrent.locks.ReentrantLock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

public final class JedisUtil {
    private static Logger logger = LoggerFactory.getLogger(JedisUtil.class);

    protected static ReentrantLock lockPool = new ReentrantLock();  
    protected static ReentrantLock lockJedis = new ReentrantLock(); 
    //Redis服务器IP
    private static String ADDR = "127.0.0.1";

        //Redis的端口号
        private static int PORT = 6379;

        //访问密码
        private static String AUTH = "beijing";

        //可用连接实例的最大数目,默认值为8;
        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
        private static int MAX_ACTIVE = 1024;

        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
        private static int MAX_IDLE = 8;

        //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
        private static int MAX_WAIT = 10000;

        private static int TIMEOUT = 10000;

        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
        private static boolean TEST_ON_BORROW = true;

        private static JedisPool jedisPool = null;

        /** 
         * 初始化Redis连接池 
         */  
        private static void initialPool(){  
            try {  
                JedisPoolConfig config = new JedisPoolConfig();  
//              config.setMaxTotal(MAX_ACTIVE);  
                config.setMaxIdle(MAX_IDLE);  
                config.setMaxWaitMillis(MAX_WAIT);  
                config.setTestOnBorrow(TEST_ON_BORROW);  
                jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT);  
            } catch (Exception e) {  
                logger.error("create JedisPool error : "+e);  
            }  
        }  

        /** 
         * 在多线程环境同步初始化 
         */  
        private static void poolInit() {  
            //断言 ,当前锁是否已经锁住,如果锁住了,就啥也不干,没锁的话就执行下面步骤  
            assert ! lockPool.isHeldByCurrentThread();    
            lockPool.lock();  
            try {    
                if (jedisPool == null) {    
                    initialPool();  
                }  
            }catch(Exception e){  
                e.printStackTrace();  
            } finally {    
                lockPool.unlock();  
            }  
        }  

        /**
         * 获取Jedis实例
         * @return
         */
        public static Jedis getJedis() {  
            //断言 ,当前锁是否已经锁住,如果锁住了,就啥也不干,没锁的话就执行下面步骤  
            assert ! lockJedis.isHeldByCurrentThread();    
            lockJedis.lock();  

            if (jedisPool == null) {    
                poolInit();  
            }  
            Jedis jedis = null;  
            try {
                if (jedisPool != null) {    
                    jedis = jedisPool.getResource();   
                }  
            } catch (Exception e) {    
                logger.error("Get jedis error : "+e);  
            }finally{  
                lockJedis.unlock();  
            }  
            return jedis;  
        }    

        /**
         * 释放jedis资源
         * @param jedis
         */
        public static void returnResource(final Jedis jedis) {  
            if (jedis != null && jedisPool !=null) {  
                jedisPool.returnResource(jedis);  
            }  
        }  

        public static JedisPool getJedisPool(){
            return jedisPool;
        }
}

public boolean jedisSave(List<SdTranData> sdTranDatas){
        if (sdTranDatas.size() <= 0) {
            return false;
        }
        Jedis jedis = null;
        try {
            //从redis 删除边界   tranCode  解决重复问题
            this.logger.logDebug("正在获取jedis连接。。。");
            jedis = JedisUtil.getJedis();
            System.out.println("active  jedis:"+JedisUtil.getJedisPool().getNumActive());
            this.logger.logDebug("获取jedis连接成功。。。");
            String tranCode = sdTranDatas.get(0).getTranCode();
            jedis.zremrangeByScore("sdTranLs".getBytes(), Double.parseDouble(tranCode), Double.parseDouble(tranCode));
            for (SdTranData sdTranData : sdTranDatas) {
                jedis.zadd("sdTranLs".getBytes(), Double.parseDouble(sdTranData.getTranCode()), SerializeUtil.serialize(sdTranData));
            }
        }catch (Exception e) {
            logger.logException("获取jedis连接出错:", e);
        }finally{
            if(jedis != null){
                JedisUtil.returnResource(jedis);
            }
        }
        return true;
    }
0

1个回答

程序其他地方 获取了连接,没关闭

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Jedis/JedisPool和Redis数据类型与特性
  1.介绍Jedis Jedis 是 Redis 的 java 版本客户端,使用Jedis可以连接 Redis的数据库,Jedis连接方式有三种Jedis/JedisPool 连接、ShardedJedis/ShardedJedisPool 连接、JedisCluster 连接,今天主要讲解用 Java 代码连接 Jedis 连接池 1.1连接Jedis/JedisPool   首先在R...
使用 JedisPool 来获取 Jedis 连接
jedis 作为一个数据库同样也有数据库连接池 JedisPool,封装了一个简单的获取 Jedis 连接池的工具类(单例模式): package com.qjl.pems.test; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPool...
linux中安装redis和jedis及jedispool
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
Redis获取不到连接
Redis获取不到连接问题 问题场景 我们在继承Redis的时候,可能只是一个简单的集成,保证可以存取数据就可以了,但是有的时候我们使用云Redis的时候,就会出现Redis无法获取连接的情况,究其原因是因为我们自己集成Redis的时候没有为Redis设置密码,云Redis一般都会设置访问密码,这样就造成了无法获取连接的问题出现。 解决方案 为我们的Reids设置密码,在配置Re
jedis 源码阅读二——jedisPool
我们从这段代码分析jedisPool:JedisPool @Test public void checkJedisIsReusedWhenReturned() { JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort()); Jedis jedis = pool.getRe
通过Jedis客户端连接不到redis(二)
之前我的一篇文章,也是解决Jedis连接不到redis的,但是情况不一样,之前的问题主要是防火墙的问题,但是现在看来并不是防火墙的问题,因为redis自身也有配置来限制外网的访问,所以当时也不知道为什么就可以了,今天主要以redis配置的角度来看一下,如何解决外网访问redis的问题。 首先还是描述一下问题: public static void main(String[] args) {
通过Jedis客户端连接不到redis
当我使用如下的代码来测试redis的时候报错,代码如下: // 单机版测试 @Test public void testJedisSingle() throws Exception { Jedis jedis = new Jedis("192.168.1.118", 6379); jedis.set("shenlinnan", "hahahahahaha"); System.o
通过JedisPool资源池管理jedis连接
要应用JedisPool资源池管理jedis,需要引入两个包,(1)jedis jar包或redis jar包 (2)阿帕奇下的commons-pool jar包,好像用到资源池的都需要这个下面是一点点小代码。需要说明的是,释放jedis资源的方法已经deprecated了,不知道是不是这个原因,导致释放的jedis资源能继续使用。具体原因等确定后再更新。package jedis.redis;i
Redis 、Redis 连接池、JedisPool
1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ,然后将redis.properties 文件放入指定文件夹下面,配置系统环境变量名“JAVAAPP_CONFIG_HOME”路径指向存放redis.properties 文件的路径 5.调用类 JedisUtil_Synchronized 或者JedisUtil_ReentrantLock 6.在公司写了一天 ,希望能帮到大家
Jedis连接Redis单机版
连接单机版 把jedis依赖的jar包 添加到工程中 //单机版测试 @Test public void testJedisSingle() throws Exception { //创建一个Jedis对象 Jedis jedis = new Jedis(&quot;192.168.25.153&quot;, 6379); jedis.set(&quot;test&quot;, &quot;hello jedis&quot;)...
jedis连接redis报错
在项目中用jedis连接服务器上的redis时,一开始提示connect timed out ,检查是服务器的6379端口没开,打开端口后在进行测试,又说redis拒绝连接,查阅资料,讲redis/bin下的redis.conf文件中的bing:127.0.0.1修改为0.0.0.0,然后重启redis,在进行测试,OK,没问题!!! ...
jedis连接redis单机
jedis连接redis单机 1.向pom文件添加jedis依赖:                                                                              redis.clients                                         jedis                        
Jedis 连接远程Redis
@Test public void testJedisSingle() { Jedis jedis = new Jedis("xxxxx", 6379); jedis.set("name", "bar"); String name = jedis.get("name"); System.out.println(name);
Jedis连接操作redis
redis是系统中最常见的缓存应用,Jedis可以产生线程安全的实例,用于连接、操作redis。 String redis_host = REDIS_HOST; int redis_port = REDIS_PORT; JedisPoolConfig config = new JedisPoolConfig(); //配置最大jedis实例数 config.setMaxTotal(10);
jedis(java连接redis)
jedis(java连接redis)
使用Jedis连接Redis
使用Jedis连接redis跟我们使用jdbc连接数据库特别向,话不多说,直接上代码。 需要引入的jar包 这里我建的是maven工程,pom坐标配置如下 &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; ...
手写一个Jedis以及JedisPool
欢迎将公众号设置为星标,技术文章第一时间看到。我们将一如既往精选技术好文,提供有价值的阅读。如果文章对你有帮助,欢迎点个在看鼓励作者。技术经验交流:点击入群Redis、J...
jedis:连接池(JedisPool)使用示例
Jedis实例不是线程安全的,所以不可以多个线程共用一个Jedis实例,但是创建太多的实现也不好因为这意味着会建立很多sokcet连接。 JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中获取Jedis实例,使用完后再把Jedis实例还回JedisPool。这种方式可以避免创建大量socket连接并且会实现高效的性能. JedisPool初
Java 客户端 Jedis和JedisPool 连接池
Jedis客户端 jedis是java客户端 jedis.set(&quot;helloword&quot;); &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;redis.clients&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;jedis&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;2.9.0&amp;lt;/version&
jedis通过JedisSentinelPool获取jedis操作redis
jedis通过JedisSentinelPool获取jedis操作redis,通过配置sentienl,获取sentinel连接池,通过sentinel,获取jedis信息
【九】redis的Java客户端:Jedis的使用及JedisPool的配置优化
Jedis的方法,方法命跟redis命令行客户端几乎一样,参数及参数顺序以跟redis命令行客户端几乎一样。 这里不一一介绍,直接Jedis. 会有提示。 pom.xml &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; &amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xm...
Redis工具类,使用JedisPool,并设置jedis连接池的参数
RedisUtil import java.util.Set; import redis.clients.jedis.Jedis; public class RedisUtil { /** * set保存 * @param key * @param value */ public static void setValue(String key, String value)
SpringBoot、Redis、Jedis(JedisPool) 分布式锁、分布式限流 详解
前言:网上针对基于Redis的分布式锁,分布式限流的教程很多,也很全面,但是大多重点着墨于分布式锁和限流的实现细节,笔者阅读完之后,可以很好的梳理出 相应的逻辑,但是具体操作时,却发现缺少了Jedis连接池的部分细节,导致仍然要花点时间去研究下,所以 笔者想写一篇Blog从头至尾介绍 Jedis配置、分布式锁、分布式限流的实现细节,目的在于 让读者仅靠一篇Blog就可以实操基于Redis的分布式锁...
java连接Redis单线程版本_使用JedisPool
-----------------------------------------------------------------1 类1:JedisClientSingle: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Componen...
jedis 连接redis超时异常
1、redis 部署环境 centos7.0 2、通过jedis 源码调试 出现错误,如下 Exception in thread “main” redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
Jedis连接Redis异常的问题
jedis连接Redis异常: Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect at redis.clients.jedis.Connection.connect(Connection.java:154) at redis.clients.jedis.BinaryClient.
使用 Jedis 连接操作 Redis
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list...
Jedis连接Redis问题记录
今天在用Jedis连接Redis数据库时,不停的报出以下错误,搜罗网上各种信息,也没解决。 因为我是在本地安装的虚拟机,在虚拟机安装的Redis,以下是我报错的代码: public class JedisAdapter { public static void print(int index,Object obj) { System.out.println(Strin...
使用Jedis连接Redis数据库
本课程旨在教会学员熟练使用redis命令,键值设计原则,redis在Linux主从配置部署及redis集群搭建,以及本人在生产项目中对redis的实战运用,其核心目的是为了学员在企业开发中能够得心应手的使用Redis并且在企业开发中对Redis进行服务集群的搭建做准备。<br /><br />
【Java】使用Jedis连接redis
Jedis简介实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis,对于主流语言,Redis都提供了对应的客户端;https://redis.io/clientshttps://redis.io/clients#java提供了很多客户端 官方推荐的是Jedis  托管地址:https://github.com/xetorthio/jedisJedis连接 HelloWorld...
Centos7下的Redis集群搭建与Jedis连接
centos下的redis安装(Redis官网)Redis集群知识 Redis集群介绍 Redis 集群的数据分片 Redis 集群的主从复制模型 Redis 一致性保证 搭建并使用Redis集群 搭建集群 Creating a Redis Cluster using the create-cluster script 使用集群 shell中尝试连接redis单个服务器并用info获得信息 Jedi
jedis 连接redis问题记录
redis conn time out, (error) NOAUTH Authentication requiredconn denied
Jedis操作Redis连接错误解决
 连接Redis时出现以下错误 redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out 检查了虚拟机的ip和Redis的端口,均无错误  1、防火墙放行6379端口 2、更改配置文件,注释掉:bind 127.0.0.1 3、关...
通过jedis连接池连接redis
首先启动jedis服务,然后需要导入两个jar包(conmons-pool-1.6.jar、jedis-2.1.0,jar),已放到我的资源中。 下载地址:http://download.csdn.net/download/qq_39045774/9973755 完成以上工作后: 1、创建一个双重锁的连接池: package jedisTest; import
Jedis 连接redis的坑(连接超时)
Jedis jedis = new Jedis(&quot;172.0.0.1&quot;,6379); System.out.println(jedis.ping()); if(jedis !=null){     jedis.close(); }   上面的代码运行就会抛异常,在网上找了一下午,遍寻无果,愤然删了从来,也关了防火墙,最后想甩电脑的时候, 把127.0.0.1  -&amp;gt; local...
jedis 用于连接redis的客户端
jedis-2.7.2.jar,Jedis是 Redis官方首选的Java客户端开发包,用于java开发使用,有需要的赶快下载吧!
Java Jedis连接云服务器Redis
在写Java程序时,使用Jedis连接阿里云的Redis public static void main(String[] args) { Jedis jedis = new Jedis(&quot;服务器IP(公有)&quot;, 6379); System.out.println(jedis.ping()); } 刚开始有可能会报错 redis.clients...
Redis学习10之Jedis连接redis和使用
Jedis连接redis和使用: 环境:jedis2.7.3 redis 3.0.3 1.下载地址:https://github.com/xetorthio/jedis/releases 可以git或者下载压缩包再解压,放在clients下,并将文件名改为jedis 2.在jedis下编译: xubo@xubo:~/cloud/redis/clients/jedis
使用jedis连接redis,关闭连接问题
1、问题描述: 今天项目运行时,突然报如下错误: Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 我的第一反应是jedis的连接池中没有可用连接了,直接把连接池jeidsPool连接数增大一下 但是一段时间之后,又开始报...
jedis源码分析(二)-JedisPool连接池实现
上一章节我们通过jedis学习了实现存放机制,本章节我们通过jedisPool的操作理解连接池的应用,jedisPool的源码实现。jedisPool连接池示例import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;import redis.clients.jedis.Jedis;import ...