手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

什么是redis

2017-11-03 00:59:28 1164

1.Redis并不是簡單的key-value存儲,實際上他是一個數據結構服務器,支持不同類型的值。也就是說,不必僅僅把字符串當作鍵所指向的值。下列這些數據類型都可作為值類型。

二進制安全的 字符串 string

二進制安全的 字符串列表 list of string

二進制安全的 字符串集合 set of string,換言之:它是一組無重復未排序的element??梢园阉闯蒖uby中的 hash–其key等于element,value都等于’true‘。

有序集合sorted set of string,類似于集合set,但其中每個元素都和一個浮點數score(評分)關聯。element根據score排序。可以把它看成Ruby中的 hash–其key等于element,value等于score,但元素總是按score的順序排列,無需額外的排序操作。

Redis

Redis key值是二進制安全的,這意味著可以用任何二進制序列作為key值,從形如”foo”的簡單字符串到一個JPEG文件的內容都可以??兆址彩怯行ey值。

2.關于key的幾條規則:

太長的鍵值不是個好主意,例如1024字節的鍵值就不是個好主意,不僅因為消耗內存,而且在數據中查找這類鍵值的計算成本很高。

太短的鍵值通常也不是好主意,如果你要用”u:1000:pwd”來代替”user:1000:password”,這沒有什么問題,但后者更易閱讀,并且由此增加的空間消耗相對于key object和value object本身來說很小。當然,沒人阻止您一定要用更短的鍵值節省一丁點兒空間。

最好堅持一種模式。例如:”object-type:id:field”就是個不錯的注意,像這樣”user:1000:password”。我喜歡對多單詞的字段名中加上一個點,就像這樣:”comment:1234:reply.to”。

3.字符串類型

這是最簡單Redis類型。如果你只用這種類型,Redis就像一個可以持久化的memcached服務器(注:memcache的數據僅保存在內存中,服務器重啟后,數據將丟失)。

我們來玩兒一下字符串類型:

$ redis-cli set mykey "my binary safe value"

OK

$ redis-cli get mykey

my binary safe value正如你所見到的,通常用SET command 和 GET command來設置和獲取字符串值。

 

值可以是任何種類的字符串(包括二進制數據),例如你可以在一個鍵下保存一副jpeg圖片。值的長度不能超過1GB。

雖然字符串是Redis的基本值類型,但你仍然能通過它完成一些有趣的操作。例如:原子遞增:

 

$ redis-cli set counter 100

OK $ redis-cli incr counter

(integer) 101

$ redis-cli incr counter

(integer) 102

$ redis-cli incrby counter 10

(integer) 112INCR 命令將字符串值解析成整型,將其加一,最后將結果保存為新的字符串值,類似的命令有INCRBY, DECR and DECRBY。實際上他們在內部就是同一個命令,只是看上去有點兒不同。

INCR是原子操作意味著什么呢?

就是說即使多個客戶端對同一個key發出INCR命令,也決不會導致競爭的情況。例如如下情況永遠不可能發生:『客戶端1和客戶端2同時讀出“10”,他們倆都對其加到11,然后將新值設置為11』。最終的值一定是12,read-increment-set操作完成時,其他客戶端不會在同一時間執行任何命令。

對字符串,另一個的令人感興趣的操作是GETSET命令,行如其名:他為key設置新值并且返回原值。這有什么用處呢?例如:你的系統每當有新用戶訪問時就用INCR命令操作一個Redis key。你希望每小時對這個信息收集一次。你就可以GETSET這個key并給其賦值0并讀取原值。

列表類型

要說清楚列表數據類型,最好先講一點兒理論背景,在信息技術界List這個詞常常被使用不當。例如”Python Lists”就名不副實(名為Linked Lists),但他們實際上是數組(同樣的數據類型在Ruby中叫數組)

一般意義上講,列表就是有序元素的序列:10,20,1,2,3就是一個列表。但用數組實現的List和用Linked List實現的List,在屬性方面大不相同。

Redis lists基于Linked Lists實現。這意味著即使在一個list中有數百萬個元素,在頭部或尾部添加一個元素的操作,其時間復雜度也是常數級別的。用LPUSH 命令在十個元素的list頭部添加新元素,和在千萬元素list頭部添加新元素的速度相同。

那么,壞消息是什么?在數組實現的list中利用索引訪問元素的速度極快,而同樣的操作在linked list實現的list上沒有那么快。

Redis Lists are implemented with linked lists because for a database system it is crucial to be able to add elements to a very long list in a very fast way. Another strong advantage is, as you’ll see in a moment, that Redis Lists can be taken at constant length in constant time.

Redis Lists用linked list實現的原因是:對于數據庫系統來說,至關重要的特性是:能非??斓脑诤艽蟮牧斜砩咸砑釉?。另一個重要因素是,正如你將要看到的:Redis lists能在常數時間取得常數長度。

提交成功!非常感謝您的反饋,我們會繼續努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: