亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

Redis性能大幅提升之Batch批量讀寫詳解

2020-10-28 21:36:54
字體:
來源:轉載
供稿:網友

前言

本文主要介紹的是關于Redis性能提升之Batch批量讀寫的相關內容,分享出來供大家參考學習,下面來看看詳細的介紹:

提示:本文針對的是StackExchange.Redis

一、問題呈現

前段時間在開發的時候,遇到了redis批量讀的問題,由于在StackExchange.Redis里面我確實沒有找到PipeLine命令,找到的是Batch命令,因此對其用法進行了探究一下。

下面的代碼是我之前寫的:

public List<StudentEntity> Get(List<int> ids){  List<StudentEntity> result = new List<StudentEntity>();  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;}

從上面的代碼中可以看出,并不是批量讀,經過性能測試,性能確實是要遠遠低于用Batch操作,因為HashGetAll方法被執行了多次。

下面給出批量方法:

二、解決問題方法

具體的用法是:

var batch = db.CreateBatch();...//這里寫具體批量操作的方法batch.Execute();

2.1批量寫:

具體代碼:

public bool InsertBatch(List<StudentEntity> 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;}

這個方法里執行的是批量插入學生實體數據,這里只是針對Hash,其它的也一樣操作。 

2.2批量讀:

具體代碼:

public List<StudentEntity> GetBatch(List<int> ids){  List<StudentEntity> result = new List<StudentEntity>();  List<Task<StackExchange.Redis.HashEntry[]>> valueList = new List<Task<StackExchange.Redis.HashEntry[]>>();  try  {   var db = RedisCluster.conn.GetDatabase();   var batch = db.CreateBatch();   foreach(int id in ids)   {    string key = KeyManager.GetKey(id);    Task<StackExchange.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;}

這個方法是批量讀取學生實體數據,批量拿到實體數據后,將其轉化成我們需要的數據。下面給出性能對比。

2.3性能對比:

10條數據,約4-5倍差距:

   

1000條數據,約28倍的差距:

 

隨著數據了增多,差距將越來越大。

三、源碼測試案例 

上面是批量讀寫實體數據,下面給出StackExchange.Redis源碼測試案例里的批量讀寫寫法:

public void TestBatchSent()  {   using (var muxer = Config.GetUnsecuredConnection())   {    var conn = muxer.GetDatabase(0);    conn.KeyDeleteAsync("batch");    conn.StringSetAsync("batch", "batch-sent");    var tasks = new List<Task>();    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));    ...   }  }

這個方法里也給出了批量寫和讀的操作。

總結

