亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c#操作Redis的5種基本類型匯總

 更新時(shí)間:2020年07月06日 08:49:44   作者:詩(shī)意的遠(yuǎn)方  
這篇文章主要給大家介紹了關(guān)于c#操作Redis的5種基本類型,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在我們的項(xiàng)目中,通常會(huì)把數(shù)據(jù)存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中,比如Oracle,SQL Server,Mysql等,但是關(guān)系型數(shù)據(jù)庫(kù)對(duì)于并發(fā)的支持并不是很強(qiáng)大,這樣就會(huì)造成系統(tǒng)的性能不佳,而且存儲(chǔ)的數(shù)據(jù)多為結(jié)構(gòu)化數(shù)據(jù),對(duì)于非結(jié)構(gòu)數(shù)據(jù)(比如文本)和半結(jié)構(gòu)化數(shù)據(jù)(比如JSon) 就顯得不夠靈活,而非關(guān)系型數(shù)據(jù)庫(kù)則很好的彌補(bǔ)了這兩點(diǎn), 我們通常把讀操作頻繁的數(shù)據(jù)寫入Redis中,以Key-value的方式存儲(chǔ)來提高性能。

Redis支持5種數(shù)據(jù)類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。以下介紹了.net中操作redis五種數(shù)據(jù)類型的基本語(yǔ)法。

一、String數(shù)據(jù)類型的應(yīng)用場(chǎng)景

1. 簡(jiǎn)介

string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個(gè) key 對(duì)應(yīng)一個(gè) value。

string 類型是二進(jìn)制安全的。意思是 redis 的 string 可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象。

string 類型是 Redis 最基本的數(shù)據(jù)類型,string 類型的值最大能存儲(chǔ) 512MB。

2.使用場(chǎng)景

存儲(chǔ)簡(jiǎn)單的鍵值對(duì),比如我們需要統(tǒng)計(jì)某個(gè)網(wǎng)站的點(diǎn)擊量,關(guān)注量、粉絲量等

3. C#使用操作舉例

現(xiàn)在需要保存一個(gè)Webservice接口的參數(shù),讓其實(shí)現(xiàn)可配置,比如地址、用戶名、密碼、同步時(shí)間等信息,我們可以將它在前端頁(yè)面格式化為JSon字符串,

然后通過Ajax傳遞到服務(wù)端保存到Redis中,代碼如下:

/// <summary>
  /// 保存數(shù)據(jù)到Redis緩存中
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">需要保存的鍵名稱,默認(rèn)保存到redis的第二個(gè)數(shù)據(jù)庫(kù)中</param>
  /// <param name="configInfo">需要保存的配置信息</param>
  /// <returns>返回保存的結(jié)果</returns>
  public string SaveConfigInfoToRedis(string KeyName, string configInfo)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return "保存失敗!";
    if (client.ContainsKey(KeyName))
     client.Replace<string>(KeyName, configInfo);
    else
     client.Set<string>(KeyName, configInfo);
    return "保存成功!";
   }
  }

保存成功后,我們?cè)趓edis可視化工具中可以看到我們保存的信息為:

如果下次加載數(shù)據(jù)的時(shí)候,我們可以根據(jù)Key來讀取這個(gè)string字符串,然后格式化為Hashtable,再序列化為JOSN格式返回到前端,就可以以表單的形式展示,

在表單中可以修改保存等操作,實(shí)現(xiàn)了參數(shù)的可配置,這讀取代碼如下:

/// <summary>
  /// 從redis緩存中獲取數(shù)據(jù),轉(zhuǎn)化為相應(yīng)格式后返回
  /// GHB BY 2020-06-26
  /// </summary>
  /// <param name="KeyName">緩存中的鍵名稱</param>
  /// <returns>輸入鍵對(duì)應(yīng)的值信息</returns>
  public string LoadConfigFromRedis(string KeyName)
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    if (client == null) return string.Empty;
    string configData = client.Get<string>(KeyName);
    if (string.IsNullOrWhiteSpace(configData))
     return string.Empty;
    Hashtable data = JsonConvert.DeserializeObject<Hashtable>(configData);
    return JsonConvert.SerializeObject(data);

   }
  }

二、hash(哈希)

1.簡(jiǎn)介

Redis hash 是一個(gè)鍵值(key=>value)對(duì)集合。

Redis hash 是一個(gè) string 類型的 field 和 value 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。

2.使用場(chǎng)景

我們需要靈活的保存一些信息,特別適合保存對(duì)象的信息,比如用戶信息、配置信息等

3.C#使用操作舉例

由于我們上面使用string類型的對(duì)象保存配置信息存在這樣的問題,就是涉及到序列化和反序列化,如果信息量大的話將降低系統(tǒng)性能,

那么此處我們可以使用Hash數(shù)據(jù)結(jié)構(gòu)來保存上面的信息,代碼如下:

/// <summary>
  /// 操作redis的hashtable類型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateHash()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb",1))
   {
    Dictionary<string, string> configDic = new Dictionary<string, string>();
    configDic.Add("config_IP", "localhost");
    configDic.Add("config_Port", "1521");
    configDic.Add("config_serviceName", "orcl");
    configDic.Add("config_userName", "DE_POWERPMS");
    configDic.Add("config_password", "cppepass");
    client.SetRangeInHash("config_info", configDic);
    Dictionary<string, string> testHash = client.GetAllEntriesFromHash("config_info");
    foreach (var item in testHash)
    {
     Console.WriteLine("Hash的key為:{0} 值為:{1}", item.Key, item.Value);
    }
    Console.ReadLine();
   }
  }

使用redis可視化工具我們可以剛才存儲(chǔ)的數(shù)據(jù)如下:

三、List(列表)

1.簡(jiǎn)介

Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊),可以使用list的push操作將任務(wù)存到List,

然后使用pop操作將任務(wù)取出執(zhí)行,在列表頭部或者末尾操作數(shù)據(jù)非常高效,不受隊(duì)列長(zhǎng)度的影響。

列表最多可存儲(chǔ) 232- 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。

2.使用場(chǎng)景

redis 的 list 數(shù)據(jù)類型對(duì)于大部分使用者來說,是實(shí)現(xiàn)隊(duì)列服務(wù)的最經(jīng)濟(jì),最簡(jiǎn)單的方式。

另外,因?yàn)?list 結(jié)構(gòu)的數(shù)據(jù)查詢兩端附近的數(shù)據(jù)性能非常好,所以適合一些需要獲取最新數(shù)據(jù)的場(chǎng)景,比如新聞?lì)悜?yīng)用的 “最近新聞”,獲取錢N個(gè)用戶列表等。

3.C#使用操作舉例

對(duì)于隊(duì)列的使用,在此處比如有多個(gè)客戶端需要打印機(jī)打印任務(wù),那么使用隊(duì)列進(jìn)行任務(wù)的排隊(duì),然后按照排隊(duì)順序開始打印

對(duì)于棧的使用,比如二叉樹的遍歷,括號(hào)的匹配等,我們可以進(jìn)行先進(jìn)后出的順序完成,代碼如下:

/// <summary>
  /// 操作redis的List類型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateList()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region List隊(duì)列操作
    client.EnqueueItemOnList("QueueList", "打印任務(wù)1"); //入隊(duì)
    client.EnqueueItemOnList("QueueList", "打印任務(wù)2");
    client.EnqueueItemOnList("QueueList", "打印任務(wù)3");
    client.EnqueueItemOnList("QueueList", "打印任務(wù)4");
    long q = client.GetListCount("QueueList");
    Console.WriteLine("打印任務(wù)按照順序打印開始");
    for (int i = 0; i < q; i++)
    {
     Console.WriteLine("QueueList出隊(duì)值:{0}", client.DequeueItemFromList("QueueList"));
    }
    Console.WriteLine("打印任務(wù)按照順序打印完成");
    #endregion
    #region 棧操作
    client.PushItemToList("StackList", "入棧操作1"); //入棧
    client.PushItemToList("StackList", "入棧操作2");
    client.PushItemToList("StackList", "入棧操作3");
    client.PushItemToList("StackList", "入棧操作4");
    Console.WriteLine("開始出棧");
    long p = client.GetListCount("StackList");
    for (int i = 0; i < p; i++)
    {
     Console.WriteLine("StackList出棧值:{0}", client.PopItemFromList("StackList"));
    }
    Console.WriteLine("出棧完成");
    Console.ReadLine();
    #endregion
   }
  }

