引入依赖:
Java操作redis的客户端有很多,其中最知名的是jedis。
创建maven项目,把jedis的依赖拷贝到pom.xml中。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.2</version>
</dependency>
版本选择一个相对较新的版本即可。
配置端口转发
Redis服务器安装在云服务器上,而我们编写的代码则是再本地主机。
要想本地主机能访问redis,需要把redis的端口通过云服务器后台页面的“防火墙/安全组"放开端口到公网上。但是这个操作非常危险(黑客会顺着redis端口进来)。
因此我们可以使用端口转发的方式,直接把服务器的redis端口映射到本地。
ssh隧道的三种转发模式:
Local Port Forwarding(本地端口转发)
将本地的某个端口转发到远程服务器上的某个端口。
Remote Port Forwarding(远程端口转发)
将远程服务器上的某个端口转发到本地机器的某个端口。
Dynamic Port Forwarding(动态端口转发)
使用SOCKS代理动态转发,运行灵活选择目标
笔者这里使用WindTerm。
1.在工具中找到隧道
2.然后配置规则

3.使用该会话连接服务器。
此时,访问本地的8888,就相当于访问对应服务器的6379.
注意,得处于连接状态,这样的映射才是有效的。
连接Redis Server
- 使用JedisPool描述Redis服务器的位置,使用url来表示。
- 使用getResource和服务器建立连接。
- 连接使用完毕需要close关闭,也可以直接使用try自动关闭。
- 通过ping方法可以检测连接是否正确建立。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
String ping = jedis.ping();
System.out.println(ping);
}
}
}
执行结果:
PONG
注意:
这个报错没有关系,不影响使用,忽略即可。

