在 Java 中使用 redis

redis 支持很多語言的客戶端。在官方網站上有支持的所有的 redis 客戶端列表。

因為平時使用 java 作為開發(fā)語言,所以這里描述一下如何通過 java 來連接和操作 redis 服務器。在官方文檔中, Java 推薦的 redis 客戶端是 Jedis ,這里我們也用這個客戶端對 redis 服務器進行操作。


引入依賴

首先我們建立一個 maven 工程,在工程的 pom.xml 文件中加入 Jedis 的依賴引用。為了方便測試,還加入了 Junit 依賴。文件內容如下。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.x9710.common</groupId>
<artifactId>redis-util</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
</project>

創(chuàng)建連接類

建立 redis 連接類 com.x9710.common.redis.RedisConnection 。內容如下
package com.x9710.common.redis;

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

public class RedisConnection {
   /**
   * redis 連接池配置信息
   */
  private JedisPoolConfig jedisPoolConfig;
   /**
   * redis 服務器地址
   */
  private String ip;

  /**
   * redis 服務器端口
   */
  private Integer port;

  /**
   * redis 服務器密碼
   */
  private String pwd;

   /**
   * redis 服務器連接超時時間
   */
  private Integer timeOut;

   /**
   * redis 連接客戶端名稱
   */
  private String clientName = null;

  private JedisPool jedisPool;

   public void setJedisPoolConfig(JedisPoolConfig jedisPoolConfig) {
     this.jedisPoolConfig = jedisPoolConfig;
  }

  public void setIp(String ip) {
    this.ip = ip;
  }

  public void setPort(Integer port) {
    this.port = port;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }

public void setTimeOut(Integer timeOut) {
    this.timeOut = timeOut;
}

public void setClientName(String clientName) {
    this.clientName = clientName;
}

private void buildConnection() {
    if (jedisPool == null) {
        if (jedisPoolConfig == null) {
            jedisPool = new JedisPool(new JedisPoolConfig(), ip, port, timeOut, pwd, 0, clientName);
        } else {
            jedisPool = new JedisPool(jedisPoolConfig, ip, port, timeOut, pwd, 0, clientName);
        }
    }
}

public Jedis getJedis() {
    buildConnection();
    if (jedisPool != null) {
        return jedisPool.getResource();
    }
    return null;
}

}


編寫測試

用一個測試類 com.x9710.common.redis.test.RedisConnectionTest 來測試 rdis 連接功能.

package com.x9710.common.redis.test;

import com.x9710.common.redis.RedisConnection;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;

public class RedisConnectionTest {
private RedisConnection redisConnection;

@Before
public void before() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    //設置 redis 連接池最大連接數量
    jedisPoolConfig.setMaxTotal(50);
    //設置 redis 連接池最大空閑連接數量
    jedisPoolConfig.setMaxIdle(10);
    //設置 redis 連接池最小空閑連接數量
    jedisPoolConfig.setMinIdle(1);
    redisConnection = new RedisConnection();
    redisConnection.setIp("10.110.2.56");
    redisConnection.setPort(52981);
    redisConnection.setPwd("hhSbcpotThgWdnxJNhrzwstSP20DvYOldkjf");
    redisConnection.setClientName(Thread.currentThread().getName());
    redisConnection.setTimeOut(600);
    redisConnection.setJedisPoolConfig(jedisPoolConfig);
}

@Test
public void testPutGet() {
    Jedis jedis = redisConnection.getJedis();
    try {
        jedis.select(1);
        jedis.set("name","grace");
        Assert.assertTrue("grace".equals(jedis.get("name")));
    } finally {
        if (jedis != null) {
            jedis.close();
        }
    }
}
}

在 ide 環(huán)境中執(zhí)行測試用例,結果如下。


測試用例執(zhí)行結果

現在,我們就在 Java 中利用 Jedit 客戶端建立和 redis 的連接并且可以執(zhí)行操作。對應的代碼發(fā)布到了 GitHub

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容