redis學習(一)

来源:https://www.cnblogs.com/nnnnnn/archive/2019/07/19/11214050.html
-Advertisement-
Play Games

概念 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove ...


概念

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在記憶體中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。 Redis 是一個高性能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。    Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。 redis的官網地址,非常好記,是redis.io。(特意查了一下,功能變數名稱尾碼io屬於國家功能變數名稱,是british Indian Ocean territory,即英屬印度洋領地) 目前,Vmware在資助著redis項目的開發和維護。  

Windows安裝Redis

以cmd安裝方法

1.下載安裝包:https://github.com/dmajkic/redis/downloads

2.安裝包下載後根據操作系統選擇對應版本文件,裡面會有幾個dll分別為:

redis-server.exe:服務程式  
redis-check-dump.exe:本地資料庫檢查 
redis-check-aof.exe:更新日誌檢查 
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢.
redis-cli.exe: 服務端開啟後,我們的客戶端就可以輸入各種命令測試了 

 

首先以管理員身份打開cmd (視窗+R),進入到安裝包下載的位置。輸入:redis-server.exe redis.conf  開啟Redis服務。提示信息沒有報錯表示啟動成功。

此視窗要保持開啟狀態,如果關閉Redis服務也會相即被關閉。使用客戶端測試一下數據。

現在來觀察Redis是怎麼持久化存儲數據到硬碟上。(快照是預設的持久化方式,預設的文件名稱為dump.rdb)

可以看到Redis服務端在一段時間後將資料庫保存在磁碟上,文件為:dump.rdb。

 

以weindows服務安裝Redis方法:

下載Redis服務安裝包:https://github.com/rgl/redis/downloads

下載完成後直接點擊.exe下一步下一步OK。安裝完後我們會在windows服務中找到Redis Service服務。註意啟動服務後在進行相關測試。

 

在調用Redis服務前需要準備三個DLL。下載地址:【Redis調用驅動】在項目中引用即可。

使用Redis中存儲常用的5種數據類型:String,Hash,List,SetSorted set編寫實例代碼

安裝參考:https://www.cnblogs.com/caokai520/p/4409712.html

 

Redis配置文件說明參考:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html

 

安裝客戶端

Redis Desktop Manager

一款基於Qt5的跨平臺Redis桌面管理軟體

支持: Windows 7+, Mac OS X 10.10+, Ubuntu 14+

特點: C++ 編寫,響應迅速,性能好。但不支持資料庫備份與恢復。

項目地址: https://github.com/uglide/RedisDesktopManager

Redis Client

項目簡介: 使用Java編寫,功能豐富,缺點是性能稍差,網路不好時,會不時斷線。

項目地址: https://github.com/caoxinyu/RedisClient

Redis Studio

項目簡介: 又一個C++編寫的redis管理工具,僅支持windows平臺,支持xp操作系統。

項目地址: https://github.com/cinience/RedisStudio

 

redisClient的安裝及基本使用

RedisClient是Redis客戶端的GUI工具,使用Java swt和jedis編寫,可以方便開發者瀏覽Redis資料庫。該軟體支持簡體中文,非常適合國內用戶使用,不需要漢化就可以直接使用

Redis客戶端工具(RedisClient)功能
RedisClient將redis數據以資源管理器的界面風格呈現給用戶,可以幫助redis開發人員和維護人員方便的建立,修改,刪除,查詢redis數據,完全不需要瞭解redis命令。可以讓用戶方便的編輯數據,可以剪切,拷貝,粘貼redis數據,可以導入,導出redis數據,可以對redis數據排序。


1、使用伺服器管理,支持伺服器密碼認證

2、根據喜好管理redis數據

3、管理redis數據,包括:

新的redis數據:字元串String,列表List,哈希hash,集合set,有序集合Sorted set。

參考地址:https://blog.csdn.net/chinafire525/article/details/84104410 

 代碼示例

