jedis

spring整合redis时出现的异常Error creating bean with name 'JedisConnectionFactory' defined in URL

喜你入骨 提交于 2019-12-11 02:00:50
异常如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘JedisConnectionFactory’ defined in URL [jar:file:/D:/DevelopTools/maven_repository/com/pinyougou/pinyougou-common/1.0-SNAPSHOT/pinyougou-common-1.0-SNAPSHOT.jar!/spring/applicationContext-redis.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: redis.clients.jedis.JedisShardInfo.setTimeout(I)V at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) at org.springframework.beans

Redis exception with transactions with Jedis client

倾然丶 夕夏残阳落幕 提交于 2019-12-10 22:44:16
问题 In order to avoid duplicates in my redis channel I'm checking if the message is already there by keeping an index in Redis set. Following is my implementation. However, it is giving an exception. redis.clients.jedis.exceptions.JedisDataException: Please close pipeline or multi block before calling this method. at redis.clients.jedis.Response.get(Response.java:23) Here is the implementation. Jedis jedis = pool.getResource(); String id = message.getId(); Transaction transaction = jedis.multi();

Redis hash very slow writing speed

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-10 19:53:30
问题 I'm facing a very strange issue : i get really crappy writing speeds when using redis (in a ideal world the writing speed should be approaching the writing speed on RAM). Here is my benchmark : package redisbenchmark; import redis.clients.jedis.Jedis; public class RedisBenchmark { private static final String REDIS_KEY = "anon_id"; private Jedis conn; private long writeTimeNano=0; private RandomString stringGenerator; private String[] fields; public RedisBenchmark(){ conn = new Jedis(

分布式锁的由来、特点、及Redis分布式锁的实现详解

三世轮回 提交于 2019-12-10 11:09:55
什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 1.线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。 2.进程锁 为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。 3.分布式锁 当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。 分布式锁的由来 在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。 但是在分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机并发控制锁策略失效,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。 当多个进程不在同一个系统中,就需要用分布式锁控制多个进程对资源的访问。 分布式锁的特点 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: **1、互斥性:**任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。 **2、安全性:*

Java中使用Jedis操作Redis

早过忘川 提交于 2019-12-10 08:46:42
使用Java操作Redis需要jedis-2.1.0.jar,下载地址: http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip 如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip package com.test; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; public class TestRedis { private Jedis jedis; @Before public void setup() { //连接redis服务器,192.168.0.100:6379 jedis = new Jedis("192.168.0.100", 6379); //权限认证 jedis.auth("admin"); } /** * redis存储字符串 */ @Test

jedis异常:Timeout waiting for idle object

拈花ヽ惹草 提交于 2019-12-10 07:04:41
项目线上环境发现: java.util.NoSuchElementException: Timeout waiting for idle object 问题原因:不应该在try中释放资源,而应该在finally中处理。虽然是非常基础的语法,但还是有可能会写错,维护老系统时发现很几处都存在这种潜在的Bug,引以为戒。在try中释放资源,每当出现一次异常将会导致一个jedis对象无法释放, pool池中可用的jedis对象资源会越来越少,最终将会导致java.util.NoSuchElementException: Timeout waiting for idle object。这种问题是一个慢性问题,需要时间积累才会发作。 由于请求无法获取空闲对象,页面会出现服务端500错误。若代码加入循环获取jedis将还可能出现服务器宕机。 正确代码如下: try { jedis = pool.getResource(); // xxx 业务代码 // 原来代码:pool.returnResource(jedis);,应该放在finally块中,否则每次发生异常将导致一个jedis对象没有被t } catch (RuntimeException e) { if(jedis != null ) { pool.returnBrokenResource(jedis); }} finally{ //

jedis异常:NoSuchElementException: Timeout waiting for idle object

戏子无情 提交于 2019-12-10 06:55:43
项目线上环境发现: java.util.NoSuchElementException: Timeout waiting for idle object 问题原因:不应该在try中释放资源,而应该在finally中处理。虽然是非常基础的语法,但还是有可能会写错,维护老系统时发现很几处都存在这种潜在的Bug,引以为戒。在try中释放资源,每当出现一次异常将会导致一个jedis对象无法释放, pool池中可用的jedis对象资源会越来越少,最终将会导致java.util.NoSuchElementException: Timeout waiting for idle object。这种问题是一个慢性问题,需要时间积累才会发作。 由于请求无法获取空闲对象,页面会出现服务端500错误。若代码加入循环获取jedis将还可能出现服务器宕机。 try { jedis = pool.getResource(); // xxx 业务代码 // 原来代码:pool.returnResource(jedis);,应该放在finally块中,否则每次发生异常将导致一个jedis对象没有被t } catch (RuntimeException e) { if(jedis != null ) { pool.returnBrokenResource(jedis); } } finally{ // 正确释放资源

异常最诡异第二期之 Jedis pool.returnResource(jedis)

╄→尐↘猪︶ㄣ 提交于 2019-12-10 06:34:09
# Redis 谁的问题最诡异第二期 commons-collections-3.2.jar # 1 Exception in thread "main"java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList 分析:Redis的JavaAPI中Jedis错误,看到这个你肯定会觉得这个问题有点低级,确实低级,不用看都知道是少导了jar包引起的,不过这不是重点,重点是Jedis中的一个方法: pool.returnResource(jedis); 这个才是重点中的重点,接下来我们看看这个方法的描述: voidredis.clients.util. Pool .returnResource( Jedis jedis) 可以看出这里面并没有抛出异常的声明子类的,那我们就不会去try-catch了,不去try-catch的后果就是会出现莫名其妙的错误,不try-catch会出现一个 java.lang.NullPointerExceptio 这样的空指针异常,这样的信息给我们是没用的,这是我们缺少jar包导致的问题,这里却提示 java.lang.NullPointerException 这样的空指针异常,这不是坑爹么?(完全不是我们想要的东西)、、、然后就开始坑爹了

使用Spring + Jedis集成Redis

◇◆丶佛笑我妖孽 提交于 2019-12-10 06:33:55
一、集成环境 Tomcat7 JDK1.7 Jedis-2.7.2 Spring-4.1.6 二、资源依赖 (省略,网上很多) 三、集成过程 1、配置资源池 这里使用Jedis的ShardedJedisPool来管理,我们定义该配置文件为:spring-redis.xml,全部内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http:/

jedis高版本的JedisPoolConfig没有maxActive和maxWait

≡放荡痞女 提交于 2019-12-10 06:22:59
jedis包括2.4.1,2.5.1等高版本的JedisPoolConfig没有maxActive属性,不能按照网上那些方式去配置redis了,网上大部分搜索出来的redis配置都是基于旧版本的jedis,在jedis新版本,JedisPoolConfig没有maxActive和maxWait属性,已经被替换成其他的命名。 通过查找可知高版本的jedis使用了org.apache.commons.pool2.impl.GenericObjectPoolConfig。 所以高版本jedis配置JedisPoolConfig的maxActive,maxWait应该为: < bean id = "jedisPoolConfig" class = "redis.clients.jedis.JedisPoolConfig" > < property name = "maxIdle" value = "${redis.pool.maxIdle}" /> < property name = "maxTotal" value = "${redis.pool.maxActive}" /> < property name = "maxWaitMillis" value = "${redis.pool.maxWait}" /> < property name = "testOnBorrow" value