2017-06-17 99 views
2

我是Redis的新手,我不確定爲什麼這個查詢需要這麼長時間。它基本上是json對象的7mb字符串。我使用HGet key data,它所花費的時間平均爲225毫秒。這實際上比同一虛擬化環境中的sql服務器慢。他們也有相同的分配資源。Redis 225 ms檢索哈希值

虛擬化環境中內置的延遲最差只有約9000微秒。

我什至不能包裝我的頭周圍如何完全緩存內存需要比在sql中獲取相同的數據更長的時間。 redis服務器需要花費兩倍的時間。下面是一個字符串示例。

[ {"name":"Christopher", "advocate": "John"}, {"name": "Jane", "advocate": "John"}, etc..]

的SQL只是完全相同的信息表。

| name  | advocate | 
| ---------- | -------- | 
| Christopher | John  | 
| Jane  | John  | 

有我丟失的東西在Hash較大的物體,這將提高性能?如果完全相同的查詢內存比sql慢,我不能證明任何人使用Redis。我明白,一旦我開始增加sql中的連接複雜性,我可以看到更多的重要性。但我認爲我在Redis中可能會缺少更多的東西。

如果您需要,我可以提供更多細節。

回答

1

這並不令人驚訝。

SQL Server使用TDS返回數據。該協議旨在有效地返回表格數據。它不會重複每行的字段名稱 - 這發生在您的JSON對象中。我的猜測是JSON表示實際上比TDS表示更大。由於該用例受網絡帶寬限制(超過延遲),因此Redis似乎較慢。

請注意,Redis沒有特別優化來存儲和返回大型對象。

對於225 ms,7 MB表示31 MB/s。這顯然取決於管道的大小,但對於虛擬化環境來說,這看起來並不壞。

+0

我該怎麼做才能改善時間? –

+0

您提到了Pipes。我怎樣才能增加管道的大小?你也提到它沒有優化,我怎樣才能更有效地返回大對象?我應該將這些對象分離爲更多關鍵值以減小大小,並減少字段的json重複次數,並讓我的鍵成爲這些對象的表示形式? –

+0

如果不需要操作來自Redis的JSON字段(即將數據存儲爲大塊) - 那麼我會建議使用輕量級壓縮算法(LZ4,Snappy,LZO等)壓縮數據客戶端。 )。 –