static void Main(string[] args)
{
    //在Redis中存儲常用的5種數據類型:String,Hash,List,SetSorted set

    RedisClient client = new RedisClient("172.21.0.192", 6379);
    client.FlushAll();

    #region string
    client.Add<string>("StringValueTime", "我已設置過期時間噢30秒後會消失", DateTime.Now.AddMilliseconds(30000));
    while (true)
    {
        if (client.ContainsKey("StringValueTime"))
        {
            Console.WriteLine("String.鍵:StringValue,值:{0} {1}", client.Get<string>("StringValueTime"), DateTime.Now);
            Thread.Sleep(10000);
        }
        else
        {
            Console.WriteLine("鍵:StringValue,值:我已過期 {0}", DateTime.Now);
            break;
        }
    }

    client.Add<string>("StringValue", " String和Memcached操作方法差不多");
    Console.WriteLine("數據類型為:String.鍵:StringValue,值:{0}", client.Get<string>("StringValue"));

    Student stud = new Student() { id = "1001", name = "李四" };
    client.Add<Student>("StringEntity", stud);
    Student Get_stud = client.Get<Student>("StringEntity");
    Console.WriteLine("數據類型為:String.鍵:StringEntity,值:{0} {1}", Get_stud.id, Get_stud.name);
    #endregion

    #region Hash
    client.SetEntryInHash("HashID", "Name", "張三");
    client.SetEntryInHash("HashID", "Age", "24");
    client.SetEntryInHash("HashID", "Sex", "");
    client.SetEntryInHash("HashID", "Address", "上海市XX號XX室");

    List<string> HaskKey = client.GetHashKeys("HashID");
    foreach (string key in HaskKey)
    {
        Console.WriteLine("HashID--Key:{0}", key);
    }

    List<string> HaskValue = client.GetHashValues("HashID");
    foreach (string value in HaskValue)
    {
        Console.WriteLine("HashID--Value:{0}", value);
    }

    List<string> AllKey = client.GetAllKeys(); //獲取所有的key。
    foreach (string Key in AllKey)
    {
        Console.WriteLine("AllKey--Key:{0}", Key);
    }
    #endregion

    #region List
    /*
     * list是一個鏈表結構,主要功能是push,pop,獲取一個範圍的所有的值等,操作中key理解為鏈表名字。 
     * Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素,
     * 這樣list既可以作為棧,又可以作為隊列。Redis list的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的記憶體開銷,
     * Redis內部的很多實現,包括發送緩衝隊列等也都是用的這個數據結構 
     */
    client.EnqueueItemOnList("QueueListId", "1.張三");  //入隊
    client.EnqueueItemOnList("QueueListId", "2.張四");
    client.EnqueueItemOnList("QueueListId", "3.王五");
    client.EnqueueItemOnList("QueueListId", "4.王麻子");
    int q = client.GetListCount("QueueListId");
    for (int i = 0; i < q; i++)
    {
        Console.WriteLine("QueueListId出隊值:{0}", client.DequeueItemFromList("QueueListId"));   //出隊(隊列先進先出)
    }

    client.PushItemToList("StackListId", "1.張三");  //入棧
    client.PushItemToList("StackListId", "2.張四");
    client.PushItemToList("StackListId", "3.王五");
    client.PushItemToList("StackListId", "4.王麻子");
    int p = client.GetListCount("StackListId");
    for (int i = 0; i < p; i++)
    {
        Console.WriteLine("StackListId出棧值:{0}", client.PopItemFromList("StackListId"));   //出棧(棧先進後出)
    }


    #endregion

    #region Set無序集合
    /*
     它是string類型的無序集合。set是通過hash table實現的,添加,刪除和查找,對集合我們可以取並集,交集,差集
     */
    client.AddItemToSet("Set1001", "小A");
    client.AddItemToSet("Set1001", "小B");
    client.AddItemToSet("Set1001", "小C");
    client.AddItemToSet("Set1001", "小D");
    HashSet<string> hastsetA = client.GetAllItemsFromSet("Set1001");
    foreach (string item in hastsetA)
    {
        Console.WriteLine("Set無序集合ValueA:{0}", item); //出來的結果是無須的
    }

    client.AddItemToSet("Set1002", "小K");
    client.AddItemToSet("Set1002", "小C");
    client.AddItemToSet("Set1002", "小A");
    client.AddItemToSet("Set1002", "小J");
    HashSet<string> hastsetB = client.GetAllItemsFromSet("Set1002");
    foreach (string item in hastsetB)
    {
        Console.WriteLine("Set無序集合ValueB:{0}", item); //出來的結果是無須的
    }

    HashSet<string> hashUnion = client.GetUnionFromSets(new string[] { "Set1001", "Set1002" });
    foreach (string item in hashUnion)
    {
        Console.WriteLine("求Set1001和Set1002的並集:{0}", item); //並集
    }

    HashSet<string> hashG = client.GetIntersectFromSets(new string[] { "Set1001", "Set1002" });
    foreach (string item in hashG)
    {
        Console.WriteLine("求Set1001和Set1002的交集:{0}", item);  //交集
    }

    HashSet<string> hashD = client.GetDifferencesFromSet("Set1001", new string[] { "Set1002" });  //[返回存在於第一個集合,但是不存在於其他集合的數據。差集]
    foreach (string item in hashD)
    {
        Console.WriteLine("求Set1001和Set1002的差集:{0}", item);  //差集
    }

    #endregion

    #region  SetSorted 有序集合
    /*
     sorted set 是set的一個升級版本,它在set的基礎上增加了一個順序的屬性,這一屬性在添加修改.元素的時候可以指定,
     * 每次指定後,zset(表示有序集合)會自動重新按新的值調整順序。可以理解為有列的表,一列存 value,一列存順序。操作中key理解為zset的名字.
     */
    client.AddItemToSortedSet("SetSorted1001", "1.劉仔");
    client.AddItemToSortedSet("SetSorted1001", "2.星仔");
    client.AddItemToSortedSet("SetSorted1001", "3.豬仔");
    List<string> listSetSorted = client.GetAllItemsFromSortedSet("SetSorted1001");
    foreach (string item in listSetSorted)
    {
        Console.WriteLine("SetSorted有序集合{0}", item);
    }
    #endregion
}

