初探Redis-基礎類型String

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

  Redis官網://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、運行效果,部分線程搶購到商品,部分線程同步搶購時,商品沒有了返回負數,部分線程搶購時,活動已結束。

   

 

 倉庫地址://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate文件夾)

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