`
xmong
  • 浏览: 263476 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
Jedis小使用

目录
1 JEDIS简介 1
2 JEDIS简单使用 1
3 JEDIS的池使用 2
4 JEDIS的分布式 4

1 Jedis简介

Jedis是Redis的java客户端。我们可以在java编程中使用它来编写java代码访问Redis服务。
关于Redis简绍:http://xmong.iteye.com/blog/1840242

要使用Jedis可以通过maven来获取
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.1.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>


也可以通过下面路径来下载Jedis包,将包加到java工程里面就可以了。
https://github.com/xetorthio/jedis/downloads
当前使用的包名:jedis-2.1.0.jar

2 Jedis简单使用

Jedis的简单使用代码如下:
package com.jedis;

import redis.clients.jedis.Jedis;

/**
 * 简单使用jedis
 * @author xmong
 *
 */
public class TestJedis {

	//redis服务器主机
	static String host = "172.30.5.117";
	//端口号
	static int port = 6379;	
	
	public static void main(String[] args) {
		//根据redis主机和端口号实例化Jedis对象
		Jedis jedis = new Jedis(host, port);
		//添加key-value对象,如果key对象存在就覆盖该对象
		jedis.set("name", "xmong");
		//查取key的value值,如果key不存在返回null
		String value = jedis.get("name");
		System.out.println(value);
		//删除key-value对象,如果key不存在则忽略此操作
		jedis.del("name");
		//判断key是否存在,不存在返回false存在返回true
		jedis.exists("name");
	}
	
}


3 Jedis的池使用

我们在实现jedis池使用的时候除了要将jedis包引入工程外,还需要将apache的commons-pool-xx包也引入工程,因为JedisPool实际是应用apache的GenericObjectPool来作为redis连接经管pool的,这点可以从分析Jedis的源码知道。

Commons-pool-1.6.jar包下载:
http://commons.apache.org/proper/commons-pool/download_pool.cgi

Redis配置文件(redis.properties)如下:

###redis##config########
#redis服务器ip # 
redis.ip=172.30.5.117
#redis服务器端口号#
redis.port=6379

###jedis##pool##config###
#jedis的最大分配对象#
jedis.pool.maxActive=1024
#jedis最大保存idel状态对象数 #
jedis.pool.maxIdle=200
#jedis池没有对象返回时,最大等待时间 #
jedis.pool.maxWait=1000
#jedis调用borrowObject方法时,是否进行有效检查#
jedis.pool.testOnBorrow=true
#jedis调用returnObject方法时,是否进行有效检查 #
jedis.pool.testOnReturn=true


代码实现如下:
package com.jedis;

import java.util.ResourceBundle;

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

/**
 * jedis池使用
 * @author xmong
 *
 */
public class MyJedisPool {
	
	//jedis池
	private static JedisPool pool;  
	//静态代码初始化池配置
	static { 
		//加载redis配置文件
	    ResourceBundle bundle = ResourceBundle.getBundle("redis");  
	    if (bundle == null) {  
	        throw new IllegalArgumentException("[redis.properties] is not found!");  
	    } 
	    //创建jedis池配置实例
	    JedisPoolConfig config = new JedisPoolConfig(); 
	    //设置池配置项值
	    config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));  
	    config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));  
	    config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));  
	    config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));  
	    config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));  
	    //根据配置实例化jedis池
	    pool = new JedisPool(config, bundle.getString("redis.ip"), 
	    		Integer.valueOf(bundle.getString("redis.port")));
	}
	
	/**
	 * 测试jedis池方法
	 */
	public static void test1(){
		//从jedis池中获取一个jedis实例
		Jedis jedis = pool.getResource();
				
		//获取jedis实例后可以对redis服务进行一系列的操作
		jedis.set("name", "xmong");
		System.out.println(jedis.get("name"));
		jedis.del("name");
		System.out.println(jedis.exists("name"));
		
		//释放对象池,即获取jedis实例使用后要将对象还回去
		pool.returnResource(jedis);		
	}

	public static void main(String[] args) {
		test1();//执行test1方法
	}

	
}


执行结果如下:
xmong
false


4 Jedis的分布式

Redis在容灾处理方面可以通过服务器端配置Master-Slave模式来实现。而在分布式集群方面目前只能通过客户端工具来实现一致性哈希分布存储,即key分片存储。Redis可能会在3.0版本支持服务器端的分布存储。
下面看看Jedis是怎样实现Redis分布存储的。
在上面的列子中我们只需要修改部分代码即可实现Redis的分布存储功能。
修改Redis配置文件中reidis服务器配置选项:
###redis##config########
#redis1服务器ip # 
Redis1.ip=172.30.5.113
#redis2服务器ip # 
Redis2.ip=172.30.5.117
#redis服务器端口号#
redis.port=6379


修改MyJedisPool实现如下:
package com.jedis;

import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/**
 * jedis池使用
 * @author xmong
 *
 */
public class MyJedisPool {
	
	//jedis池
	private static JedisPool pool; 
	//shardedJedis池
	private static ShardedJedisPool shardPool;
	//静态代码初始化池配置
	static { 
		//加载redis配置文件
	    ResourceBundle bundle = ResourceBundle.getBundle("redis");  
	    if (bundle == null) {  
	        throw new IllegalArgumentException("[redis.properties] is not found!");  
	    } 
	    //创建jedis池配置实例
	    JedisPoolConfig config = new JedisPoolConfig(); 
	    //设置池配置项值
	    config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));  
	    config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));  
	    config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));  
	    config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));  
	    config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));  
	    
	    //根据配置实例化jedis池
//	    pool = new JedisPool(config, bundle.getString("redis.ip"), 
//	    		Integer.valueOf(bundle.getString("redis.port")));
	    
	    //创建多个redis共享服务
	    JedisShardInfo jedisShardInfo1 = new JedisShardInfo(  
                bundle.getString("redis1.ip"), Integer.valueOf(bundle.getString("redis.port")));  
	    JedisShardInfo jedisShardInfo2 = new JedisShardInfo(  
                bundle.getString("redis2.ip"), Integer.valueOf(bundle.getString("redis.port")));  
  
	    List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();  
	    list.add(jedisShardInfo1);  
	    list.add(jedisShardInfo2);
	    
	    //根据配置文件,创建shared池实例
	    shardPool = new ShardedJedisPool(config, list);
	    
	}
	
	/**
	 * 测试jedis池方法
	 */
	public static void test1(){
		//从jedis池中获取一个jedis实例
		Jedis jedis = pool.getResource();
				
		//获取jedis实例后可以对redis服务进行一系列的操作
		jedis.set("name", "xmong");
		System.out.println(jedis.get("name"));
		jedis.del("name");
		System.out.println(jedis.exists("name"));
		
		//释放对象池,即获取jedis实例使用后要将对象还回去
		pool.returnResource(jedis);		
	}
	
	/**
	 * 测试shardedJedis池方法
	 */
	public static void test2(){
		//从shard池中获取shardJedis实例
		ShardedJedis shardJedis = shardPool.getResource();
		
		//向redis服务插入两个key-value对象
		shardJedis.set("aaa", "xmong_aaa");
		System.out.println(shardJedis.get("aaa"));
		shardJedis.set("zzz", "xmong_zzz");
		System.out.println(shardJedis.get("zzz"));
		
		//释放资源
		shardPool.returnResource(shardJedis);
	}
	
	public static void main(String[] args) {
		//test1();//执行test1方法
		test2();//执行test2方法
	}
	
}


执行结果为:
xmong_aaa
xmong_zzz


可以通过下面程序访问不同的redis服务来测试结果:
package com.jedis;

import redis.clients.jedis.Jedis;

/**
 * 简单使用jedis
 * @author xmong
 *
 */
public class TestJedis {

	//redis服务器主机
	static String host = "172.30.5.113";
	//端口号
	static int port = 6379;
	
	public static void main(String[] args) {
		//根据redis主机和端口号实例化Jedis对象
		Jedis jedis = new Jedis(host, port);
		//查取key的value值,如果key不存在返回null
		String value1 = jedis.get("aaa");
		System.out.println(value);
		String value1 = jedis.get("zzz");
		System.out.println(value);

	}
	
}


执行结果:
xmong_aaa
null

修改redis服务器
static String host = "172.30.5.117";


执行结果:
null
xmong_zzz


从测试结果可以知道,ShardedJedis实现了Redis的分布存储,分别从不同的redis服务器查取结果可以得知,ShardedJedis将key为aaa的值存储到了ip为113的redis服务器上,把key为zzz的值存储到了ip为117的服务器上。


分享到:
评论

相关推荐

    Jedis API中文使用文档.-比较详细

    Jedis API中文使用文档详解 Jedis 是 Redis 官方首选的 Java 客户端开发包,用于操作 Redis 数据库。下面是 Jedis API 的详细使用文档,适合新手和老程序员进行复习。 Jedis 的基本使用 Jedis 提供了多种方式来...

    jedis开发使用包

    总之,"jedis开发使用包"为你提供了一个基础的环境,可以开始使用Java与Redis进行数据交互。通过学习和理解Jedis的API以及如何配置和管理连接池,你可以有效地在Java应用中集成Redis服务,实现数据存储、高速缓存或...

    使用redisson替代jedis

    ### 使用Redisson替代Jedis 在分布式系统中,Redis作为一种高性能的键值存储数据库,被广泛应用于缓存、消息队列、数据同步等场景。在Java开发领域,开发者可以选择多种客户端来与Redis进行交互,其中最常用的是...

    jedis jedis.jar

    Jedis是Java开发的一款高效、轻量级的Redis客户端,专为处理Redis数据库服务而设计。Redis是一款开源的、高性能的...在实际使用中,应根据具体项目需求选择合适的版本,并确保正确配置和使用Jedis,以充分发挥其优势。

    jedis-3.6.0-API文档-中文版.zip

    赠送jar包:jedis-3.6.0.jar; 赠送原API文档:jedis-3.6.0-javadoc.jar; 赠送源代码:jedis-3.6.0-sources.jar; 赠送Maven依赖信息文件:jedis-3.6.0.pom; 包含翻译后的API文档:jedis-3.6.0-javadoc-API文档-...

    jedis-lock, Jedis分布式锁定支持.zip

    jedis-lock, Jedis分布式锁定支持 jedis锁使用Redis数据库和Jedis驱动程序,Jedis锁易于使用和简单的分布式锁实现。我怎么用它?你可以在以下位置下载latests构建: http://github.com/abelaska/jedis-lock/dow

    jedis相关jar包

    使用这个版本的Jedis,开发者可以进行基本的数据操作,如设置和获取键值、操作集合类型(如列表、集合、有序集合)、事务处理、发布订阅等。 关于标签“Redis Jedis”,我们可以理解为这个压缩包是针对使用Java开发...

    jedis源码 (学习jedis)

    Jedis的使用通常始于创建Jedis实例,通过连接池管理连接。在源码中,你可以看到`JedisPool`和`JedisPoolConfig`类,它们负责资源的管理和配置。使用`Jedis`对象执行命令,如`set`、`get`、`hset`、`lpush`等,以...

    jedis依赖jar包

    要在项目中使用Jedis,首先需要将`jedis-2.7.0.jar`添加到你的类路径中。如果你使用Maven,可以在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;redis.clients &lt;artifactId&gt;jedis &lt;version&gt;2.7.0 ``` 对于...

    英文 Jedis API 2.9.0

    本文将深入探讨Jedis 2.9.0的API特性,帮助开发者更好地理解和使用这一工具。 ### 1. 连接与配置 Jedis API首先涉及的是连接管理。`Jedis`类提供了一系列方法来创建、配置和关闭连接。例如,`Jedis jedis = new ...

    Redis及使用Jedis开发所需jar

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

    Jedis所需jar包

    在Java环境中与Redis进行交互,我们通常会使用Jedis这个客户端库。Jedis提供了丰富的API,能够帮助开发者轻松完成各种Redis操作,如设置和获取键值、执行事务、订阅/发布消息等。 Jedis的主要功能包括: 1. 基本...

    中间件:Redis 之 Jedis的使用

    ### 中间件:Redis 之 Jedis的使用 #### 一、Jedis简介 Jedis作为Redis官方推荐的Java客户端工具,在后端开发领域扮演着重要角色。它不仅提供了丰富的API来实现对Redis数据库的各种操作,而且还具备高效的连接池...

    Jedis的使用.pdf

    标题中的“Jedis的使用.pdf”表明这是一篇关于Jedis使用的手册或教程,而描述部分虽然没有给出具体信息,但通常会包含对Jedis的简介、使用场景或者使用方法的概述。标签“k12”可能表示这是面向基础教育阶段(K-12...

    jedis-2.9.0.jar

    **Jedis的使用** 1. **连接管理**:Jedis提供了连接池(Connection Pool)功能,通过`JedisPool`类实现,可以有效地管理和复用Redis连接,避免频繁创建和关闭连接带来的开销。使用`JedisPoolConfig`配置连接池参数...

    jedis安装包

    由于其高效性能和易于使用的API,Jedis成为了Java开发者首选的Redis连接工具。 二、安装Jedis 1. 添加依赖:如果你使用的是Maven项目,可以在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;redis.clients ...

    jedis5.1.0.jar

    jedis5.1.0.jar

    jedis-jedis-2.7.2

    Jedis是Java语言中用于操作Redis数据库的一个开源客户端库,其版本2.7.2是Jedis的一个稳定版本,提供了丰富的API来支持Redis的各种数据...通过熟练掌握Jedis的使用,开发者可以构建出更加高效、可扩展的分布式系统。

Global site tag (gtag.js) - Google Analytics