Java 连接 Redis

431 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java

mysql可以连接java进行crud操作,那么同样作为数据库的redis是不是也可以通过Java操作呢?答案是肯定的。

实例

import redis.clients.jedis.Jedis;
public class RedisJava { 
public static void main(String[] args) { 
//连接本地的 Redis 服务 
Jedis jedis = new Jedis("localhost");
// 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
// jedis.auth("123456"); 
System.out.println("连接成功");
//查看服务是否运行 
System.out.println("服务正在运行: "+jedis.ping()); } }

编译以上 Java 程序,确保驱动包的路径是正确的。

下面我们一起来看看怎么通过Java操作吧。

1.创建maven文件,目录如下

image.png

2.编写pim.xml

Redis 官方推荐使用 Jedis 操作 Redis。 Jedis Client 是 Redis 中一个面向 Java 的客户端,引入的 jar 包的库文件实现了对 Redis 各类 API 进行封装调用。

在 pom.xml 导入 Jedis Client 的依赖,同时将已有 Junit 测试依赖的版本修改为 4.13.2 ,代码如下所示 👇:

<!-- 导入 jedis 依赖 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.3</version>
</dependency>

为了在测试时,控制台不会出现错误日志信息,可以在 pom.xml 文件中添加日志相关的依赖:

3.在 test/java/org/yamya 下新建一个 test 目录,在该目录下新建一个 RedisTest 类,并添加相应的生成 Jedis 对象的方法

image.png

connection() 方法是通过连 Redis 服务器(IP 和端口),生成 Jedis 对象。 close() 方法是用来释放 Jedis 对象的。 在 RedisTest 测试类添加方法用来测试,是否成功连接了 Redis 服务器,代码如下所示 👇:

@Test
public void testConn(){
    System.out.println(jedis.ping());
}

到这里,连接成功,接下来进行相关操作

string 类型 API

通过前面的学习我们知道 Redis 有五种数据类型,这五种数据类型对应的 Redis 中的操作各不相同,除此之外,对于键(key)操作也有一些命令。那么 Jedis 对象是否也提供了这些命令对应的 API 呢?

答案:必须的。Jedis 对象也提供了丰富的 API 来操作不同的数据类型以及键(key)。

image.png

示例: 在 RedisTest 测试类添加两个方法,分别用来新增一个 string 类型数据项和新增多个 string 类型数据项,代码如下所示 👇:

一次新增一个键值对:

image.png

返回值:ok

一次新增多个键值对:

@Test
public void testInsertMany(){
    // 新增多个键值对
    String result = jedis.mset("age","18","sex","man","address","zhejianghangzhou");
    System.out.println(result);
}

新增成功则返回 ok

对应的获取value:

一次获取一个 key 对应的 value :

image.png

输出结果:zhuangwuji

一次获取多个 key 对应的 value:

@Test
public void testGetManyKeyValue(){
    // 一次获取多个指定 key 的 value
    List<String> values = jedis.mget("name","age","sex","address");
    for (String v : values) {
        System.out.println(v);
    }
}

查询结果,如下图所示:

image.png

list 类型 API

image.png

在 RedisTest 测试类添加一个方法,用来新增 list 类型的数据项,代码如下所示 :

    long result = jedis.lpush("list1","zhangsan","yangguo","xiaolongnv","zhangwuji","赵敏");

用来获取 list 中的数据项,代码如下所示 👇:

    List<String> values = jedis.lrange("list1",0,-1);
    for (String v : values) {
      System.out.println(v);
    }

用来删除 list 中的数据项

       long l = jedis.lrem("list1",1,"赵敏");
    }

用来修改 list 中的数据项

image.png

set 类型 API

image.png

用来新增 set 类型的数据项: long result = jedis.sadd("set1","zhangsan","yangguo","xiaolongnv","zhangwuji","赵6");

获取 set 类型的数据项

Set<String> values = jedis.smembers("set1");
    for (String v : values) {
        System.out.println(v);
}

用来删除 set 中的数据项:long l = jedis.srem("set1","zhangwuji");

zset 类型 API

image.png

用来新增 zset 类型的数据项

image.png

用来获取 zset 类型的数据项

image.png

用来删除 set 中的数据项

image.png

hash 类型 API

image.png

添加:String result = jedis.hmset("hash1", param);

获取值:Map<String,String> hash = jedis.hgetAll("hash1");

删除:long l = jedis.hdel("hash1", "phone","email");

常用键:

image.png

type() 返回的结果可能有:set、hash、list、string、zset、none。

总结:

前面可以发现,关键就是jedis.xx()方法。对应这些基本方法,和直接数据库里面crud关键字一样的,可以进行迁移。