【Spring Boot】整合Redis

在现代应用开发中,缓存是优化系统性能、减轻数据库压力的重要手段之一,而 Redis 是一种高效的内存数据库,经常用于缓存、会话管理等场景。本文将详细介绍如何在 Spring Boot 项目中集成 Redis,并且提供一个完整的使用示例。

一、Redis简介
Redis(Remote Dictionary Server)是一款开源的基于内存的键值非关系型数据库,支持丰富的数据结构,如字符串String、哈希Hash、列表List、集合Set、有序集合Zset等。其数据存储在内存中,具有超高的读写速度,并且可以持久化到磁盘,广泛用于缓存、实时数据处理等场景。

二、Spring Boot整合Redis的必要性
Spring Data Redis是Spring家族中专门为Redis设计的模块,提供了对Redis的基本操作封装。通过Spring Boot,我们可以非常方便地配置和使用Redis,提升开发效率。

三、Spring Boot 集成 Redis步骤

1.引入依赖
   Spring Boot 提供了对 Redis 的原生支持,只需引入 spring-boot-starter-data-redis 依赖即可。
     在 pom.xml 文件中加入以下依赖:
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
     </dependency>

2.配置 Redis 连接
    在 Spring Boot 中,通过配置文件来定义 Redis 的连接信息,通常配置在 application.yml 或 application.properties 中。

    a. 使用 application.properties
    spring.redis.host=localhost
    spring.redis.port=6379
    spring.redis.password=123456 # 如果没有密码,可不填
    spring.redis.database=0 # 用的0号数据库,默认有16个数据库,从0开始0~15

    b. 使用 application.yml
    spring:
      redis:
        host: localhost
        port: 6379
        password:123456 
        database: 0

3. 自定义 RedisTemplate
    RedisTemplate 是 Spring 提供的用于操作 Redis 的核心类。我们可以通过定义 RedisTemplate 来更好地控制 Redis 的序列化和反序列化方式。

    @Configuration
    public class RedisConfig {

        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            //设置Redis链接工厂对象
            template.setConnectionFactory(redisConnectionFactory);

            // 设置键的序列化方式为 String
            template.setKeySerializer(new StringRedisSerializer());
            template.setHashKeySerializer(new StringRedisSerializer());

            // 设置值的序列化方式为 JSON
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

            return template;
        }
    }

四、Redis 操作示例

接下来,我们通过示例展示如何使用 RedisTemplate 来进行基本的增删改查操作。

1. 定义一个简单的实体类
我们创建一个 User 实体类,用来模拟实际业务中的数据模型。
import java.io.Serializable;

public class User implements Serializable {
    private String id;
    private String name;
    private int age;

    // getters and setters
}

2. Redis Service 类
我们编写一个服务类 UserService,用来操作 Redis 中的 User 数据。

@Service
public class UserService {

    private static final String USER_KEY_PREFIX = "user:";

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // 保存用户信息到 Redis 中(支持链式编程)
    public void saveUser(User user) {
        redisTemplate.opsForValue().set(USER_KEY_PREFIX + user.getId(), user, 10, TimeUnit.MINUTES);
    }

    // 从 Redis 中获取用户信息
    public User getUserById(String id) {
        return (User) redisTemplate.opsForValue().get(USER_KEY_PREFIX + id);
    }

    // 删除 Redis 中的用户信息
    public void deleteUserById(String id) {
        redisTemplate.delete(USER_KEY_PREFIX + id);
    }
}

注意:真正开发过程中不会使用原生的 Redis ,一般会封装成一个util的类,我们使用这个类即可。 

3. 控制器类
我们编写一个简单的控制器类,通过 HTTP 接口来操作 Redis 中的数据。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 保存用户
    @PostMapping
    public String saveUser(@RequestBody User user) {
        userService.saveUser(user);
        return "User saved successfully!";
    }

    // 获取用户
    @GetMapping("/{id}")
    public User getUser(@PathVariable String id) {
        return userService.getUserById(id);
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable String id) {
        userService.deleteUserById(id);
        return "User deleted successfully!";
    }
}

五、Redis 缓存示例

在很多场景下,Redis 也经常用于缓存。Spring Boot 通过注解的方式提供了便捷的缓存支持。我们可以在 UserService 中通过注解的方式启用缓存。

1. 启用缓存

在 UserService 类上添加 @Cacheable@CachePut@CacheEvict 注解来控制缓存的存取和更新。
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(String id) {
        // 模拟从数据库中获取数据
        System.out.println("Fetching user from database...");
        return new User(id, "John Doe", 25);
    }

    @CachePut(value = "userCache", key = "#user.id")
    public void saveUser(User user) {
        // 模拟保存用户到数据库
        System.out.println("Saving user to database...");
    }

    @CacheEvict(value = "userCache", key = "#id")
    public void deleteUserById(String id) {
        // 模拟从数据库中删除用户
        System.out.println("Deleting user from database...");
    }
}

2. 启用缓存支持

在 Spring Boot 的主类上添加 @EnableCaching 注解,以启用缓存支持。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }
}

六、测试

启动 Spring Boot 应用,并确保 Redis 服务正在运行。可以通过 Postman 或 curl 命令来测试 API。

1.保存用户
curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d '{"id": "1", "name": "Alice", "age": 30}'
2.获取用户
curl http://localhost:8080/users/1
3.删除用户
curl -X DELETE http://localhost:8080/users/1

七、总结

本文详细介绍了 Spring Boot 整合 Redis 的步骤,包括如何通过 RedisTemplate 操作 Redis 数据,如何利用注解简化缓存操作,以及如何配置 Redis 连接。通过 Redis 集成,Spring Boot 应用可以更高效地缓存数据,从而提升系统性能。

posted @   飞翔的Java  阅读(1405)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示