spring boot整合redis中间件与热部署实现代码

 更新时间:2023年01月30日 10:49:19   作者:_小许_  
spring boot整合redis最常用的有三个工具库Jedis,Redisson,Lettuce,本文重点介绍spring boot整合redis中间件与热部署实现,需要的朋友可以参考下

热部署

每次写完程序后都需要重启服务器,需要大量的时间,spring boot提供了一款工具devtools帮助实现热部署。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional> <!-- 可选 -->
 </dependency>

导入插件的以来后每次点击 ---->构建------>构建项目就可以了,相比重启要快的多。

Redis

spring boot整合redis最常用的有三个工具库Jedis,Redisson,Lettuce

共同点:都提供了基于 Redis 操作的 Java API,只是封装程度,具体实现稍有不同。

不同点:

Jedis是 Redis 的 Java 实现的客户端。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
特点:使用阻塞的 I/O,方法调用同步,程序流需要等到 socket 处理完 I/O 才能执行,不支持异步操作。Jedis 客户端实例不是线程安全的,需要通过连接池来使用 Jedis。

Redisson
优点点:分布式锁,分布式集合,可通过 Redis 支持延迟队列。

Lettuce
用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
基于 Netty 框架的事件驱动的通信层,其方法调用是异步的。Lettuce 的 API 是线程安全的,所以可以操作单个 Lettuce 连接来完成各种操作。

Jedis

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency>

配置文件

# Redis服务器地址
spring.data.redis.host=192.168.223.128
# Redis服务器连接端口
spring.data.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.data.redis.password=root

注意时spring.data.redis而不是spring.redis后者已经舍弃了。

通过jedis连接redis:

import redis.clients.jedis.Jedis;
public class RedisConect {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.223.128",6379);
        //配置连接密码
        jedis.auth("root");
        String csvfile = jedis.get("csvfile");
        System.out.println(csvfile);
        jedis.close();
    }
}

spring boot 联合jedis连接redis:

//装配参数
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "spring.data.redis")
@Data
public class RedisConfig {
    private String host;
    private int port;
    private String password;
}
//创建jedis
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

@Service
public class JedisService {
    @Autowired RedisConfig redisConfig;



    public Jedis defaultJedis(){
        Jedis jedis = new Jedis(redisConfig.getHost(),redisConfig.getPort());
        jedis.auth(redisConfig.getPassword());
        return jedis;
    }
}
//测试
    @Test
    void One(){
        jedisService.defaultJedis().set("one","word");
        String one = jedisService.defaultJedis().get("one");
        System.out.println(one);
    }

RedisTemplate

装配参数除了上面@ConfigurationProperties的方法还有PropertySource方法:

@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
 
    @Value("${redis.hostName}")
    private String hostName;
 
    @Value("${redis.password}")
    private String password;
 
    @Value("${redis.port}")

}

RedisTemplate是spring自带模板,需要配置一些参数:

package com.example.JedsFactory;

import com.example.RedisConfig.RedisConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;

@Configuration
@PropertySource("classpath:redis.properties")
public class JedisFactory {

        @Value("${spring.data.redis.host}")
        private String host;

        @Value("${spring.data.redis.password}")
        private String password;

        @Value("${spring.data.redis.port}")
        private Integer port;

        @Bean
        public JedisConnectionFactory JedisConnectionFactory(){
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration ();
            redisStandaloneConfiguration.setHostName(host);
            redisStandaloneConfiguration.setPort(port);
            redisStandaloneConfiguration.setPassword(password);
            JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
            JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
                    jedisClientConfiguration.build());
            return factory;
        }

        @Bean
        public RedisTemplate makeRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            return redisTemplate;
        }
}
//redis.properties

# Redis服务器地址
spring.data.redis.host=192.168.223.128
# Redis服务器连接端口
spring.data.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.data.redis.password=root

测试:

    @Test
    void two(){
        redisTemplate.opsForValue().set("two","hello");
        String two =(String) redisTemplate.opsForValue().get("two");
        System.out.println(two);
    }

