基於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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...