運(yùn)行結(jié)果顯示,隊(duì)列是先進(jìn)先出操作,棧是先進(jìn)后出操作,并且操作完成后,數(shù)據(jù)被刪除,如圖所示:

四.Set(集合)

1.簡(jiǎn)介

Redis 的 Set 是 string 類型的無序集合。

集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。

集合中最大的成員數(shù)為 232- 1(4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。

2.使用場(chǎng)景

集合主要應(yīng)用在一些需要求交集、并集、補(bǔ)集這樣的場(chǎng)景,比如我們需要求共同好友、共同興趣愛好、共同關(guān)注的微博,限制同一個(gè)賬號(hào)多處登錄系統(tǒng)等場(chǎng)景。

3.C#使用操作舉例

比如現(xiàn)在隨便舉例兩個(gè)QQ用戶為例:QQ用戶1和QQ用戶2,他們分別有各自的好友,現(xiàn)在我們可以通過集合來獲取到他們的共同好友,代碼如下:

/// <summary>
  /// 操作redis的Set類型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set操作
    client.AddItemToSet("QQ用戶1", "好友A");
    client.AddItemToSet("QQ用戶1", "好友B");
    client.AddItemToSet("QQ用戶1", "好友C");
    client.AddItemToSet("QQ用戶1", "好友D");

    client.AddItemToSet("QQ用戶2", "好友C");
    client.AddItemToSet("QQ用戶2", "好友F");
    client.AddItemToSet("QQ用戶2", "好友G");
    client.AddItemToSet("QQ用戶2", "好友D");
    var setunion = client.GetIntersectFromSets("QQ用戶1", "QQ用戶2");
    Console.WriteLine("QQ用戶1和QQ用戶2的共同好友為:");
    foreach (var item in setunion)
    {
     Console.WriteLine(item);
    }
    Console.ReadLine();
    #endregion
   }
  }

運(yùn)行結(jié)果顯示他們的共同好友為: 好友C和好友D

五、zset(sorted set:有序集合)

1.簡(jiǎn)介

在 set 的基礎(chǔ)上給集合中每個(gè)元素關(guān)聯(lián)了一個(gè)分?jǐn)?shù),往有序集合中插入數(shù)據(jù)時(shí)會(huì)自動(dòng)根據(jù)這個(gè)分?jǐn)?shù)排序。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。

redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。

zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。

2.使用場(chǎng)景

在集合類型的場(chǎng)景上加入排序就是有序集合的應(yīng)用場(chǎng)景了。比如根據(jù)好友的“親密度”排序顯示好友列表。

3.C#使用操作舉例

比如現(xiàn)在有很多主播,每個(gè)主播都有粉絲給的禮物,現(xiàn)在需要我們給出禮物數(shù)量最多的前三名主播,那么可以使用SortedSet來實(shí)現(xiàn),

可以分別給每個(gè)主播定義個(gè)分?jǐn)?shù)來存儲(chǔ)禮物數(shù)量,代碼如下:

/// <summary>
  /// 操作redis的SortedSet類型
  /// GHB BY 2020-06-26
  /// </summary>
  public static void OperateSortedSet()
  {
   using (RedisClient client = new RedisClient("127.0.0.1", 6379, "qd*jy*17ghb", 1))
   {
    #region Set操作
    client.AddItemToSortedSet("GiftSortedSet", "主播1", 24);
    client.AddItemToSortedSet("GiftSortedSet", "主播2", 564);
    client.AddItemToSortedSet("GiftSortedSet", "主播3", 746);
    client.AddItemToSortedSet("GiftSortedSet", "主播4", 2357);
    client.IncrementItemInSortedSet("GiftSortedSet", "主播2", new Random().Next(200, 500));
    Console.WriteLine("禮物數(shù)最多的前三名主播為:");
    foreach (var item in client.GetRangeWithScoresFromSortedSet("GiftSortedSet",1,3))
    {
     Console.WriteLine($"名:{item.Key} 分?jǐn)?shù):{item.Value}");
    }
    Console.ReadLine();
    #endregion
   }
  }

運(yùn)行之后,我們可以看到禮物數(shù)前三名的主播了,運(yùn)行結(jié)果如下:

總結(jié)

