• SpringBoot 整合 Redis 全面教程:从配置到使用


    Redis 是一种高性能的键值存储数据库,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。

    一、添加 Redis 依赖

    在 pom.xml 文件中添加 Redis 相关依赖

    1. <dependencies>
    2.   <!-- Spring Data Redis -->
    3.   <dependency>
    4.     <groupId>org.springframework.boot</groupId>
    5.     <artifactId>spring-boot-starter-data-redis</artifactId>
    6.   </dependency>
    7. </dependencies>

    二、配置 Redis 连接信息

    在 application.properties 或 application.yml 配置文件中添加 Redis 连接信息

    1. spring.redis.host=127.0.0.1
    2. spring.redis.port=6379

    根据自己 Redis 服务器配置,修改主机和端口信息

    三、使用 RedisTemplate 进行操作

    1. 创建 RedisTemplate Bean

    在配置类中创建 RedisTemplate Bean,用于进行 Redis 操作

    1. @Configuration
    2. public class RedisConfig {
    3.   @Bean
    4.   public RedisTemplate<StringObjectredisTemplate(RedisConnectionFactory connectionFactory) {
    5.     RedisTemplate<StringObject> template = new RedisTemplate<>();
    6.     template.setConnectionFactory(connectionFactory);
    7.     template.setKeySerializer(new StringRedisSerializer());
    8.     template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    9.     return template;
    10.   }
    11. }

    上述示例中使用了 JSON 序列化器来对值进行序列化和反序列化,你也可以根据需要选择其他序列化器。

    2. 注入 RedisTemplate

    在服务类或控制器中注入 RedisTemplate

    1. @Autowired
    2. private RedisTemplate<StringObject> redisTemplate;
    3. 执行 Redis 操作

    使用注入的 RedisTemplate 来进行 Redis 操作,设置键值对、获取值等

    1. // 设置键值对
    2. redisTemplate.opsForValue().set("key""value");
    3. // 获取值
    4. String value = (String) redisTemplate.opsForValue().get("key");

    四、使用 Spring Cache 简化缓存操作

    1. 添加 Spring Cache 依赖

    在 pom.xml 文件中添加 Spring Cache 相关依赖

    1. <dependencies>
    2.   <!-- Spring Data Redis -->
    3.   <dependency>
    4.     <groupId>org.springframework.boot</groupId>
    5.     <artifactId>spring-boot-starter-data-redis</artifactId>
    6.   </dependency>
    7.   
    8.   <!-- Spring Cache -->
    9.   <dependency>
    10.     <groupId>org.springframework.boot</groupId>
    11.     <artifactId>spring-boot-starter-cache</artifactId>
    12.   </dependency>
    13. </dependencies>
    2. 启用缓存支持

    在启动类上添加 @EnableCaching 注解,启用缓存支持

    1. @SpringBootApplication
    2. @EnableCaching
    3. public class Application {
    4.   // ...
    5. }
    3. 使用缓存注解

    在服务类或方法上使用 Spring Cache 提供的缓存注解,如 @Cacheable@CachePut@CacheEvict

    1. @Service
    2. public class demoService {
    3.   @Cacheable(value = "cacheName", key = "#id")
    4.   public Object getData(String id) {
    5.     // 从数据库或其他数据源获取数据
    6.     return data;
    7.   }
    8.   @CachePut(value = "cacheName", key = "#id")
    9.   public Object updateData(String id, Object newData) {
    10.     // 更新数据库或其他数据源的数据
    11.     return newData;
    12.   }
    13.   @CacheEvict(value = "cacheName", key = "#id")
    14.   public void deleteData(String id) {
    15.     // 删除数据库或其他数据源的数据
    16.   }
    17. }

    五、使用 Redisson 实现分布式锁

    1. 添加 Redisson 依赖

    在 pom.xml 文件中添加 Redisson 相关依赖

    1. <dependencies>
    2.   <!-- Spring Data Redis -->
    3.   <dependency>
    4.     <groupId>org.springframework.boot</groupId>
    5.     <artifactId>spring-boot-starter-data-redis</artifactId>
    6.   </dependency>
    7.   
    8.   <!-- Redisson -->
    9.   <dependency>
    10.     <groupId>org.redisson</groupId>
    11.     <artifactId>redisson-spring-boot-starter</artifactId>
    12.     <version>3.16.3</version>
    13.   </dependency>
    14. </dependencies>
    2. 配置 Redisson

    在配置文件中添加 Redisson 配置,例如 application.properties

    1. # 单节点 Redisson 配置
    2. spring.redis.redisson.config=classpath:redisson-single-node.yml

    在 redisson-single-node.yml 配置文件中配置 Redisson 的连接信息

    3. 使用 Redisson 获取锁:

    在你的代码中使用 Redisson 获取分布式锁:

    1. @Autowired
    2. private RedissonClient redissonClient;
    3. public void doSomething() {
    4.   RLock lock = redissonClient.getLock("lockName");
    5.   try {
    6.     lock.lock();
    7.     // 执行需要加锁的操作
    8.   } finally {
    9.     lock.unlock();
    10.   }
    11. }

    六、完善 Redis 的其他配置

    除了基本配置,还可以根据实际需求完善 Redis 的其他配置,例如连接池配置、超时设置等。

    一、连接池配置

    Redis 使用连接池来管理和复用与 Redis 服务器的连接,以提高连接的效率和性能。

    1. 在 配置文件中配置连接池相关参数

    打开 Redis 配置文件 redis.conf,找到以下配置项并进行修改

    1. # 最大连接数
    2. maxclients 10000
    3. # TCP 连接的队列长度
    4. tcp-backlog 511
    5. # 连接池中的最大空闲连接数
    6. maxidle 100
    7. # 连接池中的最小空闲连接数
    8. minidle 10
    9. # 连接超时时间(毫秒)
    10. timeout 3000
    11. # 是否开启 TCP 连接的保活机制
    12. tcp-keepalive 0
    2. 通过客户端连接池配置对象进行配置

    在 Spring Boot 项目中,可以通过 Redis 连接池配置对象 JedisPoolConfig 进行配置

    1. @Configuration
    2. public class RedisConfig {
    3.   @Bean
    4.   public JedisPoolConfig jedisPoolConfig() {
    5.     JedisPoolConfig poolConfig = new JedisPoolConfig();
    6.     poolConfig.setMaxTotal(10000);
    7.     poolConfig.setMaxIdle(100);
    8.     poolConfig.setMinIdle(10);
    9.     poolConfig.setMaxWaitMillis(3000);
    10.     // 其他配置项设置
    11.     return poolConfig;
    12.   }
    13.   @Bean
    14.   public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig poolConfig) {
    15.     RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
    16.     config.setHostName("127.0.0.1");
    17.     config.setPort(6379);
    18.     // 其他 Redis 配置项设置
    19.     JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
    20.         .usePooling().poolConfig(poolConfig)
    21.         .build();
    22.     return new JedisConnectionFactory(config, clientConfig);
    23.   }
    24.   @Bean
    25.   public RedisTemplate<StringObjectredisTemplate(JedisConnectionFactory connectionFactory) {
    26.     RedisTemplate<StringObject> template = new RedisTemplate<>();
    27.     template.setConnectionFactory(connectionFactory);
    28.     template.setKeySerializer(new StringRedisSerializer());
    29.     template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    30.     return template;
    31.   }
    32. }
    二、超时设置

    超时设置用于控制 Redis 操作的超时时间,以防止长时间的阻塞或无响应操作

    1. 配置 Redis 连接超时时间

    在 Redis 配置文件中设置 timeout 参数,单位为毫秒,如下设置连接超时时间为 5000 毫秒

    timeout 5000
    
    2. 通过 Redis 客户端配置对象进行配置

    通过 JedisClientConfiguration 进行配置,将读取操作的超时时间设置为 5秒

    1. @Bean
    2. public JedisClientConfiguration jedisClientConfiguration() {
    3.   Duration timeout = Duration.ofSeconds(5);
    4.   return JedisClientConfiguration.builder()
    5.       .readTimeout(timeout)
    6.       .build();
    7. }
    8. @Bean
    9. public JedisConnectionFactory jedisConnectionFactory(JedisClientConfiguration clientConfig) {
    10.   // 其他配置项设置
    11.   return new JedisConnectionFactory(config, clientConfig);
    12. }
  • 相关阅读:
    数学建模圈养湖羊的空间利用率
    从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
    专业140+总分400+华中科技大学824信号与系统考研经验华科华中大电子信息与通信工程,真题,大纲,参考书。
    (图论) 1020. 飞地的数量 ——【Leetcode每日一题】
    流量整形qos
    低代码维格云LDAP入门教程
    Doris单机安装
    CPU与外设交换数据的方式
    肠道类器官培养基
    halcon-基础部分
  • 原文地址:https://blog.csdn.net/zhangjiaming_zjm/article/details/136131924