redis的java Api

先新建一个项目

进入 Maven 仓库找一个 Redis 的依赖 (Jedis)

Maven 仓库的网址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

找这个

#在 Maven 项目中的 pom.xml 文件中添加依赖
    <dependencies>
        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>

通过 Java 代码操作 Redis 的基本步骤

package com.shujia;

import redis.clients.jedis.Jedis;

public class RedisDemo1 {
/**
* 通过 Java 代码操作 Redis
*/

public static void main(String[] args) {
// 1、建立连接
Jedis jedis = new Jedis("master", 6379);
// 2、测试连通性
System.out.println(jedis.ping());

    <span class="hljs-comment">// 3、通过建立的连接操作Redis</span>
    <span class="hljs-comment">// 通过 jedis 直接 . 就行,这里的方法和Redis中的命令基本上都是一一对应的</span>
    <span class="hljs-type">String</span> <span class="hljs-variable">nk3</span> <span class="hljs-operator">=</span> jedis.get(<span class="hljs-string">"nk3"</span>);
    System.out.println(nk3);

    <span class="hljs-comment">// 关闭Redis连接</span>
    jedis.close();
}

}

了解了 Java 代码操作 Redis 的基本步骤之后,我们针对 Redis 中的每一种数据结构都做一次增删改查

在此之前为了方便我们做测试,我们导一下 junit 的依赖

#JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架,是一个开放源代码的 Java 测试框架,可以在它的基础上编写和运行可重复的测试。

#导入Junit的依赖
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
</dependency>

String

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.args.BitOP;

