2010-08-24 329 views
55

我正在學習如何將Redis用於我的項目。有一件事我沒有得到我的頭是密鑰的名稱是用於密鑰。Redis密鑰中冒號的作用是什麼

我見過的鍵名,如這些:

users:bob 
color:blue 
item:bag 

是否結腸單獨的密鑰進行分類,並找到鑰匙更快?如果是這樣,你可以使用多個冒號命名鍵將它們分解成子類別?最後,他們與在Redis服務器中定義不同的數據庫有什麼關係?

我已經通讀文檔,並做了大量的谷歌搜索這件事,但奇怪的是我找不到任何討論這件事。

回答

74

冒號在早期的redis版本中作爲存儲命名空間數據的概念。在早期版本的Redis只支持字符串,如果你想存儲電子郵件和「鮑勃」的年齡,你必須給它的所有存儲爲一個字符串,所以冒號使用:

SET user:bob:email [email protected] 
SET user:bob:age 31 

他們有沒有特殊處理或性能特徵,唯一的目的是命名空間數據再次找到它。現在你可以使用散列存儲大部分coloned鍵:

HSET user:bob email [email protected] 
HSET user:bob age 31 

你不必命名哈希「用戶:鮑勃」,我們可以將其命名爲「鮑勃」,但隨着用戶的前綴命名空間它我們立即知道這個散列應該/可能有哪些信息。

+1

非常感謝,正是我需要知道的:) – Ryan 2010-08-24 11:43:24

+2

我很想知道爲什麼當''''在這種事情中更常見於各種語言時。 – CivFan 2015-09-08 23:29:51

+2

也許與大多數語言中用於對象訪問的點運算符完全不同 – 2015-09-09 11:10:03

30

冒號是結構鍵的一種方式。它們不以任何方式被redis解釋。你也可以使用你喜歡的任何其他分隔符,或者根本沒有。我個人更喜歡/,這使得我的密鑰看起來像文件系統路徑。它們對性能沒有影響,但是你不應該讓它們過長,因爲redis必須將所有的密鑰保存在內存中。

一個好的關鍵結構對於利用sort命令的力量很重要,這是redis對SQL連接的答案。

GET user:bob:color -> 'blue' 
GET user:alice:color -> 'red' 

SMEMBERS user:peter:friends -> alice, bob 

SORT user:peter:friends BY NOSORT GET user:*:color -> 'blue', 'red' 

您可以看到,鍵結構使SORT能夠通過引用結構化鍵來查找用戶的顏色。

+1

使用/是一個很好的建議! – 2015-05-01 08:38:20