實例講解Springboot以Repository方式整合Redis

1 簡介

Redis是高性能的NoSQL數(shù)據(jù)庫,經(jīng)常作為緩存流行于各大互聯(lián)網(wǎng)架構(gòu)中。本文將介紹如何在Springboot中整合Spring Data Redis,使用Repository的方式操作。

代碼結(jié)構(gòu)如下:

code

2 整合過程

2.1 安裝Redis數(shù)據(jù)庫

為了節(jié)省時間,就直接通過Docker來安裝了,可以參考文章:Docker安裝Redis并介紹漂亮的可視化客戶端進行操作,可以快速安裝并使用客戶端進行查看和操作。

2.2 引入相關(guān)依賴

我們引入Springboot Web的依賴,以啟動REST服務。還需要引入Spring Data Redis相關(guān)的依賴。最后,還需要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的連接信息,這個信息跟你安裝時的配置有關(guān),同時配置了連接池,各項的配置及相關(guān)解釋如下:

# Redis數(shù)據(jù)庫索引,默認為0
spring.redis.database=0
# Redis端口
spring.redis.port=6379
# Redis服務器主機
spring.redis.host=localhost
# 連接池最大連接數(shù)
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 創(chuàng)建實體類

存入Redis中的數(shù)據(jù)類型,可以是自定義的一個類,注意需要加上注解@RedisHash@Id。存入Redis的數(shù)據(jù)為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 數(shù)據(jù)庫訪問層UserRepository接口

直接繼承CrudRepository接口就行了,不用自己來實現(xiàn),需要注意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 實現(xiàn)Controller

Controller實現(xiàn)了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進行測試,結(jié)果顯示的時間為GMT時間,每個功能測試如下:

(1)新增User

Create User

(2)根據(jù)UserId查詢特定User

Query User

(3)修改User

Update User

(4)刪除一個User

Delete User

(5)查詢所有User

Query All Users

Redis中的數(shù)據(jù)如下所示:

Result

4 總結(jié)

本文通過實例講解了如何整合SpringbootRedis,使用的是Repository的方式。詳細代碼可在南瓜慢說公眾號回復<SpringbootRedisRepository>獲取。


歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!

歡迎關(guān)注微信公眾號<南瓜慢說>,將持續(xù)為你更新...

多讀書,多分享;多寫作,多整理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容