好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > Redis性能大幅提升之Batch批量讀寫(xiě)詳解

Redis性能大幅提升之Batch批量讀寫(xiě)詳解

熱門(mén)標(biāo)簽:西藏教育智能外呼系統(tǒng)價(jià)格 地圖標(biāo)注費(fèi)用 地圖標(biāo)注如何即時(shí)生效 百度商家地圖標(biāo)注怎么做 小紅書(shū)怎么地圖標(biāo)注店 太原營(yíng)銷(xiāo)外呼系統(tǒng) 最簡(jiǎn)單的百度地圖標(biāo)注 竹間科技AI電銷(xiāo)機(jī)器人 玄武湖地圖標(biāo)注

前言

本文主要介紹的是關(guān)于Redis性能提升之Batch批量讀寫(xiě)的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)看看詳細(xì)的介紹:

提示:本文針對(duì)的是StackExchange.Redis

一、問(wèn)題呈現(xiàn)

前段時(shí)間在開(kāi)發(fā)的時(shí)候,遇到了redis批量讀的問(wèn)題,由于在StackExchange.Redis里面我確實(shí)沒(méi)有找到PipeLine命令,找到的是Batch命令,因此對(duì)其用法進(jìn)行了探究一下。

下面的代碼是我之前寫(xiě)的:

public ListStudentEntity> Get(Listint> ids)
{
  ListStudentEntity> result = new ListStudentEntity>();
  try
  {
   var db = RedisCluster.conn.GetDatabase();
   foreach (int id in ids.Keys)
   {
    string key = KeyManager.GetKey(id);
    var dic = db.HashGetAll(key).ToDictionary(k => k.Name, v => v.Value);
    StudentEntity se = new StudentEntity();
    if (dic.Keys.Contains(StudentEntityRedisHashKey.id.ToString()))
    {
     pe.id = FormatUtils.ConvertToInt32(dic[StudentEntityRedisHashKey.id.ToString()], -1);
    }
    if (dic.Keys.Contains(StudentEntityRedisHashKey.name.ToString()))
    {
     pe.name= dic[StudentEntityRedisHashKey.name.ToString()];
    }
    result.Add(se);
   }
   catch (Exception ex)
   {
   }
   return result;
}

從上面的代碼中可以看出,并不是批量讀,經(jīng)過(guò)性能測(cè)試,性能確實(shí)是要遠(yuǎn)遠(yuǎn)低于用Batch操作,因?yàn)镠ashGetAll方法被執(zhí)行了多次。

下面給出批量方法:

二、解決問(wèn)題方法

具體的用法是:

var batch = db.CreateBatch();

...//這里寫(xiě)具體批量操作的方法

batch.Execute();

2.1批量寫(xiě):

具體代碼:

public bool InsertBatch(ListStudentEntity> seList)
{
  bool result = false;
  try
  {
   var db = RedisCluster.conn.GetDatabase();
   var batch = db.CreateBatch();
   foreach (var se in seList)
   {
    string key = KeyManager.GetKey(se.id);
    batch.HashSetAsync(key, StudentEntityRedisHashKey.id.ToString(), te.id);
    batch.HashSetAsync(key, StudentEntityRedisHashKey.name.ToString(), te.name);
   }
   batch.Execute();
   result = true;
  }
  catch (Exception ex)
  {
  }
  return result;
}

這個(gè)方法里執(zhí)行的是批量插入學(xué)生實(shí)體數(shù)據(jù),這里只是針對(duì)Hash,其它的也一樣操作。 

2.2批量讀:

具體代碼:

public ListStudentEntity> GetBatch(Listint> ids)
{
  ListStudentEntity> result = new ListStudentEntity>();
  ListTaskStackExchange.Redis.HashEntry[]>> valueList = new ListTaskStackExchange.Redis.HashEntry[]>>();
  try
  {
   var db = RedisCluster.conn.GetDatabase();
   var batch = db.CreateBatch();
   foreach(int id in ids)
   {
    string key = KeyManager.GetKey(id);
    TaskStackExchange.Redis.HashEntry[]> tres = batch.HashGetAllAsync(key);
    valueList.Add(tres);
   }
   batch.Execute();

   foreach(var hashEntry in valueList)
   {
    var dic = hashEntry.Result.ToDictionary(k => k.Name, v => v.Value);
    StudentEntity se= new StudentEntity();
    if (dic.Keys.Contains(StudentEntityRedisHashKey.id.ToString()))
    {
     se.id= FormatUtils.ConvertToInt32(dic[StudentEntityRedisHashKey.id.ToString()], -1);
    }
    if (dic.Keys.Contains(StudentEntityRedisHashKey.name.ToString()))
    {
     se.name= dic[StudentEntityRedisHashKey.name.ToString()];
    }
    result.Add(se);
   }
  }
  catch (Exception ex)
  {
  }
  return result;
}

