1 简介
Redis 是高性能的 NoSQL 数据库, 经常作为缓存流行于各大互联网架构中. 本文将介绍如何在 Springboot 中整合 Spring Data Redis, 使用 Repository 的方式操作.
代码结构如下:
2 整合过程
2.1 安装 Redis 数据库
为了节省时间, 就直接通过 Docker 来安装了, 可以参考文章: Docker 安装 Redis 并介绍漂亮的可视化客户端进行操作 https://www.pkslow.com/archives/docker-redis , 可以快速安装并使用客户端进行查看和操作.
2.2 引入相关依赖
我们引入 Springboot web 的依赖, 以启动 REST 服务. 还需要引入 Spring Data Redis 相关的依赖. 最后, 还需要 commons-pool2, 不然会因为缺少类而无法启动.
- <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.apache.commons</groupId>
- <artifactId>commons-pool2</artifactId>
- </dependency>
2.3 配置连接信息
配置 Redis 的连接信息, 这个信息跟你安装时的配置有关, 同时配置了连接池, 各项的配置及相关解释如下:
- # Redis 数据库索引, 默认为 0
- spring.Redis.database=0
- # Redis 端口
- spring.Redis.port=6379
- # Redis 服务器主机
- spring.Redis.host=localhost
- # 连接池最大连接数
- spring.Redis.lettuce.pool.max-active=8
- # 连接池最大空闲
- spring.Redis.lettuce.pool.max-idle=8
- # 连接池最小空闲
- spring.Redis.lettuce.pool.min-idle=2
- # 连接池最大阻塞等待时间
- spring.Redis.lettuce.pool.max-wait=1ms
- # 超时时间
- spring.Redis.lettuce.shutdown-timeout=100ms
2.4 创建实体类
存入 Redis 中的数据类型, 可以是自定义的一个类, 注意需要加上注解 @RedisHash 和 @Id. 存入 Redis 的数据为 Set 类型.
具体代码如下:
- package com.pkslow.Redis.model;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.Redis.core.RedisHash;
- import java.util.Date;
- @RedisHash("User")
- public class User {
- @Id
- private String userId;
- private String name;
- private Integer age;
- private Date createTime = new Date();
- public String getUserId() {
- return userId;
- }
- public void setUserId(String userId) {
- this.userId = userId;
- }
- 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;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- }
2.5 数据库访问层 UserRepository 接口
直接继承 CrudRepository 接口就行了, 不用自己来实现, 需要注意 CrudRepository<User, String > 的泛型类型:
- package com.pkslow.Redis.dal;
- import com.pkslow.Redis.model.User;
- import org.springframework.data.repository.CrudRepository;
- public interface UserRepository extends CrudRepository<User, String> {
- }
2.6 实现 Controller
Controller 实现了 RESTful 风格的增删改查功能, 只要把 UserRepository 注入便可以使用它来操作:
- package com.pkslow.Redis.controller;
- import com.pkslow.Redis.dal.UserRepository;
- import com.pkslow.Redis.model.User;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.Web.bind.annotation.*;
- @RestController
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private final UserRepository userRepository;
- public UserController(UserRepository userRepository) {
- this.userRepository = userRepository;
- }
- @GetMapping("")
- public Iterable<User> getAllUsers() {
- return userRepository.findAll();
- }
- @GetMapping("/{userId}")
- public User getByUserId(@PathVariable String userId) {
- return userRepository.findById(userId).orElse(new User());
- }
- @PostMapping("")
- public User addNewUser(@RequestBody User user) {
- return userRepository.save(user);
- }
- @DeleteMapping("/{userId}")
- public String delete(@PathVariable String userId) {
- User user = new User();
- user.setUserId(userId);
- userRepository.deleteById(userId);
- return "deleted:" + userId;
- }
- @PutMapping("")
- public User update(@RequestBody User user) {
- return userRepository.save(user);
- }
- }
3 Postman 接口测试
本文使用 Postman 进行测试, 结果显示的时间为 GMT 时间, 每个功能测试如下:
(1) 新增 User
(2) 根据 UserId 查询特定 User
(3) 修改 User
(4) 删除一个 User
(5) 查询所有 User
在 Redis 中的数据如下所示:
4 总结
本文通过实例讲解了如何整合 Springboot 和 Redis, 使用的是 Repository 的方式. 详细代码可在南瓜慢说公众号回复 < SpringbootRedisRepository > 获取.
来源: https://www.cnblogs.com/larrydpk/p/12758143.html