目录
一、Jedis
二、Lettuce
三、一个Demo
Java集成Redis主要有3个方案:Jedis、Lettuce和Redisson。
其中,Jedis、Lettuce侧重于单例Redis,而Redisson侧重于分布式服务。
项目资源在文末
一、Jedis
1、创建SpringBoot项目
2、引入依赖
其中,jedis是所需要的依赖,lombok是为了方便后续配置
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3、 配置yml
#redis配置--jedis版
jedis:
pool:
#redis服务器的IP
host: localhost
#redis服务器的Port
port: 6379
#数据库密码
password:
#连接超时时间
timeout: 7200
#最大活动对象数
maxTotall: 100
#最大能够保持idel状态的对象数
maxIdle: 100
#最小能够保持idel状态的对象数
minIdle: 50
#当池内没有返回对象时,最大等待时间
maxWaitMillis: 10000
#当调用borrow Object方法时,是否进行有效性检查
testOnBorrow: true
#当调用return Object方法时,是否进行有效性检查
testOnReturn: true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
timeBetweenEvictionRunsMillis: 30000
#向调用者输出“链接”对象时,是否检测它的空闲超时;
testWhileIdle: true
# 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
numTestsPerEvictionRun: 50
4、导入配置文件和加载配置类
导入配置文件:JedisProperties,导入yml文件内容
加载配置类:JedisConfig,加载JedisProperties内容
①JedisProperties
package com.example.redis_java.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "jedis.pool")
@Getter
@Setter
public class JedisProperties {
private int maxTotall;
private int maxIdle;
private int minIdle;
private int maxWaitMillis;
private boolean testOnBorrow;
private boolean testOnReturn;
private int timeBetweenEvictionRunsMillis;
private boolean testWhileIdle;
private int numTestsPerEvictionRun;
private String host;
private String password;
private int port;
private int timeout;
}
②JedisConfig
说明:如果SpringBoot是2.x版本,JedisConfig请使用注释掉的两行代码而不是它们对应的上面的代码
package com.example.redis_java.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
@Configuration
public class JedisConfig {
/**
* jedis连接池
*
* @param jedisProperties
* @return
*/
@Bean
public JedisPool jedisPool(JedisProperties jedisProperties) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(jedisProperties.getMaxTotall());
config.setMaxIdle(jedisProperties.getMaxIdle());
config.setMinIdle(jedisProperties.getMinIdle());
config.setMaxWait(Duration.ofMillis(jedisProperties.getMaxWaitMillis()));
// config.setMaxWaitMillis(jedisProperties.getMaxWaitMillis());
config.setTestOnBorrow(jedisProperties.isTestOnBorrow());
config.setTestOnReturn(jedisProperties.isTestOnReturn());
config.setTimeBetweenEvictionRuns(Duration.ofMillis(jedisProperties.getTimeBetweenEvictionRunsMillis()));
// config.setTimeBetweenEvictionRunsMillis(jedisProperties.getTimeBetweenEvictionRunsMillis());
config.setTestWhileIdle(jedisProperties.isTestWhileIdle());
config.setNumTestsPerEvictionRun(jedisProperties.getNumTestsPerEvictionRun());
if (StringUtils.hasText(jedisProperties.getPassword())) {
return new JedisPool(config, jedisProperties.getHost(), jedisProperties.getPort(), jedisProperties.getTimeout(), jedisProperties.getPassword());
}
return new JedisPool(config, jedisProperties.getHost(), jedisProperties.getPort(), jedisProperties.getTimeout());
}
}
③项目结构
5、测试
①测试前
②测试类
package com.example.redis_java;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@SpringBootTest
public class JedisTest {
@Autowired
private JedisPool jedisPool;
@Test
public void testConnection() {
System.out.println(jedisPool);
Jedis jedis = jedisPool.getResource();
jedis.set("name", "Trxcx");
System.out.println(jedis.get("name"));
jedis.sadd("mySet", "a", "b", "d");
System.out.println(jedis.smembers("mySet"));
// jedis的方法名就是redis的命令
jedis.close();
}
}
③项目结构
④运行测试类
⑤测试后
说明:jedis的方法名就是redis的命令。如sadd、smembers。
二、Lettuce
Lettuce配置比较简单,这里直接在上一个项目的基础上进行配置,新项目配置Lettuce方法一致。
1、引入依赖
<!--Lettuce依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置yml
如果有密码,设置对应的密码。
spring:
redis:
host: 127.0.0.1
port: 6379
# password: admin
3、测试
①编写测试类
package com.example.redis_java;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
public class LettureTest {
@Autowired
private StringRedisTemplate template;
// 约定:
// 操作redis的key是字符串
// value是字符串类型或字符串类型元素
@Test
public void testRedis() {
template.opsForValue().set("name", "Trxcx");
System.out.println(template.opsForValue().get("name"));
template.opsForSet().add("Games","RDR2","CS2","ACOd");
System.out.println(template.opsForSet().members("Games"));
// 操作string
// template.opsForValue().xx();
// 操作hash
// template.opsForHash().xx();
// 操作list
// template.opsForList().xx();
// 操作set
// template.opsForSet().xx();
// 操作zset
// template.opsForZSet().xx();
// spring-data-redis方法是redis命令全称
// template.opsForList().rightPush() //rpush
// 全局命令在template类上
// template.keys("*");
}
}
②项目结构
③运行测试类
4、说明:
①Lettuce使用StringRedisTemplate的一个对象完成对Redis的操作,不存在像Jedis那样获取Redis资源使用完再关闭的情况。
②Lettuce通过opsForxxx完成对不同value类型的操作,例如
- opsForValue()是操作String类型的
- opsForHash()是操作Hash类型的
- opsForList()是操作List类型的
- opsForSet()是操作Set类型的
- opsForZSet()是操作Zset类型的
③Lettuce的方法名是Redis命令的全称
例如:template.opsForList().rightPush(),对应Redis中的rpush命令
④全局命令作用在StringRedisTemplate对象上
例如:template.keys("*");
三、一个Demo
这个demo实现了每次刷新或者访问网页时,阅读量+1的效果。
启动SpringBoot项目后,访问http://localhost:8080/detail.html,每次刷新页面阅读量+1。
项目资源链接:
1、【免费】Redis-Java.zip资源-CSDN文库
2、【免费】RedisDemo.zip资源-CSDN文库