Java操作Redis以及Redis线程池的用法
Redis的Java客户端
在Redis官网中提供了很多语言的客户端:Redis官网
Redis的Java客户端类别
所以我们大致是要了解3种客户端 Jedis、lettuce、Redisson
其中Spring帮我们做了整合,将Jedis与lettuce进行了封装成了它特有的Spring Data Redis
至于Redisson是用在分布式的场景中,在学习分布式锁的时候小伙伴可以自行去了解一下,这里不做赘述。
Jedis
Jedis直连
- 引入依赖
- 建立连接
- 编写测试方法
- 释放资源
引入依赖
<!--redis的依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<!--测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
建立连接、编写测试方法、释放资源
public class JedisTest {
private Jedis jedis;
// 在Junit5中使用了 @BeforeEach注解替代了 在Junit4的@Before
// 表示应在当前类中的每个@Test方法之前执行注解方法
@BeforeEach
void setUp() {
// 建立连接
jedis = new Jedis("192.168.88.130",6379);
// 设置密码
jedis.auth("888888");
// 选择库
jedis.select(0);
}
@Test
void testString() {
// 插入数据
String set = jedis.set("name", "天狼");
System.out.println(set);
// 获取数据
String name = jedis.get("name");
System.out.println(name);
}
@AfterEach
void setDown() {
if (jedis != null) {
jedis.close();
}
}
}
注意:
在Junit5中使用 @BeforeEach注解替代了 在Junit4的@Before。表示应在当前类中的每个@Test方法之前执行注解方法。
后面的@AfterEach也类似,表示在@Test方法之后执行注解方法。
Jedis线程池
Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池的方式代替直连。
我们通常会创建一个工具类JedisConnectFactory ,用于创建其连接池,设置参数。
JedisConnectFactory 用于设置连接池的属性
public class JedisConnectFactory {
private static final JedisPool jedisPoll;
static {
// 配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(8);
// 最大空闲连接(没有人访问,池子中仍存在的连接数)
poolConfig.setMaxIdle(8);
// 最小空闲时间(超过一段时间,要是一直没有访问...)
poolConfig.setMinIdle(0);
// 等待时长
poolConfig.setMaxWaitMillis(1000);
//创建连接池对象
jedisPoll = new JedisPool(poolConfig,
"192.168.88.130",
6379,
1000,
"888888");
}
public static Jedis getJedis() {
return jedisPoll.getResource();
}
}
和上述的Test方法相比 只是将new Jedis("192.168.88.130",6379) 转变为调用刚刚创建的工具类中的静态方法JedisConnectFactory.getJedis();
public class JedisTest {
private Jedis jedis;
// 在Junit5中使用了 @BeforeEach注解替代了 在Junit4的@Before
// 表示应在当前类中的每个@Test方法之前执行注解方法
@BeforeEach
void setUp() {
// 建立连接(连接池!!!)
jedis = JedisConnectFactory.getJedis();
// 设置密码
jedis.auth("888888");
// 选择库
jedis.select(0);
}
@Test
void testString() {
// 插入数据
String set = jedis.set("name", "天狼");
System.out.println(set);
// 获取数据
String name = jedis.get("name");
System.out.println(name);
}
@AfterEach
void setDown() {
if (jedis != null) {
jedis.close();
}
}
}