3
Q
連接復位請求
A
回答
6
您無法使用單個MGET檢索這些數值。這個命令不是爲了維持這種工作量而設計的。生成非常大的Redis命令是錯誤的想法:
在服務器端,所有命令都應該放在輸入緩衝區中。命令的所有結果都應該放在輸出緩衝區中。輸入緩衝區限制爲1 GB。對於輸出緩衝區,根據客戶端的性質有軟限制和硬限制。但增加接近這些限制的緩衝區實際上是在尋找麻煩。達到極限時,Redis會簡單地關閉連接。
在客戶端,可能還有類似的緩衝區和硬編碼限制。
Redis是一個單線程事件循環。命令的執行被序列化。因此,一個非常大的命令將使Redis對所有其他客戶端沒有響應。
如果你想檢索大量的數據,你應該管道幾個GET或MGET命令。例如,以下代碼可用於檢索任意數量的項目,同時最小化往返次數和服務器端CPU消耗:
import redis
N_PIPE = 50 # number of MGET commands per pipeline execution
N_MGET = 20 # number of keys per MGET command
# Return a dictionary from the input array containing the keys
def massive_get(r, array):
res = {}
pipe = r.pipeline(transaction=False)
i = 0
while i < len(array):
keys = []
for n in range(0,N_PIPE):
k = array[i:i+N_MGET]
keys.append(k)
pipe.mget(k)
i += N_MGET
if i>=len(array):
break
for k,v in zip(keys, pipe.execute()):
res.update(dict(zip(k,v)))
return res
# Example: retrieve all keys from 0 to 1022:
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
array = range(0,1023)
print massive_get(r,array)
相關問題
- 1. 連接復位
- 2. 製作WSDL請求,獲取連接錯誤:( '連接異常中止。',錯誤(54, '由對等連接復位'))
- 3. 連接和連接請求超時
- 4. 請求與多個連接
- 5. 如何請求URL連接
- 6. 關閉python請求連接
- 7. HTTP請求 - 已連接
- 8. HTTP請求連接器騾
- 9. 設置請求頭:連接
- 10. ODP.NET連接請求超時
- 11. Oracle連接請求超時
- 12. httplib2多連接請求
- 13. Hive MQ連接請求URL
- 14. 連接兩個Ajax請求
- 15. https連接和ajax請求
- 16. 拒絕套接字連接請求
- 17. 套接字連接請求問題
- 18. AWS:接受VPC對等連接請求
- 19. 顛覆,連接復位
- 20. Python的「連接復位」
- 21. 交通連接復位
- 22. 類變量是復位每個請求
- 23. CodenameOne連接請求在重複時掛起
- 24. MySql連接重複使用不同的請求
- 25. 重複使用多個請求的數據庫連接
- 26. Excel宏請求:另存爲複製和打破數據連接
- 27. Alamofire請求總是失敗,如果Socket.io連接「請求超時」
- 28. 連接請求是400錯誤的請求與代號1
- 29. Pooled連接 - 監控Node.js請求庫中的併發請求?
- 30. 如何將HttpURL連接請求轉換爲Volly請求?
謝謝,這非常有幫助。 – thyme
謝謝。我認爲如果i> len(array):應該改爲if> = len(array): 否則,當len(array)是N_MGET的倍數時,它將顯示以下錯誤。在這種情況下20. redis.exceptions.ResponseError:'mget'命令的參數數量錯誤 –
已修復,謝謝! –