以上就是.NET環(huán)境下操作Redis五種數(shù)據(jù)類型的所有方法總結(jié),我們可以看到Redis更是一款數(shù)據(jù)結(jié)構(gòu)服務(wù)器,對(duì)于這五種數(shù)據(jù)類型,我們可以實(shí)現(xiàn)很多操作,

比如對(duì)字符串進(jìn)行附加操作;遞增哈希中的值;向列表中增加元素;計(jì)算集合的交集、并集與差集;使用排序集合來獲取排名等。

好了,到此這篇關(guān)于c#操作Redis的5種基本類型匯總的文章就介紹到這了,更多相關(guān)c#操作Redis的基本類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# 類型構(gòu)造器

    c# 類型構(gòu)造器

    CLR還支持類型構(gòu)造器,也稱為靜態(tài)構(gòu)造器。c#類型構(gòu)造器可應(yīng)用引用類型和值類型,永遠(yuǎn)沒有參數(shù)
    2012-10-10
  • C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件

    C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件

    本篇文章主要介紹了C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件,現(xiàn)在分享給大家,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • C#編程實(shí)現(xiàn)發(fā)送郵件的方法(可添加附件)

    C#編程實(shí)現(xiàn)發(fā)送郵件的方法(可添加附件)

    這篇文章主要介紹了C#編程實(shí)現(xiàn)發(fā)送郵件的方法,具備添加附件的功能,涉及C#文件傳輸及郵件發(fā)送的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C#中using關(guān)鍵字的使用方法示例

    C#中using關(guān)鍵字的使用方法示例

    在C#語(yǔ)句中,將using關(guān)鍵字作為一個(gè)語(yǔ)句時(shí),該語(yǔ)句的作用是定義一個(gè)用大括號(hào)規(guī)定的范圍,在該范圍的末尾,系統(tǒng)會(huì)立即釋放using后小括號(hào)內(nèi)指定的對(duì)象,下面這篇文章主要給大家介紹了關(guān)于C#中using關(guān)鍵字使用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 【C#基礎(chǔ)】Substring截取字符串的方法小結(jié)(推薦)

    【C#基礎(chǔ)】Substring截取字符串的方法小結(jié)(推薦)

    這篇文章主要介紹了Substring截取字符串方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C#使用Npoi實(shí)現(xiàn)生成Word文檔

    C#使用Npoi實(shí)現(xiàn)生成Word文檔

    這篇文章主要為大家詳細(xì)介紹了C#如何使用Npoi實(shí)現(xiàn)生成Word文檔,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-03-03
  • C#中事件只能在內(nèi)部調(diào)用的原因分析

    C#中事件只能在內(nèi)部調(diào)用的原因分析

    事件(Event)?基本上說是一個(gè)用戶操作,如按鍵、點(diǎn)擊、鼠標(biāo)移動(dòng)等等,或者是一些提示信息,如系統(tǒng)生成的通知。應(yīng)用程序需要在事件發(fā)生時(shí)響應(yīng)事件,這篇文章主要介紹了C#中事件為什么只能在內(nèi)部調(diào)用,需要的朋友可以參考下
    2021-11-11
  • C#實(shí)現(xiàn)創(chuàng)建,刪除,查找,配置虛擬目錄實(shí)例詳解

    C#實(shí)現(xiàn)創(chuàng)建,刪除,查找,配置虛擬目錄實(shí)例詳解

    這篇文章主要介紹了C#創(chuàng)建,刪除,查找,配置虛擬目錄的方法,以實(shí)例形式較為詳細(xì)的分析了C#針對(duì)虛擬目錄的創(chuàng)建、刪除、查找等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 登錄驗(yàn)證全局控制的幾種方式總結(jié)(session)

    登錄驗(yàn)證全局控制的幾種方式總結(jié)(session)

    在登陸驗(yàn)證或者其他需要用到session全局變量的時(shí)候,歸結(jié)起來,主要有以下三種較方便的實(shí)現(xiàn)方式。(其中個(gè)人較喜歡使用第一種實(shí)現(xiàn)方法)
    2014-01-01
  • C#圖書管理系統(tǒng) 附源碼下載

    C#圖書管理系統(tǒng) 附源碼下載

    這篇文章主要為大家詳細(xì)介紹了C#圖書管理系統(tǒng),文章中附源碼下載,示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評(píng)論