本章导学:
- 什么是Jedis?
- Jedis入门案例
- 新建项目,导入依赖
- 建立连接
- 进行测试
- 释放资源
- Jedis的连接池使用
一、什么是Jedis
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分布式的容器实现。
但是,Jedis的实例不是I线程安全的,我们还需要使用Jedis连接池来为我们创建一些安全可靠的实例
二、Jedis入门案例
2.1、新建项目并导入依赖
新建一个SpringBoot项目或一般的Maven项目都可以,在pom.xml导入Jedis依赖和pool连接池
<!-- redis相关 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.2、建立连接
@BeforeEach
void setUp(){
//1,建立连接,传入虚拟机的IP地址和端口号
jedis = new Jedis("192.168.75.128",6379);
//2,设置密码
jedis.auth("124856");
//3,选择数据库
jedis.select(1);
}
@BeforeAll | 修饰在方法上,使用该注解的方法在当前整个测试类中所有的测试方法之前执行,每个测试类运行时只会执行一次。 |
2.3、进行测试
Jedis的方法名与Redis的命令一毛一样,非常方便~
这里测试一个String类型的命令和HASH类型的命令
@Test
void testString(){
String result = jedis.set("username", "brrbaii");
System.out.println("result:" + result);
String username = jedis.get("username");
System.out.println("name:" + username);
}
@Test
void testHash(){
jedis.hset("brrbaii:user:1", "name", "baibai");
Map<String, String> map = jedis.hgetAll("brrbaii:user:1");
System.out.println(map);
}
运行结果:
2.4、释放资源
@AfterEach
void tearDown(){
if (jedis != null){
jedis.close();
}
}
@AfterAll | 修饰在方法上,与@BeforeAll对应,使用该注解的方法在当前测试类中所有测试方法都执行完毕后执行的,每个测试类运行时只会执行一次。 |
完整测试代码如下
package com.brrbaii;
import com.brrbaii.util.JedisConnectionFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;
import java.util.Map;
@SpringBootTest
public class redisTest {
private Jedis jedis;
@BeforeEach
void setUp(){
//1,建立连接,传入虚拟机的IP地址和端口号
jedis = new Jedis("192.168.75.128",6379);
//2,设置密码
jedis.auth("124856");
//3,选择数据库
jedis.select(1);
}
@Test
void testString(){
String result = jedis.set("username", "brrbaii");
System.out.println("result:" + result);
String username = jedis.get("username");
System.out.println("name:" + username);
}
@Test
void testHash(){
jedis.hset("brrbaii:user:1", "name", "baibai");
Map<String, String> map = jedis.hgetAll("brrbaii:user:1");
System.out.println(map);
}
@AfterEach
void tearDown(){
if (jedis != null){
jedis.close();
}
}
}
三、Jedis连接池的使用
Jedis的实例不是线程安全的,而且频繁创建和销毁连接损耗性能,所以需要使用Jedis连接池来代替Jedis直连
我们定义一个静态工厂JedisConnectionFactory
然后直接CV
package com.brrbaii.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisConnectionFactory {
private static final JedisPool jedisPool;
static {
//配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大连接数
poolConfig.setMaxTotal(8);
//最大空闲连接
poolConfig.setMaxIdle(8);
//最小空闲连接
poolConfig.setMinIdle(0);
//最长等待时间,ms
poolConfig.setMaxWaitMillis(1000);
//创建连接池对象
jedisPool = new JedisPool(poolConfig,"192.168.75.128",6379,1000,"124856");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
接下来回到我们的测试方法里,修改Jedis连接方式
完事~