Redis-14-Jedis的基本使用

前面的文章中介绍了一些reids的基本命令,数据结构,持久化方式,还有主从集群等等,我们操作redis的数据的时候一直是在redis-cli里面的,本文就来看一下如何用java去操作redis,java操作reids的方式有很多种,这里首先先介绍的是Jedis

准备工作

远程连接reids的前提是,系统关闭防火墙,reids关闭保护模式,还有注释掉redis的ip地址绑定,这些配置基本在前文中已经介绍了,这里再来看一下

关闭防火墙

这里以centos7为例,关闭防火墙命令是:

1
systemctl stop firewalld.service

再补一刀直接禁掉

1
systemctl disable firewalld.service

关闭保护模式

就是redis配置中的protected设置为no,之前一直都是设置的no,如下:

1
protected-mode no

注释掉redis的ip地址绑定

也是在redis.conf中

1
# bind:127.0.0.1

java客户端连接

首先,新建一个工程,然后引入jedis的依赖,如下:

1
2
3
4
5
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

然后可以写一个方法去测试一下,如下:

1
2
3
4
5
6
public static void main(String[] args) {
Jedis jedis = new Jedis("172.16.12.3", 6379);
// 如果设置了密码的话,就需要认证
jedis.auth("123456");
log.info(jedis.ping());
}

运行,控制台输出:

1
16:48:40.227 [main] INFO com.redis.example.test.JedisTest - PONG

连接完成之后就可以对redis中的数据进行操作了,jedis方法名称基本是和命令是一样的,如下:
image

需要用到什么方法,直接通过方法名找就好了,这里就不在多说了

连接池

上面的例子中,频繁的创建和销毁连接会影响性能,我们可以采用连接池来部分的解决这个问题,代码如下:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxIdle(20);
config.setMaxTotal(100);

// ip 端口 超时时间 密码
JedisPool jedisPool = new JedisPool(config, "172.16.12.3", 6379, 5000, "123456");
Jedis jedis = jedisPool.getResource();
log.info(jedis.ping());
}

这样就不会频繁的创建销毁连接了,在JavaSE环境中可以把连接池配置成一个单例模式,如果用了Spring容器的话,可以把连接池交给Spring容器管理

集群连接

上面连接的都是单节点的redis,如果我们想连接一个reids集群呢,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
Set<HostAndPort> clusterNodes = new HashSet<>();
clusterNodes.add(new HostAndPort("172.16.12.3", 7000));
clusterNodes.add(new HostAndPort("172.16.12.3", 7001));
clusterNodes.add(new HostAndPort("172.16.12.3", 7002));
clusterNodes.add(new HostAndPort("172.16.12.3", 7003));
clusterNodes.add(new HostAndPort("172.16.12.3", 7004));
clusterNodes.add(new HostAndPort("172.16.12.3", 7005));

JedisCluster jedisCluster = new JedisCluster(clusterNodes);
jedisCluster.set("testKey", "java");

log.info(jedisCluster.get("testKey"));

}

运行,控制台输出

1
17:13:31.633 [main] INFO com.redis.example.test.JedisTest - java

这里方法名也和redis的命令基本一致,这里就不多说了

jedis就先介绍到这里