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

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

  • Redis是什麼?
  • Redis的特色
  • Redis使用場景
  • Redis數據類型

  1、.Redis是什麼?數據庫

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

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

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

Redis是一種非關係型數據庫數據結構

 

  2、Redis的特色dom

Redis之內存做爲數據存儲介質,讀寫數據的效率極高。速度快:使用標準c語言編寫,全部數據在內存存儲,讀速度:110000次/s 寫速度:81000次/s分佈式

Redis跟memcache不一樣的是,儲存在Redis中的數據是持久化的,斷電或重啓,數據也不會丟失。性能

Redis的存儲分爲內存存儲、磁盤存儲和log文件。學習

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

Redis支持主從模式,能夠配置集羣,更利於支撐大型的項目。

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

 

 

  3、Redis應用場景

  緩存: 配合關係型數據庫作高速緩存(string),會話緩存(最經常使用) 

       消息隊列

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

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

       商品列表,評論列表

 

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

分佈式session: 分佈式環境下,須要session共享(string)

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

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

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

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

 

4、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"));
        }
    }
}
//結果

 

 
 

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

相關文章
相關標籤/搜索