本篇主要记录如何在spring boot开发中,集成redis操作。按照spring boot的惯例,开发一个redis starter模块,借此记录如何开发一个spring boot starter模块。
在java ide中新建maven工程,按照spring boot starter约定的规则命名为ecode-redis-spring-boot-starter,并引入依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot,not include plugin management as the parent import style --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
完整的pom.xml参考源码文件。工程结构如下图:
本redis-starter模块主要java文件只有三个:
(1)redis连接池配置类:RedisProperties.java
redis连接池的配置项主要有(下面配置项主要配置在application.properties中):
ecode.redis.host=redis服务端主机地址(如192.168.1.110) ecode.redis.port=redis服务连接端口(默认6379) ecode.redis.timeout=3000 ecode.redis.password=redis_password ecode.redis.max-active=50 ecode.redis.max-idle=5 ecode.redis.min-idle=0 ecode.redis.max-waitMillis=5000 ecode.redis.test-on-borrow=false ecode.redis.test-on-return=false ecode.redis.dbidx=0
对应的java配置类为RedisProperties.java,代码片段:
import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "ecode.redis") public class RedisProperties { private String host; private int port = 6379; private int timeout = 3000; private String password; private int maxActive = 10; private int maxIdle = 5; private int minIdle = 0; private long maxWaitMillis = 5000; private boolean testOnBorrow = false; private boolean testOnReturn = false; private int dbidx; //属性字段对应的set、get方法 }
@ConfigurationProperties注解指定该类为spring boot的属性配置类,prefix属性指定配置项的前缀。
(2)redis连接池自动初始化类:RedisAutoConfiguration.java
import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.Assert; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Configuration @EnableConfigurationProperties(RedisProperties.class) @ConditionalOnClass({ JedisPoolConfig.class, JedisPool.class, Jedis.class }) public class RedisAutoConfiguration { @Autowired private RedisProperties properties; private JedisPool jedisPool; @PostConstruct public void initJedisPool() { System.out.print("------初始化JedisPool.....host=" + properties.getHost()); boolean hostExist = properties.getHost() != null && properties.getHost().trim().length() > 0; Assert.isTrue(hostExist, "Redis主机地址不能为空,请配置[ecode.redis.host]"); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(properties.getMaxActive()); config.setMaxIdle(properties.getMaxIdle()); config.setMinIdle(properties.getMinIdle()); config.setMaxWaitMillis(properties.getMaxWaitMillis()); config.setTestOnBorrow(properties.isTestOnBorrow()); config.setTestOnReturn(properties.isTestOnReturn()); if (properties.getPassword() == null || properties.getPassword().trim().length() <= 0){ jedisPool = new JedisPool(config, properties.getHost(), properties.getPort(), properties.getTimeout(), null, properties.getDbidx()); }else{ jedisPool = new JedisPool(config, properties.getHost(), properties.getPort(), properties.getTimeout(), properties.getPassword(), properties.getDbidx()); } System.out.println(".....ok!"); } //........初始化redis操作客户端实例并注入spring容器 }
(3)redis命令操作类:RedisClient.java
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPubSub; import redis.clients.jedis.Pipeline; import redis.clients.jedis.Response; public class RedisClient { private JedisPool pool; public void setPool(JedisPool pool){ this.pool = pool; } public RedisClient(){} public RedisClient(JedisPool pool){ this.pool = pool;} public Jedis getJedis() { return pool.getResource(); } public void release(Jedis jedis) { if (jedis != null) jedis.close(); } public Set<String> getAllKeys(String pattern){ Jedis jedis = null; try { jedis = getJedis(); return jedis.keys(pattern); } catch (Exception e) { String err = "从Redis里获取所有匹配("+pattern+")的KEY值发生异常"; //LOG.error(err, e); throw new RuntimeException(err, e); }finally{ release(jedis); } } /** * 以秒为单位返回 key的剩余过期时间。<br><br> * 注:当 key不存在时,返回 -2 。 当 key存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key的剩余生存时间。<br> * 在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 * @param key * @return * */ public Long ttl(String key) { Jedis jedis = null; try { jedis = getJedis(); return jedis.ttl(key); } catch (Exception e) { String err = "从Redis里获取key="+key+"的剩余过期时长发生异常"; //LOG.error(err, e); throw new RuntimeException(err, e); }finally{ release(jedis); } } public void set(String key, String value) { if (value == null){ return; } Jedis jedis = null; try { jedis = getJedis(); jedis.set(key, value); } catch (Exception e) { //LOG.error("往Redis里set[key={}, value={}]的值发生异常", key, value, e); throw new RuntimeException("往Redis里设置key="+key+"的值发生异常", e); }finally{ release(jedis); } } //....其他redis命令操作 }
然后在第(2)步的redis连接池自动初始化类(RedisAutoConfiguration.java)中增加RedisClient的初始化方法:
@Bean @ConditionalOnMissingBean public RedisClient redisClient(){ Assert.isTrue(jedisPool != null, "JedisPool尚未初始化,无法初始化RedisClient"); return new RedisClient(jedisPool); }
代码完成后,要使项目运行时,redis连接池自动初始化类(RedisAutoConfiguration.java)生效,也就是真正做到redis的auto configure,还需要在spring.factories文件中注册RedisAutoConfiguration.java,该文件位于resources/META-INF路径下面。注册内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jsecode.springboot.redis.RedisAutoConfiguration
很多道友初次创建自己的spring boot starter模块时,发现配置类并没有auto configure,原因就是忘了在spring.factories文件中注册自己的AutoConfiguration类。
(4)在应用中使用redis客户端,只需要在应用的pom.xml中引入ecode-redis-spring-boot-starter模块的依赖,然后在需要使用redis的类中注入RedisClient的实例:
@Autowired RedisClient redisClient;
然后调用redisClient来操作redis命令。
完整工程源码参考github
相关推荐
综上所述,"Netty+Spring Boot仿微信 全栈开发高性能后台及客户端"项目是一个综合性的学习和实践平台,涵盖了网络编程、后端开发、全栈集成以及性能优化等多个领域。通过这个项目,开发者不仅可以提升自己的技术能力...
在IT行业中,Spring Boot、MyBatis、Spring Security和Redis是四个非常重要的技术组件,它们在构建高效、安全且可扩展的Java应用中扮演着关键角色。本文将深入探讨这四大技术的整合及其核心概念。 首先,Spring ...
Spring Boot简化了Spring应用程序的初始搭建以及开发过程,旨在“开箱即用”,并允许开发者快速构建可生产的应用程序。 在本书中,首先会讲解Spring Boot的基础知识,包括如何创建第一个Spring Boot项目,配置...
综上所述,这个"Spring-boot web项目实例"涵盖了Spring Boot的核心特性、前后端交互的实现以及Thymeleaf模板引擎的使用,为我们提供了一个完整的Web应用开发范例。开发者可以通过学习和实践这个项目,深入了解Spring...
本文将详细介绍如何在Spring项目中集成Redis,并通过提供的压缩包文件进行快速集成。 首先,我们来了解**Redis配置**。在Spring项目中,我们需要在`application.properties`或`application.yml`文件中添加Redis的...
它提供了丰富的 API,支持所有 Redis 命令,是 Spring Boot 集成 Redis 的常见选择。在 Spring Boot 中配置 Jedis,我们通常会在 `application.properties` 或 `application.yml` 文件中设置 Redis 的连接信息,如...
在IT行业中,Spring框架是Java应用开发中的一个关键组件,而Redis则是一种高性能的键值存储系统,常用于缓存、消息队列等场景。本文将深入探讨如何将Spring与Redis进行集成,以及如何实现对Redis集群的支持。 首先...
在Spring Boot中,可以通过Spring Data Redis库轻松地集成Redis,提供操作Redis的API,例如字符串、哈希、列表、集合和有序集合的操作。 4. **PageHelper**:PageHelper是Mybatis的一个插件,用于实现分页查询功能...
在现代的Web开发中,Spring Boot以其简洁的配置和快速的开发能力,成为了Java开发者们首选的框架之一。而Redis,作为一个高性能的键值数据库,常被用于缓存、消息队列等多种场景,大大提升了应用的性能。本文将详细...
`redis-spring-boot-starter`是Spring Boot生态中的一个启动器(Starter),它简化了Redis与Spring Boot集成的过程,使得开发者无需手动配置复杂的Redis连接参数,就能快速地在应用中启用Redis服务。这个启动器通常...
在现代Web开发中,Spring Boot以其简洁的配置和强大的功能成为了Java开发者的首选框架之一。在处理高并发、数据持久化等场景时,Redis作为一个高性能的键值存储系统,被广泛应用。本篇将详细讲解如何在Spring Boot...
Redis是一款开源的、高性能的键值对数据库,而Spring是Java领域广泛使用的框架,提供了一整套的企业级应用开发工具。将Spring与Redis结合,可以方便地在应用程序中利用Redis的强大功能。 一、Spring Data Redis概述...
它还集成了许多常用库,如Spring Data、Spring Security等,使得开发人员能够快速构建复杂的Web应用。 **Redis** Redis是一款开源的、高性能的键值对存储系统,适用于数据缓存、消息队列等多种场景。它支持多种数据...
在构建现代化的Web应用时,安全性和数据存储是至关重要的考虑因素。...通过Spring Boot的灵活性和Spring Security的全面保护,以及Redis和MongoDB的高效数据处理,这个框架可以满足大多数现代Web应用的需求。
Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只...
要在 Spring Boot 项目中集成 Redis,首先需要在构建文件(如 `pom.xml` 或 `build.gradle`)中添加 `spring-boot-starter-data-redis` 依赖。这个依赖包含了所有必需的组件,包括客户端驱动程序。 ```xml <!-- ...
在现代Web开发中,实时通信功能日益重要,Spring Boot作为Java领域中的轻量级框架,结合WebSocket和Redis可以构建出高效的实时推送系统。本项目"spring-boot-demo-cluster-redis-websocket.zip"就是这样一个示例,它...
在本项目中,我们主要关注的是SpringBoot 2.7版本与多个技术的深度整合,包括Spring Security、JWT(JSON Web Token)、Redis...这样的设计提高了系统的安全性、性能和可扩展性,是现代Web应用开发中的典型架构模式。
在实际开发中,Spring Boot常用于构建RESTful API、Web服务以及后台微服务。本项目可能包含了Spring Boot的配置、启动类、MVC控制器以及数据访问层的实现,展示了如何整合其他组件,如Redis和Dubbo。 **Redis** ...
该手册详细介绍了如何利用Spring Boot 2.0进行高效、便捷的Web应用开发,涵盖了从基础概念到高级特性的全方位知识。 在Spring Boot 2.0中,我们首先会接触到的是它的核心特性,包括自动配置、起步依赖和命令行界面...