基於SpringBoot集成測試遠程連接的Redis服務

来源:https://www.cnblogs.com/louis6575/archive/2020/03/22/12547281.html
-Advertisement-
Play Games

使用SpringBoot初始化項目,集成測試遠程連接的Redis服務,並記錄了五大基本數據類型,在jedis中的體現方式。 ...


前期準備

Linux虛擬機或者租用的雲伺服器:sudo安裝redis,或者docker載入redis鏡像。後者需要使用docker啟用redis容器。

配置好redis.conf文件。註意:一定要註釋 # bind 127.0.0.1 其他詳細配置可參考我另一篇文章,不過能想到集成測試redis,配置文件應該已經配置好了。

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT 開放6379埠

初始化SpringBoot項目

  • 使用Spring Initializr 初始化一個SpringBoot項目,可以勾選NoSQL下這兩項,或者後面自行添加pom依賴。(當然也可以初始化一個maven項目來測試)

在這裡插入圖片描述

  • 添加jedis依賴

    <!--導入jedis依賴-->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
    
  • 編寫簡易的單元測試程式

    可使用ifconfig 或者 ip addr 查詢伺服器的ip地址

    /**
    * host: 虛擬機或遠程伺服器的ip地址
    * port: redis.conf中配置的服務埠號
    */
    @Test
    void TestPing() {
        Jedis jedis = new Jedis("192.168.137.132",6379);
        System.out.println("TestPing >>>>>>>>>>>>> "+jedis.ping());
    }
    

    測試結果:

在這裡插入圖片描述

測試五大基本數據類型

測試過程中,有些數據防止重覆插入,部分測試用例使用了del命令。

  • 五大基本數據類型:字元串,列表,哈希,集合,有序集合

  • 每次單元測試都需進行遠程連接,故做以下處理:

    @SpringBootTest
    class JedisDemoApplicationTests {
        
        // 此處配置連接
        Jedis jedis = new Jedis("192.168.137.132",6379);
    
        @Test
        void contextLoads() {
        }
        
        // 此處進行單元測試
    }
    

Key鍵

測試用例:

@Test
void KeyTest() {
    System.out.println(jedis.keys("*"));
    System.out.println(jedis.keys("*").getClass());
}

測試結果:

[list01, customer, set01, username]
class java.util.HashSet

String字元串

測試用例:

@Test
void StringTest() {
    System.out.println("測試set >>> "+jedis.set("name", "kris"));
    System.out.println("測試get >>> "+jedis.get("name"));
    System.out.println(jedis.get("name").getClass());

    System.out.println("\n測試append >>> "+jedis.append("name", " ^v^"));
    System.out.println("測試strlen >>> "+jedis.strlen("name"));
    System.out.println("測試get >>> "+jedis.get("name"));

    System.out.println("\n測試mset >>> "+jedis.mset(
        "username", "kris",
        "age", "18",
        "sex","男"));
    System.out.println("測試mget >>> "+jedis.mget("username", "age", "sex"));

    System.out.println("\n測試incr >>> "+jedis.incr("age"));
    System.out.println("測試incrBy >>> "+jedis.incrBy("age",3));
    System.out.println("測試decr >>> "+jedis.decr("age"));
    System.out.println("測試decrBy >>> "+jedis.decrBy("age", 3));
}

測試結果:

測試set >>> OK
測試get >>> kris
class java.lang.String

測試append >>> 8
測試strlen >>> 8
測試get >>> kris ^v^

測試mset >>> OK
測試mget >>> [kris, 18, 男]

測試incr >>> 19
測試incrBy >>> 22
測試decr >>> 21
測試decrBy >>> 18

List列表

測試用例:

@Test
void ListTest() {
    System.out.println("測試rpush >>> "+jedis.rpush("list01", "I", "love", "redis", "!"));
    System.out.println("測試lpush >>> "+jedis.lpush("list01", "hello"));
    System.out.println("測試lrange >>> "+jedis.lrange("list01", 0, -1));
    System.out.println(jedis.lrange("list01", 0, -1).getClass());

    System.out.println("\n測試lpop >>> "+jedis.lpop("list01"));
    System.out.println("測試rpop >>> "+jedis.rpop("list01"));
    System.out.println("測試lrange >>> "+jedis.lrange("list01", 0, -1));

    System.out.println("\n測試lset >>> "+jedis.lset("list01", 0, "We"));
    System.out.println("測試lrange >>> "+jedis.lrange("list01", 0, -1));

    System.out.println("\n測試 linsert >>> "+jedis.linsert("list01", ListPosition.AFTER,
                                                         "redis", "!"));
    System.out.println("測試lrange >>> "+jedis.lrange("list01", 0, -1));

    jedis.del("list01");
}

測試結果:

測試rpush >>> 4
測試lpush >>> 5
測試lrange >>> [hello, I, love, redis, !]
class java.util.ArrayList

測試lpop >>> hello
測試rpop >>> !
測試lrange >>> [I, love, redis]

測試lset >>> OK
測試lrange >>> [We, love, redis]

測試 linsert >>> 4
測試lrange >>> [We, love, redis, !]

Hash哈希

測試用例:

@Test
void HashTest() {
    Map<String, String> customer = new HashMap<>();
    customer.put("username", "kris");
    customer.put("password", "123456");
    customer.put("email", "[email protected]");

    System.out.println("測試hset >>> "+jedis.hset("customer", customer));
    System.out.println("測試hget >>> "+jedis.hget("customer", "email"));
    System.out.println("測試getAll >>> "+jedis.hgetAll("customer"));
    System.out.println(jedis.hgetAll("customer").getClass());
}

測試結果:

測試hset >>> 0
測試hget >>> [email protected]
測試getAll >>> {name=kris, [email protected], password=123456, username=kris}
class java.util.HashMap

