Redis 的 Java API(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());

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

        // 关闭Redis连接
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 增加一个String类型的value
    public void Set() {
        jedis.set("j1", "v1");
        jedis.set("j2", "v2");
        jedis.set("j3", "v3");
    }

    @Test
    // 删除一个K-V
    public void DEL() {
        jedis.del("j1");
    }

    @Test
    // 根据K获取V
    public void GET() {
        System.out.println(jedis.get("j1"));
        System.out.println(jedis.get("j2"));
        System.out.println(jedis.get("j3"));
    }

    @Test
    // 创建一个位图
    public void SETBIT() {
        jedis.setbit("b1", 1, true);
        jedis.setbit("b2", 3, true);
    }

    @Test
    // 获取位图
    public void GETBIT() {
        System.out.println(jedis.get("b1"));
    }

    @Test
    // 位图的操作
    public void BITOPT() {
        jedis.bitop(BitOP.AND, "b3", "b1", "b2");
        jedis.bitop(BitOP.OR, "b4", "b1", "b2");
        jedis.bitop(BitOP.NOT, "b5", "b1");
        jedis.bitop(BitOP.XOR, "b6", "b1", "b2");
        System.out.println(jedis.get("b3"));
        System.out.println(jedis.get("b4"));
        System.out.println(jedis.get("b5"));
        System.out.println(jedis.get("b6"));
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个List
    public void PUSH() {
        jedis.lpush("list1", "1");
        jedis.lpush("list1", "2");
        jedis.rpush("list1", "3");
        jedis.rpush("list1", "4");
        jedis.rpush("list1", "5");
    }

    @Test
    // 修改List中的元素
    public void LSET() {
        jedis.lset("list1", 4, "5.5");
    }

    @Test
    // 获取List中的所有元素
    public void LRANGE() {
        List<String> l = jedis.lrange("list1", 0, -1);
        for (String s : l) {
            System.out.println(s);
        }
    }

    @Test
    // 删除元素
    public void POP() {
        System.out.println(jedis.blpop(1000, "list1"));
        System.out.println(jedis.rpop("list1"));
        System.out.println(jedis.lpop("list1"));
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个Hash散列
    public void HSET() {
        jedis.hset("hash1", "id", "1");
        jedis.hset("hash1", "name", "张三");
        jedis.hset("hash1", "age", "18");
        jedis.hset("hash1", "gender", "男");
        jedis.hset("hash1", "clazz", "文科四班");
    }

    @Test
    // 获取Hash所有的key
    public void HKEYS() {
        Set<String> s = jedis.hkeys("hash1");
        for (String s1 : s) {
            System.out.println(s1);
        }
    }

    @Test
    // 获取Hash所有的Value
    public void HVALS() {
        List<String> l = jedis.hvals("hash1");
        for (String s : l) {
            System.out.println(s);
        }
    }

    @Test
    // 获取Hash所有的K-V
    public void HGETALL() {
        Map<String, String> m = jedis.hgetAll("hash1");
        for (Map.Entry<String, String> kv : m.entrySet()) {
            System.out.println(kv.getKey());
            System.out.println(kv.getValue());
        }
    }

    @Test
    // 指定Field获取Value
    public void HGET() {
        System.out.println(jedis.hget("hash1", "name"));
    }

    @Test
    // 根据Field删除Value
    public void HDEL() {
        jedis.hdel("hash1", "gender");
    }

    @Test
    // 删除整个Hash散列
    public void DEL() {
        jedis.del("hash1");
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建Set
    public void SADD() {
        jedis.sadd("s1", "1", "2", "2", "2", "3", "4", "5", "6");
        jedis.sadd("s2", "5", "6", "7", "8", "9");
    }

    @Test
    // 移除元素
    public void SREM() {
        jedis.srem("s1", "1");
        jedis.srem("s1", "4");
    }

    @Test
    // 弹出一个元素,位置不确定
    public void SPOP() {
        String s1 = jedis.spop("s1");
        System.out.println(s1);
    }

    @Test
    // 获取所有的元素
    public void SMEMBERS() {
        Set<String> s1 = jedis.smembers("s1");
        for (String s : s1) {
            System.out.println(s);
        }
    }

    @Test
    // 集合常见的操作
    public void SETOP() {
        // 交集
        System.out.println(jedis.sinter("s1", "s2"));
        // 并集
        System.out.println(jedis.sunion("s1", "s2"));
        // 差集
        System.out.println(jedis.sdiff("s1", "s2"));

    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    // 创建一个有序集合
    public void ZADD() {
        // zs1 表示水果一月份的销量
        jedis.zadd("zs1", 10, "西瓜");
        jedis.zadd("zs1", 10, "西瓜");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 7, "香蕉");
        jedis.zadd("zs1", 5, "芒果");
        jedis.zadd("zs1", 5, "芒果");
        jedis.zadd("zs1", 8, "草莓");

        // zs2 表示水果二月份的销量
        jedis.zadd("zs2", 9, "哈密瓜");
        jedis.zadd("zs2", 6, "西瓜");
        jedis.zadd("zs2", 8, "香蕉");
        jedis.zadd("zs2", 3, "香蕉");
        jedis.zadd("zs2", 5, "香蕉");
        jedis.zadd("zs2", 6, "甘蔗");
        jedis.zadd("zs2", 7, "芒果");
        jedis.zadd("zs2", 8, "草莓");
    }

    @Test
    // 查看水果的累计销量
    public void TwoMonthSUM() {
        Set<Tuple> s = jedis.zunionWithScores(new ZParams().aggregate(ZParams.Aggregate.SUM), "zs1", "zs2");
        System.out.println(s);
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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;

    @Before
    // 会在执行@Test修饰的方法之前执行
    public void init() {
        jedis = new Jedis("master", 6379);
    }

    @Test
    public void PFADD() {
        jedis.pfadd("hll1", "1", "1", "2", "3", "4", "4", "5");
        jedis.pfadd("hll2", "1", "3", "4", "7", "4", "8", "5");
    }

    @Test
    // 求一组数据(可能重复)的基数
    public void PFCOUNT() {
        System.out.println(jedis.pfcount("hll1"));
        System.out.println(jedis.pfcount("hll2"));
    }

    @Test
    // 合并两个HyperLogLog
    public void PFMERGE() {
        jedis.pfmerge("hll3", "hll1", "hll2");
        System.out.println(jedis.pfcount("hll3"));
    }

    @After
    // 表示在@Test方法执行完成之后执行
    public void closed() {
        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);

        // 从连接池中取出一个连接
        Jedis jedis = jedisPool.getResource();

        // 使用连接进行操作
        System.out.println(jedis.lrange("list1", 0, -1));

        // 关闭连接
        jedis.close();

        // 关闭连接池
        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));

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

        System.out.println(cluster.get("cs1"));

        cluster.hset("chs1", "f1", "v1");
        cluster.hset("chs1", "f2", "v1");
        cluster.hset("chs1", "f3", "v1");

        Map<String, String> map = cluster.hgetAll("chs1");
        for (Map.Entry<String, String> kv : map.entrySet()) {
            System.out.println(kv.getKey());
            System.out.println(kv.getValue());
        }

        //关闭连接
        cluster.close();
    }
}
posted @ 2022-01-25 00:34  赤兔胭脂小吕布  阅读(477)  评论(0编辑  收藏  举报