Spring Boot 2 + Redis例子

来源:https://www.cnblogs.com/gdjlc/archive/2019/10/28/11755848.html
-Advertisement-
Play Games

Redis是一個key-value資料庫,支持存儲的value類型包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。在Java中,使用較為廣泛的客戶端有Redisson、Jedis。Spring Data Redis模... ...


Redis是一個key-value資料庫,支持存儲的value類型包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。在Java中,使用較為廣泛的客戶端有Redisson、Jedis。Spring Data Redis模塊預設使用Jedis。

開發環境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

一、項目構建

1、新建一個名稱為demo的Spring Boot項目。
2、pom.xml 

        <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.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

3、application.yml

配置Redis的相關屬性。

spring:
  redis:
    port: 6379
    password: 123456
    host: localhost

二、實體類 

1、User.java

映射Redis的數據:
(1) 類使用@RedisHash註解表示User對象會以hash類型保存;
(2) 欄位id使用@Id註解表示自動生成guid;
(3) 欄位使用@Indexed表示建立索引,在方法名查詢時需要設置此註解;

package com.example.demo.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;


@RedisHash("user")
public class User {
    @Id
    private String id;
    @Indexed
    private String name;
    @Indexed
    private Integer age;

    public String getId() {
        return id;
    }

    public void setId(String 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;
    }
}

三、數據訪問層

1、數據訪問層 UserRepository.java

繼承CrudRepository可以不需要任何實現,擁有基本的CRUD操作。也可以手動添加代碼實現方法名查詢。

package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface UserRepository extends CrudRepository<User,String> {

    //方法名查詢:根據欄位name查詢
    List<User> findByName(String name);

    //方法名查詢:根據欄位name和age的And查詢
    List<User> findByNameAndAge(String name, Integer age);

    //方法名查詢:根據欄位name和age的Or查詢
    List<User> findByNameOrAge(String name, Integer age);
}

四、業務層

1、UserRepository.java

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class UserService {
    @Autowired
    UserRepository userRepository;

    public List<User> getUsers(){
        Iterable<User> users = userRepository.findAll();
        List<User> datas = new ArrayList<User>();
        for(Iterator<User> it = users.iterator(); it.hasNext();){
            User u = it.next();
            datas.add(u);
        }
        return datas;
    }

    public void save(User user) {
        userRepository.save(user);
    }

    public List<User> findByName(String name){
        return userRepository.findByName(name);
    }

    public List<User> findByNameAndAge(String name, Integer age){
        return userRepository.findByNameAndAge(name, age);
    }

    public List<User> findByNameOrAge(String name, Integer age){
        return userRepository.findByNameOrAge(name, age);
    }
}

五、控制器

1、UserController.java

package com.example.demo;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserController {
    @Resource
    UserService userService;

    @RequestMapping("/save")
    public String save(){
        for(int i=1;i<=20;i++){
            User user = new User();
            user.setName("a" + i);
            user.setAge(i);
            userService.save(user);
        }
        return "添加成功";
    }

    @RequestMapping("/getUsers")
    public List<User> getUsers(){
        List<User> users = userService.getUsers();
        return users;
    }

    @RequestMapping("/findByName")
    public List<User> findByName(String name){
        return userService.findByName(name);
    }

    @RequestMapping("/findByNameAndAge")
    public List<User> findByNameAndAge(String name, Integer age){
        return userService.findByNameAndAge(name, age);
    }

    @RequestMapping("/findByNameOrAge")
    public List<User> findByNameOrAge(String name, Integer age){
        return userService.findByNameOrAge(name, age);
    }
}

啟動伺服器,瀏覽器訪問:http://localhost:8080/save 生成20條測試數據,訪問http://localhost:8080/getUsers,頁面顯示如下:

[{"id":"8da6f5ad-b24c-4725-9c69-4d709369eac7","name":"a14","age":14},{"id":"b62b2028-4d41-41be-aeff-e2b56776dd87","name":"a10","age":10},{"id":"c8330a2a-902b-4db9-b262-65d182027eac","name":"a6","age":6},{"id":"cc7b5a91-0ca6-4577-891a-835a1cebef6f","name":"a11","age":11},{"id":"09f8f2e3-2cf8-48f7-a535-1897b7cc0f35","name":"a1","age":1},{"id":"3344413f-8128-42ad-8343-304005c87e5f","name":"a7","age":7},{"id":"db74f020-f3e3-4422-8013-c515b9d8551d","name":"a5","age":5},{"id":"7fc46621-ecaf-47c6-bae3-f2061104d802","name":"a2","age":2},{"id":"dcdcdda0-bab0-450a-b6e6-fdce410b01fd","name":"a8","age":8},{"id":"b456f4fd-158f-43e9-86cf-0340b809ffab","name":"a12","age":12},{"id":"4ffb6019-21b1-4880-8ec3-2703f561d028","name":"a15","age":15},{"id":"7e45d738-7a31-4b24-928e-a9da3583ef6d","name":"a4","age":4},{"id":"7992e502-4049-4d40-bc35-aab72adbe335","name":"a19","age":19},{"id":"3df7b2ac-6bb0-496d-91d2-05ac763e5f68","name":"a13","age":13},{"id":"7c94edba-f91e-42fe-b8b4-7c6a9ba82747","name":"a3","age":3},{"id":"39402099-17ba-4368-ac23-dd5e9fe1d8ae","name":"a17","age":17},{"id":"e49750d6-ce80-4764-87d3-1566d9263360","name":"a18","age":18},{"id":"499e1a9a-b947-4eec-8d37-d1cdf7ac1179","name":"a16","age":16},{"id":"04f0cb4e-c17b-4b4e-b135-e6c222aace21","name":"a9","age":9},{"id":"ac48ce35-5a38-48b8-90b9-6b999c3fd242","name":"a20","age":20}]

其它控制器方法略。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Dubbo 在 2011 開源之後,一直是國內最受歡迎的 RPC 框架,之後 Spring Boot 和 Spring Cloud 的面世,助推了微服務的火熱程度。電腦的世界變化很快,自從容器和 K8s 登上舞臺之後,給原有的 RPC 領域帶來了很大的挑戰。這個文章主要講述 RPC 領域遇到的問題... ...
  • 本人3年開發經驗、18年年底開始跑路找工作,在互聯網寒冬下成功拿到阿裡巴巴、今日頭條、滴滴等公司offer,崗位是Java後端開發,最終選擇去了阿裡巴巴。 面試了很多家公司,感覺大部分公司考察的點都差不多,所以將自己的心得記下來,希望能給正在找或者準備找工作的朋友提供一點幫助。另外,目前在阿裡也做面 ...
  • 經常在面試中被問到如何設計一個高併發環境下的搶購方案,雖然網上的資料已經很多了,但是都是很簡單的說了一些用隊列之類的套話,沒有更詳細的細節考慮.被問的實在是太多了,不得已我也仔細想想這些該怎麼設計.拋開運維階段的多層負載均衡,直接只說PHP的業務層面的邏輯. 整個流程如下:web界面點擊搶購==>彈 ...
  • Spring之AOP初步認識 【1】AOP概覽 什麼是AOP? (來自百度) ​ 在軟體業,AOP為Aspect Oriented Programming的縮寫,意為:面向切麵編程,通過預編譯方式和運行期動態代理實現程式功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Sp ...
  • 概述 HikariCP提供了一些監控指標,他的監控指標都是基於MicroMeter提供出來的,然後支持Prometheus和Dropwizard。本次我們將討論一下HikariCp的監控指標有哪些,為什麼提供這些指標,以及咱們如何去做監控。 監控指標 就像 提供的那樣,幾個重要的指標都存儲在pool ...
  • 主要做兩個事,從properties配置文件中讀取信息,通過反射創建對象 思路主要有兩種,遍歷得到的屬性集合,然後設置類的屬性 遍歷類的屬性集合,從配置文件中讀取(不推薦,因為類的屬性有多樣化,會報錯) 以上方法要註意幾點: 註入的類的屬性要是String類,如果是其他類,要調用相應的方法,不然會報 ...
  • 練習:將文本中的內容用詞雲的形式輸出 實現: 實現效果: ...
  • uvm_objection和uvm_component基礎 uvm_objection和uvm_component是uvm中兩大基礎類,剛開始學習的時候,對兩個東西認識不深,以為它們倆差不多,誰知道它兩是一個是“爺爺”,一個是孫子的關係,兩者貫穿整個 uvm驗證方法學。至於為什麼要劃分uvm_obj ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...