基础操作:
set和get
- key不存在时,得到的value为null。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testGetSet(jedis);
jedis.flushDB();
}
}
private static void testGetSet(Jedis jedis){
jedis.set("key1", "value1");
jedis.set("key2", "value2");
String value1 = jedis.get("key1");
System.out.println(value1);
String value2 = jedis.get("key2");
System.out.println(value2);
String valueNull = jedis.get("noSuchKey");
System.out.println(valueNull);
}
}
执行结果:
value1
value2
null
exists 和del
- del可以删除多个key,以变长参数列表的方法体现,返回值是实际删除key的个数。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testExistsAndDel(jedis);
jedis.flushDB();
}
}
private static void testExistsAndDel(Jedis jedis){
jedis.set("key1", "value1");
jedis.set("key2", "value2");
jedis.set("key3", "value3");
boolean ret = jedis.exists("key1");
System.out.println(ret);
long n = jedis.del("key1");
System.out.println(n);
ret = jedis.exists("key1");
System.out.println(ret);
n = jedis.del("key2", "key3");
System.out.println(n);
ret = jedis.exists("key2");
System.out.println(ret);
}
}
执行结果:
true
1
false
2
false
keys
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testKeys(jedis);
jedis.flushDB();
}
}
private static void testKeys(Jedis jedis){
jedis.set("key1", "value1");
jedis.set("key2", "value2");
jedis.set("key3", "value3");
jedis.set("myKey", "myValue");
Set<String> keys = jedis.keys("*");
System.out.println(keys);
keys = jedis.keys("key?");
System.out.println(keys);
}
}
执行结果:
[key1, key2, key3, myKey]
[key1, key2, key3]
expire 和ttl
- 使用setex直接设置key的同时指定过期时间,单位为秒。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testExpireAndTTL(jedis);
jedis.flushDB();
}
}
private static void testExpireAndTTL(Jedis jedis){
jedis.setex("key1", 60, "value1");
long ttl = jedis.ttl("key1");
System.out.println(ttl);
}
}
执行结果:
60
type
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testType(jedis);
jedis.flushDB();
}
}
private static void testType(Jedis jedis){
jedis.set("key1", "value1");
System.out.println(jedis.type("key1"));
jedis.lpush("key2", "a", "b","c");
System.out.println(jedis.type("key2"));
jedis.hset("keys3","name","zhangsan");
System.out.println(jedis.type("keys3"));
jedis.sadd("keys4","111","222","333");
System.out.println(jedis.type("keys4"));
jedis.zadd("keys5",1,"aaa");
System.out.println(jedis.type("keys5"));
}
}
执行结果:
string
list
hash
set
zset
字符串操作
mget和mset
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testMSetAndMGet(jedis);
jedis.flushDB();
}
}
private static void testMSetAndMGet(Jedis jedis){
jedis.mset("key1", "value1", "key2", "value2", "key3", "value3");
List<String> values = jedis.mget("key1", "key2", "key3");
System.out.println(values);
}
}
执行结果:
[value1, value2, value3]
append
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testAppend(jedis);
jedis.flushDB();
}
}
private static void testAppend(Jedis jedis){
jedis.append("key1", "aaa");
String value = jedis.get("key1");
System.out.println(value);
jedis.append("key1", "bbb");
value = jedis.get("key1");
System.out.println(value);
}
}
执行结果:
aaa
aaabbb
getrange和setrange
- 注意getrange的区间是闭区间。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testGetRangeAndSetRange(jedis);
jedis.flushDB();
}
}
private static void testGetRangeAndSetRange(Jedis jedis){
jedis.set("key1", "hello,world"); // "hello,world"
System.out.println(jedis.get("key1"));
String value = jedis.getrange("key1", 0, 4); // "hello"
System.out.println(value);
jedis.setrange("key1", 6, "redis"); // "hello,redis"
value = jedis.get("key1");
System.out.println(value);
}
}
执行结果:
hello,world
hello
hello,redis
setnx
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSetnx(jedis);
jedis.flushDB();
}
}
private static void testSetnx(Jedis jedis){
long n = jedis.setnx("key1", "value1");
System.out.println(n);
String value = jedis.get("key1");
System.out.println(value);
n = jedis.setnx("key1", "value2");
System.out.println(n);
value = jedis.get("key1");
System.out.println(value);
}
}
执行结果:
0
value1
0
value1
psetex
获取到的结果不一定刚好1000,pttl本身也是有时间开销的。
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testPsetexAndPttl(jedis);
jedis.flushDB();
}
}
private static void testPsetexAndPttl(Jedis jedis){
jedis.psetex("key1", 1000, "value1");
long ttl = jedis.pttl("key1");
System.out.println(ttl);
}
}
986
incr和decr
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testIncrAndDecr(jedis);
jedis.flushDB();
}
}
private static void testIncrAndDecr(Jedis jedis){
jedis.set("key1", "0");
jedis.incr("key1");
System.out.println(jedis.get("key1"));
jedis.decr("key1");
System.out.println(jedis.get("key1"));
}
}
执行结果:
1
0
incrby和decrby
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testIncrByAndDecrBy(jedis);
jedis.flushDB();
}
}
private static void testIncrByAndDecrBy(Jedis jedis){
jedis.set("key1", "0");
jedis.incrBy("key1", 10);
System.out.println(jedis.get("key1"));
jedis.decrBy("key1", 5);
System.out.println(jedis.get("key1"));
}
}
执行结果:
10
5
列表操作
lpush和lpop
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testLpushAndLpop(jedis);
jedis.flushDB();
}
}
private static void testLpushAndLpop(Jedis jedis){
long n = jedis.lpush("key","1","2","3","4");
System.out.println(n);
String value = jedis.lpop("key");
System.out.println(value);
value = jedis.lpop("key");
System.out.println(value);
value = jedis.lpop("key");
System.out.println(value);
value = jedis.lpop("key");
System.out.println(value);
value = jedis.lpop("key");
System.out.println(value);
}
}
执行结果:
4
4
3
2
1
null
rpush和rpop
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testRpushAndRpop(jedis);
jedis.flushDB();
}
}
private static void testRpushAndRpop(Jedis jedis){
long n = jedis.rpush("key","1","2","3","4");
System.out.println(n);
String value = jedis.rpop("key");
System.out.println(value);
value = jedis.rpop("key");
System.out.println(value);
value = jedis.rpop("key");
System.out.println(value);
value = jedis.rpop("key");
System.out.println(value);
value = jedis.rpop("key");
System.out.println(value);
}
}
执行结果:
4
4
3
2
1
null
lrange
- lrange 填写的区间为闭区间
package com.dly.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
import java.util.Set;
public class Redis {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testLrange(jedis);
jedis.flushDB();
}
}
private static void testLrange(Jedis jedis){
jedis.lpush("key1", "a", "b", "c", "d", "e");
List<String> list = jedis.lrange("key1", 1, 3);
System.out.println(list);
}
}
执行结果:
[d, c, b]
blpop
- 返回值List是一个二元组,[0]表示key,[1]表示value
- 超时时间设为0表示四等
- 在执行同时,起一个redis-cli,插入数据,即可看到blpop的返回结果。
注意:在代码中另起一个线程,直接通过jedis这个连接插入数据是不行的,必须另起一个jedis连接。
public static void main(String[] args) {
// 主线程连接 Redis,测试连接用
try (Jedis jedis = new Jedis("localhost", 8888)) {
jedis.connect();
System.out.println("Connected to Redis: " + jedis.ping());
// 清空数据库(可选)
jedis.flushDB();
System.out.println("Database flushed.");
} catch (Exception e) {
System.err.println("Connection failed: " + e.getMessage());
return;
}
// 启动一个子线程运行 BLPOP(子线程有自己的 Jedis 实例)
Thread blpopThread = new Thread(() -> testBLpop());
blpopThread.start();
// 主线程等待,确保 BLPOP 启动
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 主线程再连接 Redis,推送数据
try (Jedis jedis = new Jedis("localhost", 8888)) {
System.out.println("Pushing data to key1...");
Long result = jedis.rpush("key1", "1", "2", "3");
System.out.println("RPUSH result: " + result); // 应输出 3
} catch (Exception e) {
System.err.println("RPUSH failed: " + e.getMessage());
}
// 等待子线程处理
try {
Thread.sleep(3000);
System.out.println("Main thread continues...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 子线程方法:监听 key1 的 BLPOP
private static void testBLpop() {
try (Jedis jedis = new Jedis("localhost", 8888)) {
jedis.connect();
System.out.println("Starting blpop on key1...");
while (true) {
try {
List<String> list = jedis.blpop(0, "key1"); // 阻塞直到有数据
System.out.println("BLPOP result: " + list);
} catch (Exception e) {
System.err.println("BLPOP error: " + e.getMessage());
break;
}
}
} catch (Exception e) {
System.err.println("BLPOP connection failed: " + e.getMessage());
}
}
执行结果:
Connected to Redis: PONG
Database flushed.
Starting blpop on key1...
Pushing data to key1...
BLPOP result: [key1, 1]
BLPOP result: [key1, 2]
RPUSH result: 3
BLPOP result: [key1, 3]
Main thread continues...
brpop
- 使用方式和blpop类似
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 8888); // 确保端口正确
// 连接测试
try {
jedis.connect();
System.out.println("Connected to Redis: " + jedis.ping()); // 应返回 "PONG"
} catch (Exception e) {
System.err.println("Connection failed: " + e.getMessage());
return;
}
// 清空数据库(可选)
jedis.flushDB();
System.out.println("Database flushed.");
// 启动一个线程运行 testBRpop
Thread brpopThread = new Thread(() -> testBRpop());
brpopThread.start();
// 主线程推送数据到 key1
try {
Thread.sleep(2000); // 确保 brpop 线程已经启动
System.out.println("Pushing data to key1...");
Long result = jedis.rpush("key1", "a", "b", "c");
System.out.println("RPUSH result: " + result); // 应返回 3
} catch (Exception e) {
System.err.println("RPUSH failed: " + e.getMessage());
}
// 主线程继续其他操作
try {
Thread.sleep(3000); // 等待 brpop 处理
System.out.println("Main thread continues...");
} catch (InterruptedException e) {
e.printStackTrace();
}
jedis.close();
}
private static void testBRpop() {
// 每个线程都应该使用自己的 Jedis 实例
try (Jedis jedis = new Jedis("localhost", 8888)) {
System.out.println("Starting brpop on key1...");
while (true) {
try {
List<String> list = jedis.brpop(0, "key1"); // 阻塞直到取到
System.out.println("BRPOP result: " + list);
} catch (Exception e) {
System.err.println("BRPOP error: " + e.getMessage());
break;
}
}
}
}
运行结果:
Connected to Redis: PONG
Database flushed.
Starting brpop on key1...
Pushing data to key1...
RPUSH result: 3
BRPOP result: [key1, c]
BRPOP result: [key1, b]
BRPOP result: [key1, a]
Main thread continues...
lindex
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testLindex(jedis);
jedis.flushDB();
}
}
private static void testLindex(Jedis jedis){
jedis.rpush("key", "1", "2", "3", "4");
String value = jedis.lindex("key", 2);
System.out.println(value);
}
执行结果:
3
linsert
- 通过ListPosition.BEFORE和ListPosition.AFTER标识插入位置
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testLinsert(jedis);
jedis.flushDB();
}
}
private static void testLinsert(Jedis jedis){
jedis.rpush("key","a","b","c","d");
jedis.linsert("key", ListPosition.BEFORE, "c", "100");
List<String> list = jedis.lrange("key", 0, -1);
System.out.println(list);
}
执行结果:
[a, b, 100, c, d]
llen
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testLlen(jedis);
jedis.flushDB();
}
}
private static void testLlen(Jedis jedis){
jedis.rpush("key","a","b","c","d");
long n = jedis.llen("key");
System.out.println(n);
}
执行结果:
4
哈希表操作
hset和hget
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHsetAndHget(jedis);
jedis.flushDB();
}
}
private static void testHsetAndHget(Jedis jedis){
jedis.hset("key","name","zhangsan");
jedis.hset("key","age","18");
String name = jedis.hget("key", "name");
String age = jedis.hget("key", "age");
System.out.println(name);
System.out.println(age);
}
执行结果:
zhangsan
18
hexists和hdel
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHexistsAndHdel(jedis);
jedis.flushDB();
}
}
private static void testHexistsAndHdel(Jedis jedis){
jedis.hset("key","name","zhangsan");
boolean ok = jedis.hexists("key","name");
System.out.println(ok);
jedis.hdel("key","name");
ok = jedis.hexists("key","name");
System.out.println(ok);
}
执行结果:
true
false
hkeys和hvals
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHkeyAndHvalues(jedis);
jedis.flushDB();
}
}
private static void testHkeyAndHvalues(Jedis jedis){
jedis.hset("key","name","zhangsan");
jedis.hset("key","age","18");
Set<String> keys = jedis.hkeys("key");
System.out.println(keys);
List<String> values = jedis.hvals("key");
System.out.println(values);
}
执行结果:
[name, age]
[zhangsan, 18]
hmget
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHmget(jedis);
jedis.flushDB();
}
}
private static void testHmget(Jedis jedis){
jedis.hset("key1", "name", "zhangsan");
jedis.hset("key1", "age", "18");
List<String> values = jedis.hmget("key1", "name", "age");
System.out.println(values);
}
hlen
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHlen(jedis);
jedis.flushDB();
}
}
private static void testHlen(Jedis jedis){
jedis.hset("key1", "name", "zhangsan");
jedis.hset("key1", "age", "18");
long len = jedis.hlen("key1");
System.out.println(len);
}
执行结果:
2
hincrby和hincrbyfloat
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testHIncrByAndIncrByFloat(jedis);
jedis.flushDB();
}
}
private static void testHIncrByAndIncrByFloat(Jedis jedis){
jedis.hset("key1", "age", "20");
long n = jedis.hincrBy("key1", "age", 10);
System.out.println(n);
String value = jedis.hget("key1", "age");
System.out.println(value);
double dn = jedis.hincrByFloat("key1", "age", 0.5);
System.out.println(dn);
value = jedis.hget("key1", "age");
System.out.println(value);
}
执行结果:
30
30
30.5
30.5
集合操作
sadd和smembers
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSaddAndSmembers(jedis);
jedis.flushDB();
}
}
private static void testSaddAndSmembers(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
Set<String> members = jedis.smembers("key1");
System.out.println(members);
}
执行结果:
[aaa, ccc, bbb]
srem和sismember
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSremAndSismember(jedis);
jedis.flushDB();
}
}
private static void testSremAndSismember(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
boolean ok = jedis.sismember("key1", "aaa");
System.out.println(ok);
long n = jedis.srem("key1", "aaa","bbb");
System.out.println(n);
ok = jedis.sismember("key1", "aaa");
System.out.println(ok);
}
执行结果:
true
2
false
scard
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testScard(jedis);
jedis.flushDB();
}
}
private static void testScard(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
long n = jedis.scard("key1");
System.out.println(n);
}
执行结果:
3
sinter
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSinter(jedis);
jedis.flushDB();
}
}
private static void testSinter(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
jedis.sadd("key2", "aaa", "ccc", "ddd");
Set<String> set = jedis.sinter("key1", "key2");
System.out.println(set);
}
执行结果:
[aaa, ccc]
sunion
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSunion(jedis);
jedis.flushDB();
}
}
private static void testSunion(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
jedis.sadd("key2", "aaa", "ccc", "ddd");
Set<String> set = jedis.sunion("key1", "key2");
System.out.println(set);
}
执行结果:
[aaa, ccc, bbb, ddd]
sdiff
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testSdiff(jedis);
jedis.flushDB();
}
}
private static void testSdiff(Jedis jedis){
jedis.sadd("key1", "aaa", "bbb", "ccc");
jedis.sadd("key2", "aaa", "ccc", "ddd");
Set<String> set = jedis.sdiff("key1", "key2");
System.out.println(set);
}
执行结果:
[bbb]
有序集合操作
zadd和zrange
- zrange通过下标获取元素,闭区间。
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZaddAndZrange(jedis);
jedis.flushDB();
}
}
private static void testZaddAndZrange(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
List<String> set = jedis.zrange("key", 0, 4);
System.out.println(set);
List<Tuple> members = jedis.zrangeWithScores("key", 0, 4);
System.out.println(members);
}
执行结果:
[刘备, 关羽, 典韦, 赵云, 吕布]
[[刘备,70.0], [关羽,92.0], [典韦,95.0], [赵云,98.0], [吕布,100.0]]
zrem和zcard
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZremAndZcard(jedis);
jedis.flushDB();
}
}
private static void testZremAndZcard(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
long n = jedis.zcard("key");
System.out.println(n);
n = jedis.zrem("key", "吕布", "赵云");
System.out.println(n);
n = jedis.zcard("key");
System.out.println(n);
}
5
2
3
zcount
获取指定分数区间中的元素个数,闭区间。
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZcount(jedis);
jedis.flushDB();
}
}
private static void testZcount(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
long n = jedis.zcount("key", 90, 100);
System.out.println(n);
}
执行结果:
3
zpopmax和zpopmin
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZpopmaxAndZpopmin(jedis);
jedis.flushDB();
}
}
private static void testZpopmaxAndZpopmin(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
Tuple tuple = jedis.zpopmax("key");
System.out.println(tuple);
tuple = jedis.zpopmin("key");
System.out.println(tuple);
}
执行结果:
[吕布,100.0]
[刘备,70.0]
zrank
- 获取指定member的下标。
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZrank(jedis);
jedis.flushDB();
}
}
private static void testZrank(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
long n = jedis.zrank("key", "赵云");
System.out.println(n);
n = jedis.zrevrank("key", "赵云");
System.out.println(n);
}
执行结果:
3
1
zscore
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZscore(jedis);
jedis.flushDB();
}
}
private static void testZscore(Jedis jedis){
jedis.zadd("key", 100, "吕布");
jedis.zadd("key", 98, "赵云");
jedis.zadd("key", 95, "典韦");
jedis.zadd("key", 92, "关羽");
jedis.zadd("key", 70, "刘备");
double score = jedis.zscore("key", "赵云");
System.out.println(score);
}
执行结果:
98.0
zincrby
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZincrby(jedis);
jedis.flushDB();
}
}
private static void testZincrby(Jedis jedis){
jedis.zadd("key", 100, "吕布");
double score = jedis.zincrby("key", 10, "吕布");
System.out.println(score);
score = jedis.zincrby("key",-20, "吕布");
System.out.println(score);
}
执行结果:
110.0
90.0
zinterstore
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZinterstore(jedis);
jedis.flushDB();
}
}
private static void testZinterstore(Jedis jedis){
jedis.zadd("key1", 100, "吕布");
jedis.zadd("key1", 98, "赵云");
jedis.zadd("key1", 95, "典韦");
jedis.zadd("key2", 92, "吕布");
jedis.zadd("key2", 70, "赵云");
jedis.zadd("key2", 80, "典韦");
long n = jedis.zinterstore("key3", "key1", "key2");
System.out.println(n);
List<Tuple> members = jedis.zrangeWithScores("key3", 0, -1);
System.out.println(members);
}
执行结果:
3
[[赵云,168.0], [典韦,175.0], [吕布,192.0]]
zunionstore
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("127.0.0.1", 8888);
try(Jedis jedis = jedisPool.getResource()){
testZunionstore(jedis);
jedis.flushDB();
}
}
private static void testZunionstore(Jedis jedis){
jedis.zadd("key1", 100, "吕布");
jedis.zadd("key1", 98, "赵云");
jedis.zadd("key1", 95, "典韦");
jedis.zadd("key2", 100, "吕布");
jedis.zadd("key2", 70, "赵云");
jedis.zadd("key2", 80, "关羽");
long n = jedis.zunionstore("key3", "key1", "key2");
System.out.println(n);
List<Tuple> members = jedis.zrangeWithScores("key3", 0, -1);
System.out.println(members);
}
执行结果:
4
[[关羽,80.0], [典韦,95.0], [赵云,168.0], [吕布,200.0]]
访问集群
使用JedisCluster类代替Jedis类即可。
需要在创建实例的时候,把多个节点的地址,都设置进去。
JedisCluster提供的方法和Jedis基本一致。都和Redis命令是对应的。
public static void main(String[] args) {
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("172.30.0.101", 6379));
nodes.add(new HostAndPort("172.30.0.102", 6379));
nodes.add(new HostAndPort("172.30.0.103", 6379));
nodes.add(new HostAndPort("172.30.0.104", 6379));
nodes.add(new HostAndPort("172.30.0.105", 6379));
nodes.add(new HostAndPort("172.30.0.106", 6379));
nodes.add(new HostAndPort("172.30.0.107", 6379));
nodes.add(new HostAndPort("172.30.0.108", 6379));
nodes.add(new HostAndPort("172.30.0.109", 6379));
try (JedisCluster jedisCluster = new JedisCluster(nodes)) {
jedisCluster.set("k1", "111");
String value = jedisCluster.get("k1");
System.out.println(value);
}
}
注意!由于此处我们的代码是需要访问呢整个redis集群,因此不能直接在windows上运行程序。(上述docker 容器的ip 都是windows主机上无法直接访问的)。
需要把整个程序达成jar包,上传到Linux中,并通过下列方式运行。
java -jar [jar包名]
769

被折叠的 条评论
为什么被折叠?



