Spring Boot是非常流行的Java Web开发框架,Redis是一种非关系数据库,以键值对的形式存储。
Spring对Redis的支持是通过Spring Data Redis实现的,它为我们提供了RedisTemplate和StringRedisTemplate两个模板来操作数据。
Spring Boot框架也为Redis提供了支持。让我们谈谈将Redis与Spring Boot框架集成的步骤。
智能理念
操作方法 01Spring Boot集成了redis,我们需要添加依赖的jar包。spring-boot-starter-data-redis包含了spring和redis相关的jar包,jedis作为Redis的客户端也需要加入到项目中。Spring Boot的版本信息已经在父pom中指定,子模块中与Spring相关的jar包不需要单独指定。
lt;依赖性 gt
lt;groupId gtorg . spring framework . boot lt;/groupId gt;
lt;artifactId gtspring-boot-starter-data-redis lt;/artifact id gt;
lt;/dependency gt;
lt;依赖性 gt
lt;groupId gtredis.clientslt。/groupId gt;
lt;artifactId gtjedis lt/artifact id gt;
lt;版本 gt3 . 0 . 0-m1 lt;/version gt;
lt;/dependency gt;
Spring Boot将根据application.properties中的配置自动配置Redis的属性,并将它们注入the properties类。
在application.properties配置文件中,这些属性以spring.redis为前缀。值得注意的是,Spring Boot 1.5 . x版本中默认的Redis客户端是jedis,所以没有必要在配置文件中指定,如下图所示。
Spring Boot 1.5 . x 1.5 . x版本的集成配置可以在网上搜索到大量文章,但是Spring Boot 2 . x版本的集成信息却非常少,甚至提供的配置都无法正常使用。因此,本文主要阐述Spring Boot 2 . x版本的集成和Redis的使用。
Spring-Boot version 2.x有两种客户端,jedis和莴苣,所以我们必须指定使用哪种客户端。下图显示了两个客户端的配置。本文使用Jedis客户端连接池,具体配置如下。
# Redis数据库索引(默认为0)
spring . Redis . database = 0
# Redis服务器地址
spring . Redis . host = 127 . 0 . 0 . 1
。spring . Redis . port = 6379
# Redis服务器连接密码(默认为空)
spring . Redis . password = xylx 1 . t!@#
#配置jedis连接池
#连接池中最大连接数(负值表示无限制)
spring.redis.jedis . pool . max-active = 8
#连接池最大阻塞等待时间(负值表示无限制)
spring . redis . jedis . pool . max-wait =-1 ms
#连接池中最大空空闲连接
spring . redis . jedis
另外,spring.redis.timeout尽量不要配置0,否则可能会出现io .莴苣. core . rediscommandtimeoutexception:command timeout超时错误。
编辑完配置文件后,我们开始编写存储和读取Redis数据的代码。
我们创建一个RedisUtil工具类,它使用@Component注释来表示它是由Spring管理的。StringRedisTemplate由Spring提供,可以使用@Autowired注释直接注入。然后,我们可以编写存储和读取的代码。
@ Component
public class redistutil {
@ Autowired
private stringdistemplate redistempt;
/* *
* Save String
* @ param key cache key
* @ param value cache value
* @ param expiry time(s)
*/br public void setString(String key,String value,int expire time){
value operations lt;String,String gtops = redis template . ops forvalue();
if (expireTime!= 0) {
ops.set(key,value,expireTime,TimeUnit。秒);
} else {
ops.set(key,value);
}
}
/* *取字符串
* @ param key cache key
* @ return cache value
*/
String,String gtops = this . redis template . ops forvalue();
return ops . get(key);
}
接下来,我们编写控制器层代码来调用RedisUtil工具类来存储和读取数据。代码简单,请参考下图。
如果要验证Redis是否可用,还需要编写一个启动类,如下图所示。
从上图可以看出,我们编写了一个post请求来存储字符串,并编写了一个get请求来获取字符串。
startup类通过main方法启动应用程序。接下来,我们使用postman来模拟浏览器调用post并获取请求。从下图我们可以看到Redis存储的数据被成功取出。
接下来,我们介绍Jedis,它是一个封装Redis的客户端。在集成Redis和Spring Boot的基础上,可以提供更简单的API操作。
所以我们需要配置JedisPool的Bean。代码如下,其中@Configuration注释表示这是一个配置类。我们将RedisProperties注入这个类,并用@Bean注释指定JedisPool。
@ Configuration
public class redis Configuration {
@ Autowired
private re properties properties;
@ Bean
public JedisPool getJedisPool(){
JedisPoolConfig config = new JedisPoolConfig();
config . setmaxidle(properties . get jedis()。getPool()。getMaxIdle());
config . setmaxtotal(properties . get jedis()。getPool()。getMaxActive());
config . setmaxwaitmillis(properties . get jedis()。getPool()。getMaxWait()。toMillis());
JedisPool pool = new JedisPool(config,properties.getHost(),
properties.getPort(),100,
properties.getPassword(),properties . get database());
返回池;
}
}
接下来我们编辑JedisUtil工具类,通过SpringBoot容器的@Component注释自动创建,注入到JedisPool中,使用jedisPool.getResource()方法获取Jedis,最终实现redis数据库的操作。它的代码如下。
@ Component
public class JedisUtil {
@ Autowired
JedisPool JedisPool;
/Get key的值
public string Get(string key){
jedis jedis = jedis pool . getresource();
String str = quot;";
try {
str = jedis . get(key);
}最后{
试试{
jedis . close();
} catch(Exception e){
e . printstacktrace();
}
}
return str;
}
public String set(String key,String value){
Jedis Jedis = Jedis pool . get resource();
String str = quot;";
try {
str = jedis . set(key,value);
}最后{
试试{
jedis . close();
} catch(Exception e){
e . printstacktrace();
}
}
return str;
}
}
在JedisUtil工具类编写完成后,我们修改前面的RedisController,并将其注入到JedisUtil中。代码如下图所示。
然后分别调用post和get与postman的接口,我们可以看到新密钥的值已经成功获取。
在Spring Boot集成Redis之前,这台机器需要安装Redis,你也可以使用桌面管理工具RedisDesktopManager来查看Redis中的数据。