自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高效Redis Client多線程操作的并發(fā)吞吐設(shè)計

數(shù)據(jù)庫 其他數(shù)據(jù)庫 Redis
Redis是一個非常高效的基于內(nèi)存的NOSQL數(shù)據(jù)庫,它提供非常高效的數(shù)據(jù)讀寫效能.在實際應(yīng)用中往往是帶寬和CLIENT庫讀寫損耗過高導(dǎo)致無法更好地發(fā)揮出Redis更出色的能力.下面結(jié)合一些redis本身的特性和一些client操作上的改變來提高整個redis操作的效能.

Redis是一個非常高效的基于內(nèi)存的NOSQL數(shù)據(jù)庫,它提供非常高效的數(shù)據(jù)讀寫效能.在實際應(yīng)用中往往是帶寬和CLIENT庫讀寫損耗過高導(dǎo)致無法更好地發(fā)揮出Redis更出色的能力.下面結(jié)合一些redis本身的特性和一些client操作上的改變來提高整個redis操作的效能.

 

上圖是反映平常操作redis的情況,每個線程都獨立的發(fā)起相應(yīng)連接對redis的網(wǎng)絡(luò)讀寫.雖然我們可以通過批操作的方式來把當前多個操作合并成一個, 但這種方式只能針對當單線程,而多線程相互合并則設(shè)計上很少關(guān)注.從redis的協(xié)議來說其實并沒有限制,只是在client庫的設(shè)計一般沒有考慮進去.

如果在多線程操作REDIS的同時如果能夠合并網(wǎng)絡(luò)操作,那意味著可以減少操作網(wǎng)絡(luò)讀寫的情況把處理能力提升到***化.這樣Client總體的性能都會有所提升,而REDIS也因表層的網(wǎng)絡(luò)讀取減少而達到更好的利用率.

 

高效Redis Client多線程操作的并發(fā)吞吐設(shè)計

以上是設(shè)計圖,原理并不復(fù)雜,其實就是把每個請求的操作放到一個隊列中,后面開啟一個線程來把前面的指令進行一個合并操操作.一個線程在高并發(fā)下可以無法更快速地合并起來,可以根據(jù)需要進行合理的操作線程應(yīng)用.

這種設(shè)計的效果是否真的比較理想呢,以下是一個簡單的測試

 

  1. public void AnycSet() 
  2.             { 
  3.   
  4.                 CodeTimer.Time("beetle.redis asynset", () => 
  5.                 { 
  6.                     Parallel.For(0, Count, x => 
  7.                     { 
  8.                         ProtobufKey key = x.ToString(); 
  9.                         key.AsynSet(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x }); 
  10.   
  11.                     }); 
  12.                 }); 
  13.             } 
  14.             public void Set() 
  15.             { 
  16.   
  17.                 CodeTimer.Time("beetle.redis set", () => 
  18.                 { 
  19.                     Parallel.For(0, Count, x => 
  20.                     { 
  21.                         ProtobufKey key = x.ToString(); 
  22.                         key.Set(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x }); 
  23.   
  24.                     }); 
  25.                 }); 
  26.             } 

 

測試結(jié)果如下

 

以上是10W次的操作測試結(jié)果,由于redis在本機所以交互非常可觀.

雖然在多線程高并發(fā)下這樣的設(shè)計可以把吞吐能力和效能有一個非常不錯的效果,但其也存在缺陷因為每次操作都經(jīng)過不同線程的調(diào)處理,如果并發(fā)線程不多操作密集度不高.那效果并不理想;因為網(wǎng)絡(luò)操作密集度不高,可得到并合的數(shù)量不多,這方面的損耗有可能低于操作跨線程調(diào)度所帶來的損耗。

博文出處:http://www.open-open.com/lib/view/open1431181329085.html
 

責任編輯:Ophira 來源: 開源中國博客
相關(guān)推薦

2023-10-24 09:03:05

C++編程

2024-12-27 09:08:25

2025-01-17 08:23:33

2023-10-18 15:19:56

2019-06-03 09:13:11

線程進程多線程

2022-03-22 07:57:42

Java多線程并發(fā)

2019-09-26 10:19:27

設(shè)計電腦Java

2010-05-04 08:44:42

Java并發(fā)模型

2022-03-04 10:17:04

Redis數(shù)據(jù)

2024-12-03 00:44:50

2024-03-04 08:10:00

C#多線程語言

2013-05-23 15:59:00

線程池

2009-12-29 11:21:55

ADO多線程

2024-02-02 18:29:54

C++線程編程

2025-02-27 08:15:28

2010-03-16 19:29:26

Java多線程操作

2023-10-08 09:34:11

Java編程

2024-04-07 09:59:42

C++并發(fā)編程開發(fā)

2022-08-21 17:35:31

原子多線程

2020-10-13 07:44:45

理解分布式
點贊
收藏

51CTO技術(shù)棧公眾號