輸出結果:

 


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

-Advertisement-
Play Games
更多相關文章
  • 史上最強MySQL參數調優及資料庫鎖實踐 1. 應用優化 1.2 減少對MySQL的訪問 1.2.1 避免對數據進行重覆檢索 1.2.2 增加cache層 1.3 負載均衡 1.3.1 利用MySQL複製分流查詢 1.3.2 採用分散式數據架構 2. MySQL中查詢緩存優化 2.1 概述 2.2 ...
  • 前言 一直以來,對於搜索時模糊匹配的優化一直是個讓人頭疼的問題,好在強大pgsql提供了優化方案,下麵就來簡單談一談如何通過索引來優化模糊匹配 案例 我們有一張千萬級數據的檢查報告表,需要通過檢查報告來模糊搜索某個條件,我們先創建如下索引: 然後搜個簡單的模糊匹配條件如 LIKE "血常規%",可以 ...
  • 1.排序 1)單列排序 2)組合排序 2.聚合函數 3.分組 4.limit語句 5.資料庫備份和還原 6.主鍵約束 7.主鍵自增 8.唯一約束 9.非空約束 10.預設值 11.外鍵約束 12.外鍵的級聯 ...
  • 前言 因當前的項目需要記錄每秒鐘伺服器的狀態信息,例如負載、cpu等等信息,這些數據都是和時間相關聯的。 因為一秒鐘就要存儲挺多的數據。而且我還在前端做了echart的折線圖,使用websocket實時查看數據的變化。 第一次的方案 第一次是很簡單的,就是mysql建索引,在時間戳和其餘兩個條件查詢 ...
  • [學習筆記] 1 以object關鍵字修飾一個類名,這種語法叫做孤立對象,這個對象是單例的。 相當於將單例類和單例對象同時定義。相當於java中的單例,即在記憶體中只會存在一個Test3實例。創建一個Scala Object,它相當於java的static, 不要用Scala-class去建工程,不然 ...
  • 1.CURD的含義 C(Create):創建 R(Read):查詢 U(Update):修改 D(Delete):刪除 2.SQL語句分類 1) Data Definition Language (DDL 數據定義語言) 如:建庫,建表 2) Data Manipulation Language(D ...
  • 一、什麼是資料庫 1、資料庫概念:資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,每個資料庫都有一個或多個不同的API介面用於創建,訪問,管理,搜索和複製所保存的數據。 2、RDBMS(關係資料庫管理系統): 能讓我們使用表、列和索引實現一個資料庫 保證各種表的行間的引用完整性 ...
  • 有時,我們可能會遇到這樣的情況,當我們數據表的float類型精度不夠時,可能需要把它統一調整成decimal或者money,而這時你一個一個去修改可能會崩潰,因為你無法從幾千張表裡確實找到所有的float類型的欄位,而這時我們就需要自動的,批量的去處理它們。 實現思路:從系統表中查詢所有用戶建立的表 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...