一、创建 Spring Boot 项目
-
使用 Spring Initializr
访问 Spring Initializr,配置以下参数:- Project:Maven Project
- Language:Java
- Spring Boot:3.0.x (或最新稳定版)
- Dependencies:
- Spring Web
- Spring Data Redis (Lettuce)
- Lombok (可选)
-
手动添加依赖(如果需要)
在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 功能
-
启动 Redis 服务器
确保本地 Redis 服务器已启动:bash
redis-server -
启动 Spring Boot 应用
运行RedisDemoApplication类的main方法。 -
使用 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 # 配置文件
九、常见问题与解决方案
-
Redis 连接失败
- 检查 Redis 服务器是否运行
- 确认
application.properties中的连接配置正确
-
序列化问题
- 确保实体类实现了
Serializable接口 - 检查 RedisTemplate 的序列化配置是否正确
- 确保实体类实现了
-
数据无法存储
- 检查 RedisTemplate 的操作方法是否正确
- 确认 Redis 服务器有写入权限
1045

被折叠的 条评论
为什么被折叠?