public class RedisString {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 增加一个String类型的value</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">Set</span><span class="hljs-params">()</span> {
    jedis.set(<span class="hljs-string">"j1"</span>, <span class="hljs-string">"v1"</span>);
    jedis.set(<span class="hljs-string">"j2"</span>, <span class="hljs-string">"v2"</span>);
    jedis.set(<span class="hljs-string">"j3"</span>, <span class="hljs-string">"v3"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 删除一个K-V</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">DEL</span><span class="hljs-params">()</span> {
    jedis.del(<span class="hljs-string">"j1"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 根据K获取V</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">GET</span><span class="hljs-params">()</span> {
    System.out.println(jedis.get(<span class="hljs-string">"j1"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"j2"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"j3"</span>));
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 创建一个位图</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SETBIT</span><span class="hljs-params">()</span> {
    jedis.setbit(<span class="hljs-string">"b1"</span>, <span class="hljs-number">1</span>, <span class="hljs-literal">true</span>);
    jedis.setbit(<span class="hljs-string">"b2"</span>, <span class="hljs-number">3</span>, <span class="hljs-literal">true</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取位图</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">GETBIT</span><span class="hljs-params">()</span> {
    System.out.println(jedis.get(<span class="hljs-string">"b1"</span>));
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 位图的操作</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">BITOPT</span><span class="hljs-params">()</span> {
    jedis.bitop(BitOP.AND, <span class="hljs-string">"b3"</span>, <span class="hljs-string">"b1"</span>, <span class="hljs-string">"b2"</span>);
    jedis.bitop(BitOP.OR, <span class="hljs-string">"b4"</span>, <span class="hljs-string">"b1"</span>, <span class="hljs-string">"b2"</span>);
    jedis.bitop(BitOP.NOT, <span class="hljs-string">"b5"</span>, <span class="hljs-string">"b1"</span>);
    jedis.bitop(BitOP.XOR, <span class="hljs-string">"b6"</span>, <span class="hljs-string">"b1"</span>, <span class="hljs-string">"b2"</span>);
    System.out.println(jedis.get(<span class="hljs-string">"b3"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"b4"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"b5"</span>));
    System.out.println(jedis.get(<span class="hljs-string">"b6"</span>));
}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

List

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.List;

public class RedisList {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 创建一个List</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">PUSH</span><span class="hljs-params">()</span> {
    jedis.lpush(<span class="hljs-string">"list1"</span>, <span class="hljs-string">"1"</span>);
    jedis.lpush(<span class="hljs-string">"list1"</span>, <span class="hljs-string">"2"</span>);
    jedis.rpush(<span class="hljs-string">"list1"</span>, <span class="hljs-string">"3"</span>);
    jedis.rpush(<span class="hljs-string">"list1"</span>, <span class="hljs-string">"4"</span>);
    jedis.rpush(<span class="hljs-string">"list1"</span>, <span class="hljs-string">"5"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 修改List中的元素</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">LSET</span><span class="hljs-params">()</span> {
    jedis.lset(<span class="hljs-string">"list1"</span>, <span class="hljs-number">4</span>, <span class="hljs-string">"5.5"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取List中的所有元素</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">LRANGE</span><span class="hljs-params">()</span> {
    List&lt;String&gt; l = jedis.lrange(<span class="hljs-string">"list1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
    <span class="hljs-keyword">for</span> (String s : l) {
        System.out.println(s);
    }
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 删除元素</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">POP</span><span class="hljs-params">()</span> {
    System.out.println(jedis.blpop(<span class="hljs-number">1000</span>, <span class="hljs-string">"list1"</span>));
    System.out.println(jedis.rpop(<span class="hljs-string">"list1"</span>));
    System.out.println(jedis.lpop(<span class="hljs-string">"list1"</span>));
}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

Hash

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class RedisHash {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 创建一个Hash散列</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HSET</span><span class="hljs-params">()</span> {
    jedis.hset(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"id"</span>, <span class="hljs-string">"1"</span>);
    jedis.hset(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"name"</span>, <span class="hljs-string">"张三"</span>);
    jedis.hset(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"age"</span>, <span class="hljs-string">"18"</span>);
    jedis.hset(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"gender"</span>, <span class="hljs-string">"男"</span>);
    jedis.hset(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"clazz"</span>, <span class="hljs-string">"文科四班"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取Hash所有的key</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HKEYS</span><span class="hljs-params">()</span> {
    Set&lt;String&gt; s = jedis.hkeys(<span class="hljs-string">"hash1"</span>);
    <span class="hljs-keyword">for</span> (String s1 : s) {
        System.out.println(s1);
    }
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取Hash所有的Value</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HVALS</span><span class="hljs-params">()</span> {
    List&lt;String&gt; l = jedis.hvals(<span class="hljs-string">"hash1"</span>);
    <span class="hljs-keyword">for</span> (String s : l) {
        System.out.println(s);
    }
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取Hash所有的K-V</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HGETALL</span><span class="hljs-params">()</span> {
    Map&lt;String, String&gt; m = jedis.hgetAll(<span class="hljs-string">"hash1"</span>);
    <span class="hljs-keyword">for</span> (Map.Entry&lt;String, String&gt; kv : m.entrySet()) {
        System.out.println(kv.getKey());
        System.out.println(kv.getValue());
    }
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 指定Field获取Value</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HGET</span><span class="hljs-params">()</span> {
    System.out.println(jedis.hget(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"name"</span>));
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 根据Field删除Value</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">HDEL</span><span class="hljs-params">()</span> {
    jedis.hdel(<span class="hljs-string">"hash1"</span>, <span class="hljs-string">"gender"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 删除整个Hash散列</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">DEL</span><span class="hljs-params">()</span> {
    jedis.del(<span class="hljs-string">"hash1"</span>);
}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

Set

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.Set;

public class RedisSet {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 创建Set</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SADD</span><span class="hljs-params">()</span> {
    jedis.sadd(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-string">"2"</span>, <span class="hljs-string">"2"</span>, <span class="hljs-string">"2"</span>, <span class="hljs-string">"3"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"5"</span>, <span class="hljs-string">"6"</span>);
    jedis.sadd(<span class="hljs-string">"s2"</span>, <span class="hljs-string">"5"</span>, <span class="hljs-string">"6"</span>, <span class="hljs-string">"7"</span>, <span class="hljs-string">"8"</span>, <span class="hljs-string">"9"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 移除元素</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SREM</span><span class="hljs-params">()</span> {
    jedis.srem(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"1"</span>);
    jedis.srem(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"4"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 弹出一个元素,位置不确定</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SPOP</span><span class="hljs-params">()</span> {
    <span class="hljs-type">String</span> <span class="hljs-variable">s1</span> <span class="hljs-operator">=</span> jedis.spop(<span class="hljs-string">"s1"</span>);
    System.out.println(s1);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 获取所有的元素</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SMEMBERS</span><span class="hljs-params">()</span> {
    Set&lt;String&gt; s1 = jedis.smembers(<span class="hljs-string">"s1"</span>);
    <span class="hljs-keyword">for</span> (String s : s1) {
        System.out.println(s);
    }
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 集合常见的操作</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SETOP</span><span class="hljs-params">()</span> {
    <span class="hljs-comment">// 交集</span>
    System.out.println(jedis.sinter(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"s2"</span>));
    <span class="hljs-comment">// 并集</span>
    System.out.println(jedis.sunion(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"s2"</span>));
    <span class="hljs-comment">// 差集</span>
    System.out.println(jedis.sdiff(<span class="hljs-string">"s1"</span>, <span class="hljs-string">"s2"</span>));

}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

#当 IDEA 出现 cannot download sources(无法下载 source) 时

// 将下面这行代码粘贴到 IDEA 的命令行里运行即可
mvn dependency:resolve -Dclassifier=sources

SortedSet

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.ZParams;
import redis.clients.jedis.resps.Tuple;

import java.util.Set;

public class RedisSortedSet {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 创建一个有序集合</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">ZADD</span><span class="hljs-params">()</span> {
    <span class="hljs-comment">// zs1 表示水果一月份的销量</span>
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">10</span>, <span class="hljs-string">"西瓜"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">10</span>, <span class="hljs-string">"西瓜"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">7</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">7</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">7</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">5</span>, <span class="hljs-string">"芒果"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">5</span>, <span class="hljs-string">"芒果"</span>);
    jedis.zadd(<span class="hljs-string">"zs1"</span>, <span class="hljs-number">8</span>, <span class="hljs-string">"草莓"</span>);

    <span class="hljs-comment">// zs2 表示水果二月份的销量</span>
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">9</span>, <span class="hljs-string">"哈密瓜"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">6</span>, <span class="hljs-string">"西瓜"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">8</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">3</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">5</span>, <span class="hljs-string">"香蕉"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">6</span>, <span class="hljs-string">"甘蔗"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">7</span>, <span class="hljs-string">"芒果"</span>);
    jedis.zadd(<span class="hljs-string">"zs2"</span>, <span class="hljs-number">8</span>, <span class="hljs-string">"草莓"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 查看水果的累计销量</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">TwoMonthSUM</span><span class="hljs-params">()</span> {
    Set&lt;Tuple&gt; s = jedis.zunionWithScores(<span class="hljs-keyword">new</span> <span class="hljs-title class_">ZParams</span>().aggregate(ZParams.Aggregate.SUM), <span class="hljs-string">"zs1"</span>, <span class="hljs-string">"zs2"</span>);
    System.out.println(s);
}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

HyperLogLog

package com.shujia;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;

public class RedisHyperLogLog {
Jedis jedis;

<span class="hljs-meta">@Before</span>
<span class="hljs-comment">// 会在执行@Test修饰的方法之前执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">init</span><span class="hljs-params">()</span> {
    jedis = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"master"</span>, <span class="hljs-number">6379</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">PFADD</span><span class="hljs-params">()</span> {
    jedis.pfadd(<span class="hljs-string">"hll1"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-string">"2"</span>, <span class="hljs-string">"3"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"5"</span>);
    jedis.pfadd(<span class="hljs-string">"hll2"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-string">"3"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"7"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"8"</span>, <span class="hljs-string">"5"</span>);
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 求一组数据(可能重复)的基数</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">PFCOUNT</span><span class="hljs-params">()</span> {
    System.out.println(jedis.pfcount(<span class="hljs-string">"hll1"</span>));
    System.out.println(jedis.pfcount(<span class="hljs-string">"hll2"</span>));
}

<span class="hljs-meta">@Test</span>
<span class="hljs-comment">// 合并两个HyperLogLog</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">PFMERGE</span><span class="hljs-params">()</span> {
    jedis.pfmerge(<span class="hljs-string">"hll3"</span>, <span class="hljs-string">"hll1"</span>, <span class="hljs-string">"hll2"</span>);
    System.out.println(jedis.pfcount(<span class="hljs-string">"hll3"</span>));
}

<span class="hljs-meta">@After</span>
<span class="hljs-comment">// 表示在@Test方法执行完成之后执行</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">closed</span><span class="hljs-params">()</span> {
    jedis.close();
}

}

IDEA 的一些快捷键

// 快速复制一行
Ctrl + D
// 将一行上下移动
Alt + shift + ↑/↓
// 看方法中需要传什么参数
Ctrl + P

Redis 连接池

package com.shujia;

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

public class RedisConnectionPool {
// Redis 连接池
public static void main(String[] args) {
// 使用默认的配置创建 Redis 连接池
JedisPool jedisPool = new JedisPool("master", 6379);

    <span class="hljs-comment">// 从连接池中取出一个连接</span>
    <span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> jedisPool.getResource();

    <span class="hljs-comment">// 使用连接进行操作</span>
    System.out.println(jedis.lrange(<span class="hljs-string">"list1"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));

    <span class="hljs-comment">// 关闭连接</span>
    jedis.close();

    <span class="hljs-comment">// 关闭连接池</span>
    jedisPool.close();
}

}

Redis 集群的连接

package com.shujia;

import redis.clients.jedis.ConnectionPool;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Map;

public class RedisClusterConn {
public static void main(String[] args) {
// 使用 JedisCluster 与集群进行通信建立连接
// 这里的端口号只要是 Redis 集群中的任意一个节点的端口号即可,具体原因参见 Redis 集群的概述及其搭建
// 因为 Redis 集群相当于一个整体,你连接一个,就相当于连接 Redis 集群整体
JedisCluster cluster = new JedisCluster(new HostAndPort("master", 6381));

    <span class="hljs-comment">//通过建立的连接直接 . 就行,这里的方法和Redis中的命令基本上都是一一对应的</span>
    cluster.set(<span class="hljs-string">"cs1"</span>, <span class="hljs-string">"vv1"</span>);

    System.out.println(cluster.get(<span class="hljs-string">"cs1"</span>));

    cluster.hset(<span class="hljs-string">"chs1"</span>, <span class="hljs-string">"f1"</span>, <span class="hljs-string">"v1"</span>);
    cluster.hset(<span class="hljs-string">"chs1"</span>, <span class="hljs-string">"f2"</span>, <span class="hljs-string">"v1"</span>);
    cluster.hset(<span class="hljs-string">"chs1"</span>, <span class="hljs-string">"f3"</span>, <span class="hljs-string">"v1"</span>);

    Map&lt;String, String&gt; map = cluster.hgetAll(<span class="hljs-string">"chs1"</span>);
    <span class="hljs-keyword">for</span> (Map.Entry&lt;String, String&gt; kv : map.entrySet()) {
        System.out.println(kv.getKey());
        System.out.println(kv.getValue());
    }

    <span class="hljs-comment">//关闭连接</span>
    cluster.close();
}

}