這個(gè)方法是批量讀取學(xué)生實(shí)體數(shù)據(jù),批量拿到實(shí)體數(shù)據(jù)后,將其轉(zhuǎn)化成我們需要的數(shù)據(jù)。下面給出性能對(duì)比。

2.3性能對(duì)比:

10條數(shù)據(jù),約4-5倍差距:

   

1000條數(shù)據(jù),約28倍的差距:

 

隨著數(shù)據(jù)了增多,差距將越來(lái)越大。

三、源碼測(cè)試案例 

上面是批量讀寫(xiě)實(shí)體數(shù)據(jù),下面給出StackExchange.Redis源碼測(cè)試案例里的批量讀寫(xiě)寫(xiě)法:

public void TestBatchSent()
  {
   using (var muxer = Config.GetUnsecuredConnection())
   {
    var conn = muxer.GetDatabase(0);
    conn.KeyDeleteAsync("batch");
    conn.StringSetAsync("batch", "batch-sent");
    var tasks = new ListTask>();
    var batch = conn.CreateBatch();
    tasks.Add(batch.KeyDeleteAsync("batch"));
    tasks.Add(batch.SetAddAsync("batch", "a"));
    tasks.Add(batch.SetAddAsync("batch", "b"));
    tasks.Add(batch.SetAddAsync("batch", "c"));
    batch.Execute();
    
    var result = conn.SetMembersAsync("batch");
    tasks.Add(result);
    Task.WhenAll(tasks.ToArray());
    
    var arr = result.Result;
    Array.Sort(arr, (x, y) => string.Compare(x, y));
    ...
   }
  }

這個(gè)方法里也給出了批量寫(xiě)和讀的操作。

總結(jié)

好了,先說(shuō)到這里了。以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 深入了解Redis的性能
  • asp.net性能優(yōu)化之使用Redis緩存(入門(mén))
  • 關(guān)于redis狀態(tài)監(jiān)控和性能調(diào)優(yōu)詳解

標(biāo)簽:林芝 廣東 唐山 揚(yáng)州 澳門(mén) 香港 景德鎮(zhèn) 贛州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis性能大幅提升之Batch批量讀寫(xiě)詳解》,本文關(guān)鍵詞  Redis,性能,大幅,提升,之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis性能大幅提升之Batch批量讀寫(xiě)詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Redis性能大幅提升之Batch批量讀寫(xiě)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 91九色丨PORNY丨极品女神| 嗯哦啊不要| www.av在线| 放荡勾人引诱h秘书| 欧美AV老肥妇色XXXX| ??嫩草影院入口??| 宝贝~你真湿真紧好爽动漫| 欧美又大又粗又爽特黄A片亲月| 浪货夹得好紧太爽了bl| 每天都在挨龠中度过by浮白曲| 天堂草在线观看国产AV| 国产一级爱做c片免费昨晚你| 一级性生话片| 公交车上被C的站不起来小说| 国产一区二区三区免费播放| 激情综合色综合久久综合| 北条麻妃一区二区三区美女毛多多| 亚洲男同志**可播放xnxx| 大尺度床戏激烈叫床震| 国精品无码一区二区三区在线蜜桃| 大桥未久与黑人中出视频| 大肚孕嗯啊h文| 蜜桃| 亚洲国产欧洲综合997久久| 娇小老少配xxxxx性视频| 日日夜夜操操操| 精品性久久| 姐姐直播tv下载| 做到一半软了怎么调理| 日本一本三区无码sex| 国产精品第三页在线观看| www.天天干| 疯狂吃奶freesex| 日本精品一区二区三本中文| 国产一级婬片AAAAAA片麻代| 农村很黄的一级小说| 好湿?好紧?太爽了h秘书男男| 东北女人奶大毛多水多| 成人无码区免费AⅤ片黄瓜视频 | 在骑马的时候要了你| 精品奶水区一区二区三区在线观看 |