好了,先說到這里了。以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线一区二区| 亚洲欧美日韩国产成人| 国产成人一区二区| 亚洲三级免费看| 亚洲精品视频网上网址在线观看| 欧美亚州一区二区三区| 亚洲美女动态图120秒| 欧美精品在线网站| 欧美专区中文字幕| 久久久免费在线观看| 日韩av电影在线播放| 欧美激情亚洲另类| 精品久久香蕉国产线看观看gif| 亚洲午夜性刺激影院| 欧美在线视频免费| 一区三区二区视频| 亚洲人午夜精品| 成人中文字幕+乱码+中文字幕| 久久久久久久久久久av| 久久69精品久久久久久国产越南| 中文字幕亚洲一区| 久久精彩免费视频| 免费91麻豆精品国产自产在线观看| 国产www精品| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩一区二区三区在线免费观看| 911国产网站尤物在线观看| 国产精品黄页免费高清在线观看| 国产成人在线精品| 国产色视频一区| 91久久国产精品91久久性色| 国产精品免费网站| 国产精品视频精品| 日韩在线激情视频| 国产精彩精品视频| 日韩极品精品视频免费观看| 成人在线免费观看视视频| 成人h视频在线观看播放| 色偷偷888欧美精品久久久| 91国内精品久久| 丝袜亚洲欧美日韩综合| 国产精品亚洲欧美导航| 国产精品欧美一区二区三区奶水| 欧美成人午夜激情视频| 综合久久五月天| 亚洲国产欧美在线成人app| 亚洲天堂av电影| 这里只有精品在线播放| 日韩有码在线视频| 九九热r在线视频精品| 欧美天天综合色影久久精品| 亚洲精品大尺度| 欧美wwwxxxx| 国产福利视频一区二区| 这里只有精品久久| 久久久久久久久电影| 日本在线观看天堂男亚洲| 国模极品一区二区三区| 亚洲精品av在线播放| 永久555www成人免费| 亚洲网站在线播放| 亚洲一区二区三区在线免费观看| 欧美高清电影在线看| www.日韩视频| 亚洲福利视频免费观看| 91国产精品视频在线| 久久久久久高潮国产精品视| 韩国日本不卡在线| 国产成人avxxxxx在线看| 久久91精品国产91久久久| 国产精品av电影| 91精品在线国产| 国产精品美女久久| 亚洲精品免费在线视频| 一区三区二区视频| 亚洲精品黄网在线观看| 精品中文字幕久久久久久| 国产一区二区成人| 国产情人节一区| 久久精品免费播放| 欧美另类99xxxxx| 日韩国产高清污视频在线观看| 欧美性极品少妇精品网站| 精品久久久久久久久久ntr影视| 国产精品视频xxxx| 欧美激情2020午夜免费观看| 国产精品大片wwwwww| 综合国产在线观看| 性欧美亚洲xxxx乳在线观看| 国产一区二区动漫| 中文字幕欧美亚洲| 欧美激情精品久久久久久| 久久久免费高清电视剧观看| 日本久久久久亚洲中字幕| 成人精品在线观看| 亚洲欧洲免费视频| 欧美成人精品一区| 亚洲欧洲视频在线| 福利视频导航一区| 久久久久久国产免费| 欧美xxxwww| 国产91av在线| 午夜精品蜜臀一区二区三区免费| 欧美日韩成人黄色| 亚洲成年人在线播放| 韩国三级日本三级少妇99| 精品国产区一区二区三区在线观看| 久久精品国产一区二区电影| 久久久久久久久久国产精品| 久久久久免费视频| 欧美精品在线第一页| 精品激情国产视频| 精品久久久一区| 久久999免费视频| 国产在线视频2019最新视频| 国产精品免费久久久久影院| 亚洲精品福利资源站| 国产精品美女久久久久久免费| 日韩av电影手机在线观看| 国产日韩欧美日韩大片| 国产91精品青草社区| 国产日韩欧美在线看| 国产人妖伪娘一区91| 日韩中文理论片| 久久久电影免费观看完整版| 国产suv精品一区二区| 亚洲片在线资源| 久久久久国产精品一区| 亚洲自拍偷拍福利| 色婷婷久久一区二区| 欧美xxxx综合视频| 国产精品永久在线| 欧美老女人性生活| 国产日韩精品在线观看| 成人免费观看网址| 亚洲欧美中文在线视频| 日韩福利视频在线观看| 91免费看片网站| 在线激情影院一区| 亚洲午夜小视频| 欧美日韩亚洲国产一区| 欧美成人免费播放| 亚洲情综合五月天| 成人免费在线视频网址| 欧美电影院免费观看| 欧美国产日韩一区二区在线观看| 精品久久久久人成| 亚洲一区二区三区sesese| 日本久久精品视频| 久久黄色av网站| 欧美日韩国产激情| 日韩国产高清视频在线| 亚洲四色影视在线观看| 欧美伊久线香蕉线新在线| 在线成人激情视频| 成人xvideos免费视频| 97久久久久久| 久久精品视频在线播放| 欧美亚洲国产日本| 91久久久久久久久| 97在线免费观看视频| 91久久精品国产91久久| 亚洲欧美制服中文字幕| 国内精品美女av在线播放|