1. 程式人生 > >初探Redis-基礎型別String

初探Redis-基礎型別String

  Redis存在五種基礎型別:字串(String)、佇列(List)、雜湊(Hash)、集合(Set)、有序集合(Sorted Set)。String的出鏡率算是最高的。本次列舉出String的常用操作。

  Redis官網:https://redis.io/ 

 

一、字串(String)介紹

  字串(String)是Redis 中最基本的型別,一個 key 對應著一個 value,可以理解為字典型別,key-value形式。該型別二進位制安全的,對應值可以儲存任何資料,如圖片或者序列化後的物件,對應值最大可以儲存 512MB 的資料。但不是建議去最大化儲存,儲存資料儘量小為最佳使用。從操作出發,常用操作為這兩類:

  • 儲存和操作字串;
  • 儲存和計算int和float型別的資料。

 

 

二、字串(String)常用Api 

  • 設定值

  

  eg:設定30秒生存時間,且必須firstkey不存在。

  

  • 獲取值 

   

   eg:

  

  • 批量設定值與批量獲取值

  

   eg:

  

  •  遞增或遞減值(△1)

   

  eg: 

  

  • 遞增或遞減值(△n) 

  

  eg:

  

  • 遞增浮點數值(△n) 

  

   eg:

  

  •  獲取舊值並設定新值

  

   eg:

  

 

三、字串(Strng)不常用Api

  • 追加值

  

  eg:

  

  • 查詢key

   

  eg:

  

  • 刪除key

  

  eg:

  

  • 設定剩餘生存時間

   

  eg:設定firstkey生存時間30秒,並通過ttl檢視剩餘生存時間。

  

  • 獲取剩餘生存時間 

  

  eg:

  

  • 設定永久生存

   

   eg:

  

  • 獲取字串長度

  

  eg:

  

  • 覆蓋指定位置開始處的字元

  

  eg:

  

  • 獲取指定位置範圍字串

  

  eg:

  

 

四、字串(String)簡單應用場景

  模擬限量商品秒殺場景,來運用一下redis。採用多執行緒隨機請求限量商品,並且用redis控制商品數量的減少。

1、採用StackExchange.Redis的Nuget包來連線和管理Redis。並封裝一套Redis的操作類。

  

2、採用單例模式管理Redis的例項。

  

3、模擬多使用者限量秒殺模型。通過Redis的incr和decr操作控制商品數量。

/// <summary>
/// 超賣模型
/// </summary>
public class OverSell
{
    private static bool IsGoOn = true;//秒殺活動是否結束

    public static void Run()
    {
        RedisBase.StringService.StringSet("Stock", 10);

        for (int i = 0; i < 5000; i++)
        {
            int k = i;
            Task.Run(() =>//每個執行緒就是一個模擬使用者請求
            {
                if (IsGoOn)
                {
                    var index = RedisBase.StringService.StringDecrement("Stock");//-1並且返回  
                    if (index >= 0)
                    {
                        Console.WriteLine($"{k.ToString("000")} Success,Product Index:{index}");
                        //...
                    }
                    else
                    {
                        if (IsGoOn)
                        {
                            IsGoOn = false;
                        }
                        Console.WriteLine($"{k.ToString("000")} Failed,Product Index:{index}");
                    }
                }
                else
                {
                    Console.WriteLine($"{k.ToString("000")} Finish......");
                }
            });
        }
    }
}

 4、執行效果,部分執行緒搶購到商品,部分執行緒同步搶購時,商品沒有了返回負數,部分執行緒搶購時,活動已結束。

   

 

 倉庫地址:https://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate資料夾)

2020-04-25,望技術有成後能回來看見自己的腳步