Caused by: java.lang.NoClassDefFoundError: redis/clients/util/Pool

如果报错了,如标题的错误说明jedis版本高了,有冲突,降低jedis版本即可。

jedis从3.0.1版本降低到2.9.1版本。

Caused by: java.lang.NumberFormatException: For input string: “port”

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "port"
	at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:79) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1339) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.24.jar:5.3.24]
	... 88 common frames omitted
Caused by: java.lang.NumberFormatException: For input string: "port"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_181]
	at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_181]
	at java.lang.Integer.valueOf(Integer.java:766) ~[na:1.8.0_181]
	at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211) ~[spring-core-5.3.24.jar:5.3.24]
	at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) ~[spring-beans-5.3.24.jar:5.3.24]

连接redis时出现这个错误原因是:

Alt

port属性不能用int接收,改为Integer。

Caused by: java.lang.NumberFormatException: For input string: “port“

到此这篇关于spring boot整合redis中间件与热部署实现的文章就介绍到这了,更多相关spring boot整合redis中间件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在CenOS系统下安装和配置Redis数据库的教程

    在CenOS系统下安装和配置Redis数据库的教程

    这篇文章主要介绍了在CenOS系统下安装和配置Redis数据库的教程,Redis是一个可基于内存的高性能NoSQL数据库,需要的朋友可以参考下
    2015-11-11
  • Redis中的连接命令与键命令操作详解

    Redis中的连接命令与键命令操作详解

    Redis连接命令主要是用于客户端与服务器建立连接的,Redis是一种流行的内存数据库,支持多种数据结构,其中键命令是核心操作之一,在Redis中,键(Key)是用来存储数据的主要元素,每个键都有一个唯一的名称,本文给大家介绍了Redis中的连接命令与键命令操作
    2024-09-09
  • Redis数据结构之链表详解

    Redis数据结构之链表详解

    大家好,本篇文章主要讲的是Redis数据结构之链表详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Redis 脚本和连接命令示例详解

    Redis 脚本和连接命令示例详解

    Redis脚本是一种可以实现复杂任务的脚本语言,可以用来快速履行复杂任务,灵活处理数据管理和管理复杂的利用场景,这篇文章主要介绍了Redis 脚本和连接命令,需要的朋友可以参考下
    2023-09-09
  • Redis缓存空间优化实践详解

    Redis缓存空间优化实践详解

    缓存Redis,是我们最常用的服务,其适用场景广泛,被大量应用到各业务场景中。也正因如此,缓存成为了重要的硬件成本来源,我们有必要从空间上做一些优化,降低成本的同时也会提高性能,本文通过代码示例介绍了redis如何优化缓存空间,需要的朋友可以参考一下
    2023-04-04
  • 通过实例解析布隆过滤器工作原理及实例

    通过实例解析布隆过滤器工作原理及实例

    这篇文章主要介绍了通过实例解析布隆过滤器工作原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 详解redis在服务器linux下启动的相关命令(安装和配置)

    详解redis在服务器linux下启动的相关命令(安装和配置)

    这篇文章主要介绍了redis在服务器linux下的启动的相关命令(安装和配置),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Redis连接池监控(连接池是否已满)与优化方法

    Redis连接池监控(连接池是否已满)与优化方法

    本文详细讲解了如何在Linux系统中监控Redis连接池的使用情况,以及如何通过连接池参数配置、系统资源使用情况、Redis命令监控、外部监控工具等多种方法进行检测和优化,以确保系统在高并发场景下的性能和稳定性,讨论了连接池的概念、工作原理、参数配置,以及优化策略等内容
    2024-09-09
  • Redis 事务与过期时间详细介绍

    Redis 事务与过期时间详细介绍

    这篇文章主要介绍了Redis 事务与过期时间详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • 简单粗暴的Redis数据备份和恢复方法

    简单粗暴的Redis数据备份和恢复方法

    这里我们来讲解一个简单粗暴的Redis数据备份和恢复方法,有一个在不同主机上迁移Redis数据的示例,还有一个备份脚本实现的关键点提示,一起来看一下:
    2016-06-06

最新评论