Redis 入门:高效缓存与数据存储的利器

Redis 入门:高效缓存与数据存储的利器

一个高性能的内存键值数据库。Redis(Remote Dictionary Server)以其极高的读写速度、丰富的数据结构和灵活的使用场景,成为现代应用的热门选择,广泛用于缓存、会话管理、排行榜等。本文将带你从零搭建一个简单的 Java 项目集成 Redis,适合初学者快速上手,同时为有经验的开发者提供进阶建议和优化思路。

Redis 是一个开源的 NoSQL 数据库,支持字符串、列表、集合、哈希、有序集合等多种数据结构。本文基于 Redis 7.x,使用 Maven 构建,结合 Spring Boot 和 Jedis 客户端实现用户数据的缓存操作。让我们开始吧!

前置准备

在开始之前,确保开发环境已就绪:

  • JDK:推荐 JDK 17(Spring Boot 3.x 要求 JDK 17+,2.x 支持 JDK 8+)。

  • Maven:用于依赖管理,确保配置好环境变量。

  • IDE:IntelliJ IDEA 或 Eclipse,推荐使用 Spring Initializr 插件生成项目。

  • Redis:安装 Redis 7.x(Windows 可使用 WSL 或 Docker,Linux/Mac 直接安装)。

  • 项目结构 :创建一个 Spring Boot 项目,目录如下:

    复制代码
    src
    ├── main
    │   ├── java
    │   │   └── com.example.demo
    │   │       ├── controller
    │   │       ├── model
    │   │       └── service
    │   ├── resources
    │   │   └── application.properties  // 配置文件
    │   └── webapp
    └── test
        └── java

推荐使用 Spring Initializr 生成项目,选择以下选项:

  • 项目:Maven
  • 语言:Java
  • Spring Boot 版本:3.3.x
  • 依赖:Spring Web, Spring Data Redis

下载后导入 IDE,准备开始!

步骤 1: 引入 Maven 依赖

我们使用 spring-boot-starter-data-redis 简化 Redis 集成,底层默认使用 Lettuce 客户端(也可切换为 Jedis)。以下是 pom.xml 配置:

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>redis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!-- Spring Boot Web 启动器:支持 REST API -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Redis 启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- 测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

说明

  • spring-boot-starter-data-redis:集成 Redis,提供 RedisTemplate 等工具。
  • spring-boot-starter-web:支持 REST API 开发。
  • spring-boot-maven-plugin:支持打包可执行 JAR 和运行项目。
  • 版本提示:Spring Boot 3.x 需 JDK 17+,若用 JDK 8,选择 2.x 版本。

步骤 2: 配置 Redis

Spring Boot 通过 application.properties 配置 Redis 连接。在 src/main/resources/application.properties 中添加:

properties 复制代码
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=your_password  # 如果无密码,可省略
spring.data.redis.database=0

要点

  • spring.data.redis.host/port:Redis 服务器地址和端口,默认 localhost:6379。
  • spring.data.redis.database:Redis 支持 0-15 个数据库,默认使用 0。
  • 安装 Redis
    • Linux/Mac:sudo apt install redisbrew install redis
    • Windows:使用 Docker(docker run -d -p 6379:6379 redis)或 WSL。
    • 启动 Redis:运行 redis-server

步骤 3: 创建模型和 Redis 操作

模型类

定义 User 模型(com.example.demo.model.User),需实现 Serializable 以支持 Redis 序列化:

java 复制代码
package com.example.demo.model;

import java.io.Serializable;

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

    // Constructors
    public User() {}
    public User(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

说明

  • Serializable:Redis 存储对象需序列化。
  • 字段简单化,便于演示。

步骤 4: 创建服务层

创建 UserServicecom.example.demo.service.UserService)处理 Redis 操作:

java 复制代码
package com.example.demo.service;

import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class UserService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void saveUser(User user) {
        redisTemplate.opsForValue().set("user:" + user.getId(), user, 1, TimeUnit.HOURS);
    }

    public User getUser(Long id) {
        return (User) redisTemplate.opsForValue().get("user:" + id);
    }
}

说明

  • RedisTemplate:Spring 提供的 Redis 操作工具,支持多种数据结构。
  • opsForValue():操作字符串类型,设置 1 小时过期时间。
  • 键格式:user:<id>,便于区分。

步骤 5: 创建控制器

创建 UserControllercom.example.demo.controller.UserController)提供 REST API:

java 复制代码
package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

    @Autowired
    private UserService userService;

    @PostMapping
    public String saveUser(@RequestBody User user) {
        userService.saveUser(user);
        return "User saved to Redis";
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}

说明

  • @RestController:返回 JSON 响应。
  • @Autowired:注入服务层。
  • API 端点:保存和查询用户。

步骤 6: 运行和测试

  1. 确保 Redis 服务运行(redis-server)。
  2. 在 IDE 中运行主类(默认生成,带 @SpringBootApplication)。
  3. 或使用命令:mvn spring-boot:run
  4. 测试 API:
    • POST http://localhost:8080/api/users

      json 复制代码
      {
          "id": 1,
          "name": "Alice",
          "age": 25
      }
    • GET http://localhost:8080/api/users/1:返回用户数据。

  5. 使用 Redis CLI 验证:redis-cli -> GET user:1

调试技巧

  • 连接失败:检查 application.properties 的 Redis 配置。
  • 数据为空:确认键名或序列化问题。
  • 日志:Spring Boot 默认使用 Logback,查看控制台输出。

进阶与最佳实践

  • 数据结构 :尝试 Redis 的 List(opsForList)、Hash(opsForHash)等。
  • 连接池 :调整 spring.data.redis.lettuce.pool 配置优化性能。
  • 序列化 :自定义 RedisTemplate 的序列化方式(如 JSON)。
  • 分布式锁 :使用 Redisson 实现复杂场景。
  • 监控 :集成 spring-boot-starter-actuator 监控 Redis 连接。
  • 资源推荐:Redis 官网(redis.io)、《Redis in Action》。多实践缓存和会话管理。

总结

通过这个 Redis 示例,你学会了集成 Spring Boot、操作 Redis 存储用户数据、构建 REST API。Redis 的高性能和灵活性使其成为缓存和实时应用的理想选择。

相关推荐
王维2 小时前
【shardingsphere-jdbc】分表实践
java·数据库
aricvvang3 小时前
一行 Promise.all 争议:数据库查询并行真的没用?我和同事吵赢了!!!
javascript·后端·node.js
xxy.c3 小时前
基于IMX6ULL芯片--I2C总线简单应用
数据库·mongodb
cookqq3 小时前
MongoDB源码分析慢日志:从配置到实现的完整解析
数据库·mongodb·nosql·慢日志
文心快码BaiduComate3 小时前
Comate分饰多角:全栈开发一个Python学习网站
前端·后端·python
道可到3 小时前
淘宝面试原题 Java 面试通关笔记 02|从编译到运行——Java 背后的计算模型(面试可复述版)
java·后端·面试
8K超高清3 小时前
汇世界迎全运 广州国际社区运动嘉年华举行,BOSMA博冠现场展示并分享与科技全运的故事
运维·服务器·网络·数据库·人工智能·科技
DKPT3 小时前
JVM如何管理直接内存?
java·笔记·学习
Vahala0623-孔勇3 小时前
MyBatis缓存架构深度拆解:从PerpetualCache的LRU陷阱到Redis分布式二级缓存防穿透实战
缓存·架构·mybatis