`

Redis的java客户端Jedis配置与使用

 
阅读更多

使用jedis java客户端 

 

一:一个简单的示例代码:

[java]   view plain copy
  1. public   static   void  main(String[] args) {  
  2.     Jedis jedis = new  Jedis( "147.151.240.234" , 6379 );  
  3.     jedis.set("foo" "bar" );  
  4.     String value = jedis.get("foo" );  
  5.     System.out.println(value);  

 

二:spring中配置


首先,在项目中引入jeids的jar包。   

Xml代码   收藏代码
  1. <!-- java readis客户端 -->     
  2. < dependency >     
  3.     < groupId > redis.clients </ groupId >     
  4.     < artifactId > jedis </ artifactId >     
  5.     < version > 2.0.0 </ version >     
  6. </ dependency >    



其次,在spring配置文件中添加配置(也可以直接new出这些对象,一样的) 

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
    <property name="maxActive"  value="50" />  
    <property name="maxIdle" value="10" />  
    <property name="maxWait" value="1000" />  
    <property name="testOnBorrow"  value="true"/>  
</bean>  
  
<bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo">  
    <constructor-arg index="0" value="这里填你的reids服务器ip" />  
    <constructor-arg index="1" value="6379" />  
</bean>  
  
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">  
    <constructor-arg index="0" ref="jedisPoolConfig" />  
    <constructor-arg index="1">  
        <list>  
            <ref bean="jedis.shardInfo" />  
        </list>  
    </constructor-arg>  
</bean> 
 
最后,调用的时候

 

Java代码   收藏代码
  1. ShardedJedis jedis =  shardedJedisPool.getResource();    
  2.    jedis.get(key); //从redis服务器获取值     
  3.    jedis.set(key, value); //将值保存到redis服务器     

 

jedis pool的问题

在使用jedis pool时遇到了这个问题:It seems like server has closed the connection

原因分析:

1.redis server 关闭了此客户端的连接:server端设置了maxidletime(默认是5分钟),服务端会不断循环检测clinet的最后一次通信时间(lastinteraction),如果大于maxidletime,则关闭连接,并回收相关资源。client在向该连接中写数据后就会由于server端已经关闭而出现 broken pipe的问题。

2.pool的设置错误:

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxActive"  value="20" />
        <property name="maxIdle" value="10" />
        <property name="maxWait" value="1000" />
    </bean>
	<!-- jedis shard信息配置 -->
    <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo">
        <constructor-arg index="0" value="*.*.*.*" />
        <constructor-arg index="1" value="6379" />
    </bean>

    <!-- jedis shard pool配置 -->
    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
                <ref bean="jedis.shardInfo" />
            </list>
        </constructor-arg>
    </bean>

    <bean id="jedisCommands" factory-bean="shardedJedisPool"
        factory-method="getResource" />
 

上面的这种配法在spring初始化时获取一次实例化jedisCommands,而后每次的redis的调用时并未从pool中获取

解决方案:

设置

    <!-- POOL配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxActive"  value="20" />
        <property name="maxIdle" value="10" />
        <property name="maxWait" value="1000" />
        <property name="testOnBorrow"  value="true"/>
    </bean>

    <!-- jedis shard信息配置 -->
    <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo">
        <constructor-arg index="0" value="*.*.*.*" />
        <constructor-arg index="1" value="6379" />
    </bean>

    <!-- jedis shard pool配置 -->
    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
                <ref bean="jedis.shardInfo" />
            </list>
        </constructor-arg>
    </bean>

 

 

最近初次尝试使用redis,java客户端采用的jedis,写了几个简单的类满足基本的服务器配置,以及客户端对象的使用等。

客户端对象的创建
[java]   view plain copy
  1. package  jediscache.common;  
  2.   
  3. import  redis.clients.jedis.Jedis;  
  4. import  redis.clients.jedis.JedisPool;  
  5. import  redis.clients.jedis.JedisPoolConfig;  
  6. import  redis.clients.jedis.Protocol;  
  7.   
  8. public   class  JedisFactory {  
  9.       
  10.     private  JedisPoolConfig jedisPoolConfig;  
  11.       
  12.     private  JedisPool jedisPool;  
  13.   
  14.     public  JedisFactory(JedisPoolConfig jedisPoolConfig) {  
  15.         super ();  
  16.         this .jedisPoolConfig = jedisPoolConfig;  
  17.     }  
  18.       
  19.     public  Jedis getJedisInstance(String host) {  
  20.         return  getJedisPool(host, Protocol.DEFAULT_PORT).getResource();  
  21.     }  
  22.       
  23.     public  Jedis getJedisInstance(String host,  int  port) {  
  24.         return  getJedisPool(host, port).getResource();  
  25.     }  
  26.       
  27.     public  JedisPool getJedisPool(String host) {  
  28.         return  getJedisPool(host, Protocol.DEFAULT_PORT);  
  29.     }  
  30.   
  31.     public  JedisPool getJedisPool(String host,  int  port) {  
  32.         if  (jedisPool ==  null ) {  
  33.             jedisPool = new  JedisPool(jedisPoolConfig, host, port);  
  34.         }  
  35.         return  jedisPool;  
  36.     }  
  37.       
  38.     /**  
  39.      * 配合使用getJedisInstance方法后将jedis对象释放回连接池中  
  40.      *   
  41.      * @param jedis 使用完毕的Jedis对象  
  42.      * @return true 释放成功;否则返回false  
  43.      */   
  44.     public   boolean  release(Jedis jedis) {  
  45.         if  (jedisPool !=  null  && jedis !=  null ) {  
  46.             jedisPool.returnResource(jedis);  
  47.             return   true ;  
  48.         }  
  49.         return   false ;  
  50.     }  
  51.   
  52. }  

 

使用客户端对象
[java]   view plain copy
  1. public   void  testLpush() {  
  2.     JedisFactory factory = new  JedisFactory( new  JedisPoolConfig());  
  3.     Jedis jedis = factory.getJedisInstance("localhost" );  
  4.       
  5.     try  {  
  6.         String word = "word" ;  
  7.         jedis.lpush(word, "first" );  
  8.         jedis.lpush(word, "second" );  
  9.         jedis.lpush(word, "three" );  
  10.         System.out.println("word : "  + jedis.lrange(word,  0 , - 1 ));  
  11.     } finally  {  
  12.         factory.release(jedis);  
  13.     }  
  14. }  


 

分享到:
评论

相关推荐

    redis java客户端 jedis

    一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载相关源码 这里对其进行一个简单封转 包括key valye set list hashset的封装

    Redis Java客户端Jedis 2.9.0 jar包(含common-pool2)

    Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...

    Redis的Java客户端Jedis

    **Redis的Java客户端Jedis详解** Redis是一款高性能的键值对数据存储系统,常用于缓存、消息中间件等场景。而Jedis是Redis官方推荐的Java语言客户端,提供了丰富的API来与Redis服务器进行交互。在2018年6月10日,...

    Redis Java客户端Jedis 2.9.0 jar+commons-pool2-2.4.2

    Java客户端Jedis是Redis官方推荐的Java语言接口库,它提供了丰富的API来操作Redis服务器。Jedis 2.9.0是该库的一个稳定版本,适用于各种Java项目与Redis服务器进行交互。 在Jedis 2.9.0版本中,主要包含了以下功能...

    jedisRedis的Java客户端

    Jedis是Redis的Java客户端,它提供了一个丰富的API来操作Redis数据存储系统。Redis是一个高性能的键值数据库,常用于缓存、消息中间件以及数据结构服务器等场景。Jedis作为Java开发者与Redis交互的主要工具,使得在...

    redis相关jar包(redis2.1.5、jedis2.9.0)

    在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...

    spring_redis集成(jedis java客户端)

    spring_redis集成,通过jedis作为redis的客户端。 只提供集成方式,具体api,参照jedis API

    redis的Java客户端jedis池的介绍及使用.rar

    通过上述内容,我们了解了Redis的Java客户端Jedis池的基本概念、配置和使用。在实际开发中,正确使用JedisPool能够显著提升应用性能,同时降低资源消耗。在设计系统时,应充分考虑连接池的管理,确保系统的稳定性和...

    redis的Java客户端jedis使用示例.rar

    Jedis是Java社区中最常用的Redis客户端库,它提供了丰富的API来操作Redis服务器。本示例将详细介绍如何在Java应用中使用Jedis进行基本操作。 首先,我们需要在项目中引入Jedis的依赖。如果你使用的是Maven,可以在...

    各种版本的redis+Jedis驱动包

    4. **Jedis**:Jedis是Java语言的Redis客户端库,它提供了丰富的API,使Java开发者能够方便地与Redis进行交互。Jedis支持各种Redis命令,包括数据类型操作、事务处理、发布/订阅、持久化等。在实际项目中,通过Jedis...

    Redis客户端之Jedis

    Java开发人员通常选择Jedis作为与Redis交互的客户端库,因为其简单易用且功能强大。本文将详细介绍如何使用Jedis在Java环境中连接和操作Redis。 ### 一、Jedis简介 Jedis是Java开发的Redis官方推荐的客户端,它...

    redis+spring jedis方式

    Jedis是Redis官方推荐的Java客户端,它提供了一套完整的Redis命令实现。虽然Spring Data Redis提供了更高级别的抽象,但有时直接使用Jedis可以实现更复杂的操作或优化性能。Jedis支持连接池,以提高并发性能。如果你...

    (重新整理版)redis的java客户端jedis 管理类代码 支持主从复制的自动选择和自动恢复,读/写分离

    * redis主从架构的jedis客户端管理类,大概1000多行代码左右 * 1 支持主从复制key/value,pop/push,pub/sub,读/写分离等功能的灾难失败自动选择和恢复 * 2 可以选择读写分离功能,主写从读,默认不启用,都使用主服务...

    java连接Redis所需jedis客户端包(jedis2.7+commons-pool2)

    Java连接Redis时,通常会使用Jedis作为客户端库,因为它是一个简单、高效的Redis客户端。标题中的"java连接Redis所需jedis客户端包(jedis2.7+commons-pool2)"指的是在Java环境中,为了实现与Redis数据库的交互,我们...

    jedis-2.9.0 最新版Redis客户端CSDN下载

    总之,Jedis作为Redis的Java客户端,为开发者提供了便捷、高效的接口,是Java开发者与Redis交互的首选工具。通过深入理解和熟练使用Jedis,你可以充分发挥Redis在数据存储和处理方面的强大能力。

    redis的Java客户端开发包Jedis

    总的来说,Jedis作为Redis的Java客户端,提供了全面且高效的Redis操作接口,是Java开发者在进行Redis相关开发时的首选工具。在实际项目中,结合连接池管理和适当的配置调整,可以确保应用程序在处理大量并发请求时...

    java调用redis工具类jedis

    Java调用Redis工具类Jedis是Java开发人员在与Redis进行数据交互时常用的库。Redis是一个高性能的...通过理解并熟练运用这些知识点,你将能够有效地使用Java通过Jedis与Redis进行数据交互,实现高效的数据存储和读取。

    redis的java客户端jedis 管理类代码 支持主从复制的自动选择和自动恢复,读/写分离

    * redis主从架构的jedis客户端管理类,大概1000行代码左右 * 1 支持主从复制key/value,pop/push,pub/sub,读/写分离等功能的灾难失败自动选择和恢复 * 2 可以选择读写分离功能,主写从读,默认不启用,都使用主服务进行...

    redis java 客户端

    接下来,我们关注Java客户端与Redis的交互。Java提供了多种Redis客户端库,如Jedis、Lettuce等,这里以常用的Jedis为例: 1. 添加依赖:在你的项目中,需要添加Jedis的依赖库。如果是Maven项目,可以在pom.xml中...

    Redis及使用Jedis开发所需jar

    在Java开发环境中,为了使用Jedis与Redis进行交互,我们需要引入相应的jar包。这些jar包通常包含了Jedis库本身和其依赖的其他库,如连接池管理、网络通信等组件。"Redis4JavaDev"这个压缩包很可能包含了这些必要的...

Global site tag (gtag.js) - Google Analytics