Redis的demo案例

一、创建 Spring Boot 项目

  1. 使用 Spring Initializr
    访问 Spring Initializr,配置以下参数:

    • Project:Maven Project
    • Language:Java
    • Spring Boot:3.0.x (或最新稳定版)
    • Dependencies
      • Spring Web
      • Spring Data Redis (Lettuce)
      • Lombok (可选)
  2. 手动添加依赖(如果需要)
    pom.xml中确保以下依赖存在:

xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

二、配置 Redis 连接

src/main/resources/application.properties中添加 Redis 配置:

properties

# Redis服务器地址和端口
spring.redis.host=localhost
spring.redis.port=6379

# 可选:如果Redis有密码
# spring.redis.password=yourpassword

# 连接池配置(可选)
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0

三、创建实体类

src/main/java/com/example/redisdemo/entity包下创建User类:

java

package com.example.redisdemo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private String id;
    private String name;
    private Integer age;
}

四、创建 Redis 配置类

src/main/java/com/example/redisdemo/config包下创建RedisConfig类,配置 JSON 序列化:

java

package com.example.redisdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
        
        // 设置Key的序列化采用StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        
        // 设置Value的序列化采用GenericJackson2JsonRedisSerializer
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        
        template.afterPropertiesSet();
        return template;
    }
}

五、创建 Service 层

src/main/java/com/example/redisdemo/service包下创建UserService接口和实现类:

java

// UserService.java
package com.example.redisdemo.service;

import com.example.redisdemo.entity.User;

import java.util.List;

public interface UserService {
    void save(User user);
    User getById(String id);
    List<User> getAll();
    void update(User user);
    void delete(String id);
}

// UserServiceImpl.java
package com.example.redisdemo.service.impl;

import com.example.redisdemo.entity.User;
import com.example.redisdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Service
public class UserServiceImpl implements UserService {

    private static final String REDIS_KEY = "users";

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Override
    public void save(User user) {
        // 使用Hash结构存储对象
        redisTemplate.opsForHash().put(REDIS_KEY, user.getId(), user);
        
        // 设置过期时间(可选)
        redisTemplate.expire(REDIS_KEY, 24, TimeUnit.HOURS);
    }

    @Override
    public User getById(String id) {
        return (User) redisTemplate.opsForHash().get(REDIS_KEY, id);
    }

    @Override
    public List<User> getAll() {
        Map<Object, Object> entries = redisTemplate.opsForHash().entries(REDIS_KEY);
        List<User> users = new ArrayList<>();
        
        for (Object value : entries.values()) {
            users.add((User) value);
        }
        
        return users;
    }

    @Override
    public void update(User user) {
        // 直接覆盖原有值
        redisTemplate.opsForHash().put(REDIS_KEY, user.getId(), user);
    }

    @Override
    public void delete(String id) {
        redisTemplate.opsForHash().delete(REDIS_KEY, id);
    }
}

六、创建 Controller 层

src/main/java/com/example/redisdemo/controller包下创建UserController

java

package com.example.redisdemo.controller;

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

import java.util.List;

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

    @Autowired
    private UserService userService;

    // 添加用户
    @PostMapping
    public void save(@RequestBody User user) {
        userService.save(user);
    }

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

    // 获取所有用户
    @GetMapping
    public List<User> getAll() {
        return userService.getAll();
    }

    // 更新用户
    @PutMapping
    public void update(@RequestBody User user) {
        userService.update(user);
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public void delete(@PathVariable String id) {
        userService.delete(id);
    }
}

七、测试 Redis 功能

  1. 启动 Redis 服务器
    确保本地 Redis 服务器已启动:

    bash

    redis-server
    
  2. 启动 Spring Boot 应用
    运行RedisDemoApplication类的main方法。

  3. 使用 Postman 或 curl 测试 API

    • 添加用户

      bash

      POST http://localhost:8080/api/users
      {
          "id": "1",
          "name": "张三",
          "age": 25
      }
      
    • 获取用户

      bash

      GET http://localhost:8080/api/users/1
      
    • 获取所有用户

      bash

      GET http://localhost:8080/api/users
      
    • 更新用户

      bash

      PUT http://localhost:8080/api/users
      {
          "id": "1",
          "name": "张三",
          "age": 26
      }
      
    • 删除用户

      bash

      DELETE http://localhost:8080/api/users/1
      

八、项目结构总结

plaintext

redis-demo/
├── src/main/java/
│   └── com/example/redisdemo/
│       ├── RedisDemoApplication.java    # 主应用类
│       ├── config/                      # 配置类
│       │   └── RedisConfig.java
│       ├── controller/                  # 控制器层
│       │   └── UserController.java
│       ├── entity/                      # 实体类
│       │   └── User.java
│       └── service/                     # 服务层
│           ├── UserService.java
│           └── impl/
│               └── UserServiceImpl.java
└── src/main/resources/
    └── application.properties           # 配置文件

九、常见问题与解决方案

  1. Redis 连接失败

    • 检查 Redis 服务器是否运行
    • 确认application.properties中的连接配置正确
  2. 序列化问题

    • 确保实体类实现了Serializable接口
    • 检查 RedisTemplate 的序列化配置是否正确
  3. 数据无法存储

    • 检查 RedisTemplate 的操作方法是否正确
    • 确认 Redis 服务器有写入权限
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值