C# Redis五種數據類型的操作--簡易易懂


    前段時間學習了Redis,一直在忙着工作和一些其他的事情,這兩天有空了,就把這學習到的技術分享出來給大家,謝謝

  • Redis是什么?
  • Redis的特點
  • Redis使用場景
  • Redis數據類型

  一、.Redis是什么?

Redis是一個完全免費開源的,基於內存的高性能的key-value存儲系統,可以用作數據庫、緩存和消息中間件。支持多種類型的數據結構.

Redis內置數據持久化、LRU驅動事件、事物、主從復制、哨兵機制、集群、自動分區、lua腳本提供高可用性..

Redis全稱為:Remote     Dictionary    Server (遠程數據服務)

Redis是一種非關系型數據庫

 

  二、Redis的特點

Redis以內存作為數據存儲介質,讀寫數據的效率極高。速度快:使用標准c語言編寫,所有數據在內存存儲,讀速度:110000次/s 寫速度:81000次/s

Redis跟memcache不同的是,儲存在Redis中的數據是持久化的,斷電或重啟,數據也不會丟失。

Redis的存儲分為內存存儲、磁盤存儲和log文件。

Redis可以從磁盤重新將數據加載到內存中,也可以通過配置文件對其進行配置,因此,redis才能實現持久化。

Redis支持主從模式,可以配置集群,更利於支撐大型的項目。

Redis是單線程:一次只能執行一條命令,拒絕長命令(因為Redis基於內存,不牽扯磁盤IO操作限制)

 

 

  三、Redis應用場景

  緩存: 配合關系型數據庫做高速緩存(string),會話緩存(最常用) 

       消息隊列

        活動排行榜,計數器: 用戶點贊,評論數,投票,網站訪問量,點擊率等(zset)

        發布,訂閱消息(消息通知)

       商品列表,評論列表

 

分布式鎖: 分布式環境下,訪問共享資源(string)

分布式session: 分布式環境下,需要session共享(string)

用戶信息,發布文章信息等(hash)

朋友圈,微博時間線,自動補全聯系人(list)

抽獎系統,給用戶添加標簽,給標簽添加用戶、共同關注

GEO(計算兩地距離,外賣小哥距你還有多少米)

 

四、Redis數據類型(這里的案例都是用C#控制台程序做的,不是特別全面)

Redis有五種數據類型(String,Hash,Set,ZSet,List )

首先搭建一個控制台應用程序,添加應用(Nuget里面去找)如圖

 

    

 

 

  就會得到相應的引用

 

  1.String

 

/// <summary>
/// string
/// </summary>
public static void TestString()
{
    using (RedisClient client = new RedisClient("127.0.0.1", 6379))
    {
        //清空Redis里面的所有緩存
        client.FlushAll();
        //存儲
        client.Set<string>("name", "admin");
        client.Set("password", "123456");
        //讀取
        string name = client.Get<string>("name");
        string pwd = client.Get<string>("password");
        Console.WriteLine(name);
        Console.WriteLine(pwd);
    }
}
//結果如圖
 
 
        

 

2.Hash
/// <summary>
/// Hash
/// </summary>
public static void TestHash()
{
    using (RedisClient client = new RedisClient("127.0.0.1", 6379))
    {
        //清空Redis里面的所有緩存
        client.FlushAll();
        //配置數據
        Dictionary<string, string> dictionary = new Dictionary<string, string>();
        dictionary.Add("a", "1");
        dictionary.Add("b", "2");
        dictionary.Add("c", "3");
        dictionary.Add("d", "4");
        dictionary.Add("e", "5");
        //緩存
        client.SetRangeInHash("dictionary", dictionary);
        //追加
        client.SetEntryInHash("dictionary", "666", "fgh");
        //獲取存入的數據
        Dictionary<string, string> hashData = client.GetAllEntriesFromHash("dictionary");

        foreach (var item in hashData)
        {
            Console.WriteLine($"Key是:{item.Key}------Vaule值是:{item.Value}");
        }
    }
}
//結果如圖

 
        

 

3.Set
/// <summary>
/// Set
/// </summary>
public static void TestSet()
{
    using (RedisClient client = new RedisClient("127.0.0.1", 6379))
    {
        //清空Redis里面的所有緩存
        client.FlushAll();
        client.AddItemToSet("微信A", "好友A");
        client.AddItemToSet("微信A", "好友B");
        client.AddItemToSet("微信A", "好友C");
        client.AddItemToSet("微信A", "好友D");
        client.AddItemToSet("微信A", "好友2");

        client.AddItemToSet("微信B", "好友1");
        client.AddItemToSet("微信B", "好友A");
        client.AddItemToSet("微信B", "好友D");
        client.AddItemToSet("微信B", "好友F");
        client.AddItemToSet("微信B", "好友G");
        //獲取交集(獲取相同的好友)
        var setunion = client.GetIntersectFromSets("微信A", "微信B");
        Console.WriteLine("微信A和微信B的共同好友為:");
        foreach (var item in setunion)
        {
            Console.WriteLine(item);
        }
    }
}
//結果為


//這是緩存客戶端看到的緩存內容

 
        

 

4.Zset
 /// <summary>
 /// Zset
 /// </summary>
 public static void TestZSet()
 {
     using (RedisClient client = new RedisClient("127.0.0.1", 6379))
     {
         //清空Redis里面的所有緩存
         client.FlushAll();
         client.AddItemToSortedSet("主播安妮", "粉絲1", 50);
         client.AddItemToSortedSet("主播安妮", "粉絲2", 20);
         client.AddItemToSortedSet("主播安妮", "粉絲3", 68);
         client.AddItemToSortedSet("主播安妮", "粉絲4", 31);
         client.IncrementItemInSortedSet("主播安妮", "粉絲4", new Random().Next(200, 500));
         var TopList = client.GetAllItemsFromSortedSetDesc("主播安妮");
         Console.WriteLine("刷禮物排行榜為");
         foreach (var item in TopList)
         {
             Console.WriteLine(item);
         }
     }
 }
//結果為

 
        

 

5.List
/// <summary>
/// List
/// </summary>
public static void TestList()
{
    using (RedisClient client = new RedisClient("127.0.0.1", 6379))
    {
        //清空Redis里面的所有緩存
        redisClient.FlushAll();
        //隊(在前面加入)
        client.EnqueueItemOnList("QueueList", "打印任務1"); 
        client.EnqueueItemOnList("QueueList", "打印任務2");
        client.EnqueueItemOnList("QueueList", "打印任務3");
        client.EnqueueItemOnList("QueueList", "打印任務4");
        //獲取QueueList緩存個數
        long q = client.GetListCount("QueueList");
        for (int i = 0; i < q; i++)
        {
            //【先進先出】取值的時候先取 “入棧操作1-->2-->3-->4” 
            Console.WriteLine("QueueList出隊值:{0}", client.DequeueItemFromList("QueueList"));
        }

        Console.WriteLine("---------------------------------------------------------------");

        //棧(在后面加入)
        client.PushItemToList("StackList", "入棧操作1"); 
        client.PushItemToList("StackList", "入棧操作2");
        client.PushItemToList("StackList", "入棧操作3");
        client.PushItemToList("StackList", "入棧操作4");
        long p = client.GetListCount("StackList");
        for (int i = 0; i < p; i++)
        {
            //【后進先出】取值的時候先取 “入棧操作4-->3-->2-->1” 
            Console.WriteLine("StackList出棧值:{0}", client.PopItemFromList("StackList"));
        }
    }
}
//結果

 

 
         

 //這個比較復雜一點,需要結合輸出值對應着看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM