Spring Boot如何整合Redis

Spring Boot是目前非常流行的Java Web开发框架,Redis是非关系型数据库的一种,以键值对的形式存储。Spring对Redis的支持是通过Spring Data Redis来实现的,给我们提供了RedisTemplate和StringRedisTemplate两种模板来操作数据。Spring Boot框架也提供了对Redis的支持,下面我们来讲一下Spring Boot框架整合Redis的步骤。

操作方法

  • 01

    Spring Boot整合Redis我们需要添加依赖的jar包,spring-boot-starter-data-redis中包含spring和redis相关的jar包,jedis作为redis的客户端也需要添加到工程中,Spring Boot的版本信息在父pom中已指定,子模块中的spring相关的jar包无需另外指定。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.0-m1</version> </dependency>

  • 02

    Spring Boot会根据application.properties中的配置对Redis的属性进行自动配置,并注入到RedisProperties类中。在application.properties配置文件中这些属性都是以spring.redis为前缀的,值得注意的是在Spring Boot 1.5.x版本中默认的Redis客户端是jedis,因此在配置文件中无需指定,如下图所示。

  • 03

    Spring Boot 1.5.x版本的整合配置网上可以搜索大量的文章,然而Spring Boot 2.x版本的整合资料却非常少,甚至提供的配置不能正常使用,因此本文主要讲解Spring Boot 2.x整合Redis以及Redis的使用情况。spring-boot 2.x版本有jedis和lettuce两种客户端,因此我们必须要去指定使用哪一种客户端,两个客户端的配置如下图所示,本文使用的是Jedis客户端连接池,具体的配置如下。 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=xylx1.t!@# # 配置jedis连接池 # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1ms # 连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=5000ms 由配置我们可以看到spring-boot 2.x版本时间设置需要加单位ms,因为参数的类型为Duration。另外spring.redis.timeout尽量不要配置0,否则可能会出现io.lettuce.core.RedisCommandTimeoutException: Command timed out超时错误。

  • 04

    配置文件编辑完成后,我们开始编写代码实现Redis数据的存储和读取。我们创建一个RedisUtil工具类,该类使用@Component注解表示交由Spring管理,StringRedisTemplate是Spring提供的,可以使用@Autowired注解直接注入,接下来便可以书写存和取的代码了。 @Component public class RedisUtil { @Autowired private StringRedisTemplate redisTemplate; /** * 存字符串 * @param key 缓存键 * @param value 缓存值 * @param expireTime 过期时间(s) */ public void setString(String key, String value, int expireTime){ ValueOperations<String, String> ops = redisTemplate.opsForValue(); if (expireTime != 0) { ops.set(key, value, expireTime, TimeUnit.SECONDS); } else { ops.set(key,value); } } /** * 取字符串 * @param key 缓存键 * @return 缓存值 */ public String getString(String key){ ValueOperations<String, String> ops = this.redisTemplate.opsForValue(); return ops.get(key); }

  • 05

    接下来我们编写Controller层代码去调用RedisUtil工具类,实现数据的存储和读取,代码比较简单可以参考下图。若想验证Redis是否可用,还需要编写启动类,如下图所示。

  • 06

    由上图可看到我们编写了一个post请求用于存储字符串,get请求用于取出字符串。启动类通过main方法启动应用,接下来我们使用postman去模拟浏览器调用post和get请求,由下图可以看到Redis存储的数据成功被取出。

  • 07

    接下来我们介绍Jedis,这是一个封装了Redis的客户端,在Spring Boot整合Redis的基础上,可以提供更简单的API操作。因此我们需要配置JedisPool的Bean,代码如下,其中@Configuration注解表明这是一个配置类,我们在该类中注入RedisProperties,并且使用@Bean注解指定JedisPool。 @Configuration public class RedisConfiguration { @Autowired private RedisProperties properties; @Bean public JedisPool getJedisPool(){ JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(properties.getJedis().getPool().getMaxIdle()); config.setMaxTotal(properties.getJedis().getPool().getMaxActive()); config.setMaxWaitMillis(properties.getJedis().getPool().getMaxWait().toMillis()); JedisPool pool = new JedisPool(config,properties.getHost(), properties.getPort(),100, properties.getPassword(), properties.getDatabase()); return pool; } }

  • 08

    接下来我们编辑JedisUtil工具类,通过SpringBoot容器的@Component注解来自动创建,并且注入JedisPool,使用jedisPool.getResource()方法来获取Jedis,并最终实现操作redis数据库,其代码如下。 @Component public class JedisUtil { @Autowired JedisPool jedisPool; //获取key的value值 public String get(String key) { Jedis jedis = jedisPool.getResource(); String str = ""; try { str = jedis.get(key); } finally { try { jedis.close(); } catch (Exception e) { e.printStackTrace(); } } return str; } public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String str = ""; try { str = jedis.set(key, value); } finally { try { jedis.close(); } catch (Exception e) { e.printStackTrace(); } } return str; } }

  • 09

    JedisUtil工具类编写完成后,我们修改之前的RedisController,并注入JedisUtil,代码如下图所示。然后再用postman分别调用post和get接口,我们可以看到成功取到了新的key的value值。

(0)

相关推荐

  • spring boot与redis 实现session共享步骤详解

    这次带来的是spring boot + redis 实现session共享的教程. 在spring boot的文档中,告诉我们添加@EnableRedisHttpSession来开启spring se ...

  • Spring Boot入门使用教程

    Spring Boot 并不是一个全新的框架,而是将已有的 Spring 组件整合起来.特点是去掉了繁琐的 XML 配置,改使用约定或注解.所以熟悉了 Spring Boot 之后,开发效率将会提升一 ...

  • spring boot 图片上传与显示功能实例详解

    首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到classpath的目录下的, ...

  • 如何使用IntelliJ IDEA创建Spring Boot项目

    今天小编带大家学习一下如何利用Spring Boot快速搭建一个简单的web应用,以前使用Spring会伴随着大量的XML配置文件以及复杂的Bean依赖关系,Spring Boot在开发过程中大量使用 ...

  • Spring Boot项目的搭建

    Spring Boot是基于Spring的最新开发框架,官网最新如下图所示.Spring Boot的出现简化了框架搭建和开发,减少了很多开发成本.该框架遵循"约定大于配置的"原则, ...

  • SpringBoot整合SpringSeesion实现Redis缓存

    使用Spring Boot开发项目时我们经常需要存储Session,因为Session中会存一些用户信息或者登录信息.传统的web服务是将session存储在内存中的,一旦服务挂了,session也就 ...

  • Spring + Spring MVC + Mybatis 高性能web构建实例教程详解

    用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/Eliteams ...

  • Eclipse如何安装Spring Tool Suite(STS)插件

    Spring Tool Suite(STS)是一个定制版的Eclipse插件,专为Spring开发定制的,用于快速创建Spring的项目.下面小编为大家介绍在Eclipse中联网安装STS插件,安装后 ...

  • SpringBoot与Mybatis实现SpringMVC Web项目详解

    一.热身 一个现实的场景是:当我们开发一个Web工程时,架构师和开发工程师可能更关心项目技术结构上的设计.而几乎所有结构良好的软件(项目)都使用了分层设计.分层设计是将项目按技术职能分为几个内聚的部分 ...