Set集合

測試用例:

@Test
void SetTest() {
    System.out.println("測試sadd >>> "+jedis.sadd("names", "louis", "kris", "Jerry", "Jackson"));
    System.out.println("測試smembers >>> "+jedis.smembers("names"));
    System.out.println("測試scard >>> "+jedis.scard("names"));
    System.out.println(jedis.smembers("names").getClass());

    System.out.println("\n測試srandmember >>> "+jedis.srandmember("names", 3));
    System.out.println("測試srandmember >>> "+jedis.srandmember("names", 3));

    System.out.println("\n測試spop >>> "+jedis.spop("names", 2));
    System.out.println("測試smembers >>> "+jedis.smembers("names"));

    System.out.println("\n測試sadd >>> "+jedis.sadd("names0", "Jack", "louis", "kris"));
    System.out.println("測試sunion >>> "+jedis.sunion("names", "names0"));
    System.out.println("測試sdiff >>> "+jedis.sdiff("names", "names0"));
    System.out.println("測試sinter >>> "+jedis.sinter("names", "names0"));
    System.out.println("測試smembers >>> "+jedis.smembers("names"));
    System.out.println("測試smembers >>> "+jedis.smembers("names0"));

    jedis.del("names", "names0");
}

測試結果:

測試sadd >>> 4
測試smembers >>> [kris, Jerry, Jackson, louis]
測試scard >>> 4
class redis.clients.jedis.BinaryJedis$SetFromList

測試srandmember >>> [kris, Jerry, Jackson]
測試srandmember >>> [Jerry, louis, Jackson]

測試spop >>> [Jerry, kris]
測試smembers >>> [Jackson, louis]

測試sadd >>> 3
測試sunion >>> [Jack, kris, louis, Jackson]
測試sdiff >>> [Jackson]
測試sinter >>> [louis]
測試smembers >>> [Jackson, louis]
測試smembers >>> [kris, Jack, louis]

ZSet有序集合

測試用例:

@Test
void SortSetTest() {
    Map<String, Double> score = new HashMap<>();
    score.put("鑽石", 1000.0);
    score.put("王者", 2000.0);  // 無序
    score.put("星耀", 1500.0);
    score.put("榮耀", 2500.0);

    System.out.println("測試zadd >>> "+jedis.zadd("score", score));
    System.out.println("測試zrangeByScore >>> "+jedis.zrangeByScore("score", 1500,2500));
    System.out.println("測試zrange >>> "+jedis.zrange("score", 0,-1));
    System.out.println("測試zrevrange >>> "+jedis.zrevrange("score", 0,-1));
    System.out.println(jedis.smembers("names").getClass());
    
    jedis.del("score");
}

測試結果:

測試zadd >>> 4
測試zrangeByScore >>> [星耀, 王者, 榮耀]
測試zrange >>> [鑽石, 星耀, 王者, 榮耀]
測試zrevrange >>> [榮耀, 王者, 星耀, 鑽石]
class redis.clients.jedis.BinaryJedis$SetFromList

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

-Advertisement-
Play Games
更多相關文章
  • Nginx 介紹 Nginx 是一個高性能的 Web 伺服器,從 2001 年發展至今,由於 Nginx 對硬體和操作系統內核特性的深度挖掘,使得在保持高併發的同時還能夠保持高吞吐量。Nginx 還採用了模塊設計,有大量的第三方模塊可以擴展 Nginx 的功能,因此 Nginx 的場景非常豐富,同時 ...
  • 記下來!以後別忘了 我把自己的小筆記本重裝了下系統 一、linux裝機 centos8 1、U盤啟動 2、進入安裝引導頁 3、按下鍵盤TAB鍵將最下麵的vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.li ...
  • arm裸機,linux開發,編譯器,編譯環境答疑解惑 前言: 最近一直在跟著正點原子的i.mx6ull視頻學習,打算研究一下嵌入式linux的開發,主要是道聽途說單片機開發未來薪資不高,想著反正單片機學的也就半吊子,何不趁此時各大廠商(某點,某火,某山)紛紛推出免費視頻,開始進行價格戰的時候,從中漁 ...
  • 一 Kubernetes網路模型概述 1.1 Kubernetes網路模型 Kubernetes網路模型設計的一個基礎原則是:每個Pod都擁有一個獨立的IP地址,並假定所有Pod都在一個可以直接連通的、扁平的網路空間中。所以不管它們是否運行在同一個Node(宿主機)中,都要求它們可以直接通過對方的I ...
  • 最近在對sql進行性能優化因此對explain相關的知識進行一個簡單的整理歸納。 EXPLAIN: 為SELECT語句中使用到的每個表返回一條 SELECT 執行的詳細信息;按照MySQL在處理語句時讀取它們的順序列出這些表。 命令輸出格式 id = 1 select_type = SIMPLE t ...
  • 本文主要介紹 Elasticsearch 的聚合功能,介紹什麼是 Bucket 和 Metric 聚合,以及如何實現嵌套的聚合。 首先來看下聚合(Aggregation): 什麼是 Aggregation? 首先舉一個生活中的例子,這個是京東的搜索界面,在搜索框中輸入“華為”進行搜索,就會得到如上界 ...
  • 本文內容: 什麼是表單? 如何創建一個表單: 接收並驗證: PHP和資料庫交互 1,什麼是表單? 表單在網頁中主要負責數據採集。 表單由三部分組成: 表單標簽:這裡麵包含了處理表單數據所用動態腳本的URL,以及數據提交到伺服器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本、覆選框、下拉選擇 ...
  • RDD介紹 1.RDD概念以及特性 RDD(Resilient Distributed Dataset)叫做彈性分散式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、裡面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...