`

Jedis使用

 
阅读更多

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

 

 

 

1 Jedis简介

 

JedisRedisjava客户端。我们可以在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的简单使用代码如下:

 

import redis.clients.jedis.Jedis;

 

/**

 * 简单使用jedis

 *

 * @author xmong

 */

publicclass TestJedis {

 

    // redis服务器主机

    static String host = "172.30.5.117";

    // 端口号

    staticintport = 6379;

    publicstaticvoid main(String[] args) {

       // 根据redis主机和端口号实例化Jedis对象

       Jedis jedis = new Jedis(host, port);

       // 添加key-value对象,如果key对象存在就覆盖该对象

       jedis.set("name", "xmong");

       // 查取keyvalue值,如果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包引入工程外,还需要将apachecommons-pool-xx包也引入工程,因为 JedisPool实际是应用apacheGenericObjectPool来作为redis连接经管pool的,这点可以从分析Jedis的源码知道。

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

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

 

    #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

 

 

 

代码实现如下:

 

import java.util.ResourceBundle;

 

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

 

/**

 * jedis池使用

 *

 * @author xmong

 */

publicclass MyJedisPool {

 

    // jedis

    privatestatic JedisPool pool;

    // 静态代码初始化池配置

    static {

       // 加载redis配置文件

       ResourceBundle bundle = ResourceBundle.getBundle("redis");

       if (bundle == null) {

           thrownew 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池方法

     */

    publicstaticvoid 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);

    }

 

    publicstaticvoid 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

 */

publicclass MyJedisPool {

 

    // jedis

    privatestatic JedisPool pool;

    // shardedJedis

    privatestatic ShardedJedisPool shardPool;

    // 静态代码初始化池配置

    static {

       // 加载redis配置文件

       ResourceBundle bundle = ResourceBundle.getBundle("redis");

       if (bundle == null) {

           thrownew 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池方法

     */

    publicstaticvoid 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池方法

     */

    publicstaticvoid 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);

    }

 

    publicstaticvoid main(String[] args) {

       // test1();//执行test1方法

       test2();// 执行test2方法

    }

}

 

 

 

执行结果为:

 

    xmong_aaa  

    xmong_zzz

 

 

 

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

 

package com.jedis;

 

import redis.clients.jedis.Jedis;

 

/**

 * 简单使用jedis

 * @author xmong

 *

 */

publicclass TestJedis {

 

    //redis服务器主机

    static String host = "172.30.5.113";

    //端口号

    staticintport = 6379;

   

    publicstaticvoid main(String[] args) {

       //根据redis主机和端口号实例化Jedis对象

       Jedis jedis = new Jedis(host, port);

       //查取keyvalue值,如果key不存在返回null

       String value1 = jedis.get("aaa");

       System.out.println(value1);

       String value2 = jedis.get("zzz");

       System.out.println(value2);

    }

}

 

 

 

执行结果为:

 

    xmong_aaa  

    null

 

 

 

修改redis服务器

 

    static String host = "172.30.5.117";

 

 

 

执行结果为:

 

    null

    xmong_zzz

 

 

 

从测试结果可以知道,ShardedJedis实现了Redis的分布存储,分别从不同的redis服务器查取结果可以得知,ShardedJediskeyaaa的值存储到了ip113redis服务器上,把keyzzz的值存储到了ip117的服务器上。

 

分享到:
评论

相关推荐

    jedis使用指南.pdf

    《Jedis使用指南》 Jedis是Java语言中广泛使用的Redis客户端库,它提供了全面的Redis操作API,支持包括键值存储、哈希表、集合、有序集合等多种数据结构的操作。本文将深入探讨Jedis的关键特性,特别是其API支持、...

    redis jredis jedis 使用

    标题中的“redis jredis jedis 使用”表明我们将探讨三个与Redis相关的Java客户端库:Redis本身、JRedis和Jedis。Redis是一个开源的、基于内存的数据结构存储系统,常被用作数据库、缓存和消息中间件。而JRedis和...

    Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】.docx

    《Jedis使用总结:Pipeline、分布式ID生成器与分布式锁》 Jedis是Redis的Java客户端,它提供了丰富的API来与Redis服务器进行交互。本文将深入探讨Jedis在Pipeline、分布式ID生成器以及分布式锁(包括watch和multi...

    jedis使用指南

    Jedis使用总结 前段时间细节的了解了Jedis的使用,Jedis是redis的java版本的客户端实现。 本文做个总结,主要分享如下内容: 【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】 好了...

    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文档-...

    redis集成 jedis使用

    Jedis是Java语言中广泛使用的Redis客户端,提供了丰富的API来操作Redis服务器。在本文中,我们将深入探讨如何集成Redis并使用Jedis进行五种基本数据类型的测试:字符串(Strings)、哈希(Hashes)、列表(Lists)、...

    jedis jedis.jar

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

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

    本示例将详细介绍如何在Java应用中使用Jedis进行基本操作。 首先,我们需要在项目中引入Jedis的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;redis.clients &lt;artifactId&gt;...

    jedis单机版,集群版工具类

    在本文中,我们将深入探讨 Jedis 的单机版和集群版使用,以及如何利用它来实现各种 Redis 操作。 ### 单机版 Jedis 使用 在单机版 Redis 设置中,Jedis 作为客户端直接与单个 Redis 服务器进行通信。以下是一些...

    Jedis序列化和反序列化使用jar

    4. commons-pool2-2.3.jar:这是一个对象池库,Jedis使用它来管理和复用连接,提高性能。 5. commons-logging-1.2.jar:Apache Commons Logging提供了一个统一的日志接口,使得应用可以在不修改代码的情况下切换...

    jedis2.x使用指南.pdf

    jedis的性能优化主要依赖于对象池的配置,jedis使用Apache的commons-pool实现对象池。可以通过配置对象池的参数来优化jedis的性能。同时,jedis还提供了一些扩展包,可以在特定场景下增强jedis的能力。

    Jedis的使用.pdf

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

    Jedis-Common-Pool

    标题中的“Jedis-Common-Pool”指的是Jedis,一个流行的Java客户端库,用于与Redis内存数据存储系统交互,以及Apache Commons Pool 2,这是一个对象池实现,Jedis使用它来管理Redis连接的生命周期,提高性能和资源...

    jedis简单实例

    下面是一个简单的Jedis应用示例,展示了如何使用Jedis进行字符串操作、哈希操作和连接池的使用。 ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis....

    jedis-2.8-src

    3. **线程安全**:Jedis 实例不是线程安全的,推荐每个线程使用单独的实例,或者在使用后及时关闭,以避免并发问题。 4. **命令分片支持**:对于大规模数据,Jedis 支持命令分片,可以在多个 Redis 节点上并行执行...

    Jedis测试Demo

    以下是Jedis使用的关键知识点: 1. **Jedis的安装与引入**:首先,你需要在项目中添加Jedis的依赖,如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;redis.clients &lt;artifactId&gt;jedis ...

    Jedis源码-供查询redis API源码

    4. **Pooling** - 为了有效地管理连接资源,Jedis使用了连接池(`JedisPool`和`GenericObjectPoolConfig`)。连接池可以减少创建和销毁连接的开销,提高系统效率。 5. **Exception Handling** - Jedis封装了与Redis...

    java jedis redis 接口工具类

    ### 单机版Jedis使用 1. **初始化Jedis实例**:首先,我们需要创建一个Jedis实例,传入Redis服务器的IP地址和端口号。 ```java Jedis jedis = new Jedis("localhost", 6379); ``` 2. **基本操作**:然后,你可以...

    jedis-2.7.2.jar和它的依赖包

    Jedis 使用这个库来实现连接池管理,有效地复用Redis连接,提高系统性能并减少资源消耗。 2. **hamcrest-core-1.3.jar**:Hamcrest 是一个匹配对象的框架,通常用于单元测试中进行断言。在Jedis的源代码中,它可能...

    jedis-jedis-2.5.0.tar.gz

    下面是一些基本的Jedis使用示例: - 设置和获取字符串: ```java Jedis jedis = new Jedis("localhost"); jedis.set("key", "value"); String value = jedis.get("key"); ``` - 操作列表: ```java jedis...

Global site tag (gtag.js) - Google Analytics