Redis Java使用

引入依赖:

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包名]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值