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

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

使用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

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

更多相關文章
  • 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允許用戶在執行多個 ...
一周排行
  • 一:背景 1. 講故事 曾今在項目中發現有同事自定義結構體的時候,居然沒有重寫Equals方法,比如下麵這段代碼: static void Main(string[] args) { var list = Enumerable.Range(0, 1000).Select(m => new Point ...
  • 最近一個朋友有個關於素數的小東西要寫一下,素數是什麼呢?除了1和他本身不能被其他數整除,那麼這個數就是素數,1除外哦。我們知道概念那就很簡單了,直接代碼擼起。 ...
  • 前言 在開發編程中,我們經常會遇到功能非常相似的功能模塊,只是他們的處理的數據不一樣,所以我們會分別採用多個方法來處理不同的數據類型。但是這個時候,我們就會想一個問題,有沒有辦法實現利用同一個方法來傳遞不同種類型的參數呢? 這個時候,泛型也就因運而生,專門來解決這個問題的。 泛型是在C 2.0就推出 ...
  • 本文章主要用於介紹在Asp.Net Mvc(C#)中使用Fleck製作一個Html5的即時聊天室,含有完整代碼和演示Demo。 ...
  • 出庫單的功能。能學習了出庫單管理之後,WMS的 主體功能算是完成了。當然一個成熟的WMS還包括了盤點,報表,策略規則,移庫功能及與其他系統(ERP、TMS等)的介面,實現無縫集成,打破信息孤島,讓數據實時、準確和同步。 ...
  • Data StructureThere're two types of variables in C#, reference type and value type.Enum:enum Color{Red=0,Green=1}//equals to enum Color{Red,//start fr... ...
  • 0. 前言 該項目使用Maven進行管理和構建,所以需要預先配置好Maven。嗯,在這個系列里就不做過多的介紹了。 1. 創建項目 先創建一個pom.xml 文件,添加以下內容: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...
  • API 概述 API(Application Programming Interface),應用程式編程介面。 Java API是一本程式員的 字典 ,是JDK中提供給我們使用的類的說明文檔。 這些類將底層的代碼實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可。 所以我 ...
  • 女程式員是這麼徵婚的: SELECT * FROM 男人們 WHERE 未婚=true and 同性戀=false and 有房=true and 有車=true and 條件 in (帥氣,紳士,大度,氣質,智慧,溫柔,體貼,會浪漫,活潑,可愛,最好還能帶孩子) and 年齡 between(24 ...
  • 有很多剛學習軟體測試的小伙伴,都會在網路上找尋各種學習資料,去提升自己的專業技能水平。因此,我決定定期分享我整理收集的一些軟體測試的測試工具下載、面試寶典、視頻教學合集。都整理好了,有需要的可以關註我(獲取方式在文末) 軟體測試的學習,不止是基礎理論,還需要學習測試工具的用法,如介面工具Postma ...