關於使用key/value資料庫redis和TTSERVER的心得體會

來源:互聯網
上載者:User
本篇文章是對使用key/value資料庫redis和TTSERVER的心得體會進行了詳細的分析介紹,需要的朋友參考下 

先說redis
redis是一個類似memcached的key/value儲存系統,它支援儲存的 value類型相對較多,包括string(字串)、 list(鏈表)、set(集合)和zset(有序集合)。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,數 據都是緩衝在記憶體中。區別的是redis會周期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案(這點兒個人覺得redis比memcache 在資料儲存上要安全一些),並且在此基礎上實現了master- slave(主從)同步。

redis的存取效能很高,SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次(速度很爽!)。
Redis針對不同的儲存類型對象提供了不同的命令。
redis目前提供四種資料類型:string,list,set及zset(sorted set)。
string是最簡單的類型,你可以理解成與Memcached一模一個的類型,一個key對應一個value,其上支援的操作與Memcached的操 作類似。但它的功能更豐富。

list是一個鏈表結構,主要功能是push、pop、擷取一個範圍的所有值等等。操作中key理解為鏈表的名字。
set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交並差等操作。操作中key理解為集合的名字。

zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定後,zset會自動重新按新的 值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。

下面提供redis命令:
適合全體類型的命令
EXISTS key 判斷一個鍵是否存在;存在返回 1;否則返回0;
DEL key 刪除某個key,或是一系列key;DEL key1 key2 key3 key4
TYPE key 返回某個key元素的資料類型 ( none:不存在,string:字元,list,set,zset,hash)
KEYS pattern 返回匹配的key列表 (KEYS foo*:尋找foo開頭的keys)
RANDOMKEY 隨機獲得一個已經存在的key,如果當前資料庫為空白,則返回Null 字元串
RENAME oldname newname更改key的名字,新鍵如果存在將被覆蓋
RENAMENX oldname newname 更改key的名字,如果名字存在則更改失敗
DBSIZE返回當前資料庫的key的總數
EXPIRE設定某個key的到期時間(秒),(EXPIRE bruce 1000:設定bruce這個key1000秒後系統自動刪除)注意:如果在還沒有到期的時候,對值進行了改變,那麼那個值會被清除。
TTL尋找某個key還有多長時間到期,返回時間秒
SELECT index 選擇資料庫
MOVE key dbindex 將指定鍵從當前資料庫移到目標資料庫 dbindex。成功返回 1;否則返回0(來源資料庫不存在key或目標資料庫已存在同名key);
FLUSHDB 清空當前資料庫中的所有鍵
FLUSHALL 清空所有資料庫中的所有鍵

處理字串的命令
SET key value 給一個鍵設定字串值。SET keyname datalength data (SET bruce 10 paitoubing:儲存key為burce,字串長度為10的一個字串paitoubing到資料庫),data最大不可超過1G。
GET key擷取某個key 的value值。如key不存在,則返回字串“nil”;如key的值不為字串類型,則返回一個錯誤。

GETSET key value可以理解成獲得的key的值然後SET這個值,更加方便的操作 (SET bruce 10 paitoubing,這個時候需要修改bruce變成1234567890並擷取這個以前的資料paitoubing,GETSET bruce 10 1234567890)
MGET key1 key2 … keyN 一次性返回多個鍵的值

SETNX key value SETNX與SET的區別是SET可以建立與更新key的value,而SETNX是如果key不存在,則建立key與value資料
MSET key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性設定多個鍵和值
MSETNX key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性設定多個鍵和值(目標鍵不存在情況下,如果有一個以上的key已存在,則失敗)
INCR key 自增索引值
INCRBY key integer 令索引值自增指定數值
DECR key 自減索引值
DECRBY key integer 令索引值自減指定數值

處理 lists 的命令
RPUSH key value 從 List 尾部添加一個元素(如序列不存在,則先建立,如已存在同名Key而非序列,則返回錯誤)
LPUSH key value 從 List 頭部添加一個元素
LLEN key 返回一個 List 的長度
LRANGE key start end從自定的範圍內返回序列的元素 (LRANGE testlist 0 2;返回序列testlist前0 1 2元素)
LTRIM key start end修剪某個範圍之外的資料 (LTRIM testlist 0 2;保留0 1 2元素,其餘的刪除)
LINDEX key index返回某個位置的序列值(LINDEX testlist 0;返回序列testlist位置為0的元素)
LSET key index value更新某個位置元素的值
LREM key count value 從 List 的頭部(count正數)或尾部(count負數)刪除一定數量(count)匹配value的元素,返回刪除的元素數量。
LPOP key 彈出 List 的第一個元素
RPOP key 彈出 List 的最後一個元素
RPOPLPUSH srckey dstkey 彈出 _srckey_ 中最後一個元素並將其壓入 _dstkey_頭部,key不存在或序列為空白則返回“nil”

處理集合(sets)的命令(有索引無序序列)
SADD key member增加元素到SETS序列,如果元素(membe)不存在則添加成功 1,否則失敗 0;(SADD testlist 3 /n one)
SREM key member 刪除SETS序列的某個元素,如果元素不存在則失敗0,否則成功 1(SREM testlist 3 /N one)
SPOP key 從集合中隨機彈出一個成員
SMOVE srckey dstkey member 把一個SETS序列的某個元素 移動到 另外一個SETS序列 (SMOVE testlist test 3/n two;從序列testlist移動元素two到 test中,testlist中將不存在two元素)
SCARD key 統計某個SETS的序列的元素數量
SISMEMBER key member 獲知指定成員是否存在於集合中
SINTER key1 key2 … keyN 返回 key1, key2, …, keyN 中的交集
SINTERSTORE dstkey key1 key2 … keyN 將 key1, key2, …, keyN 中的交集存入 dstkey
SUNION key1 key2 … keyN 返回 key1, key2, …, keyN 的並集
SUNIONSTORE dstkey key1 key2 … keyN 將 key1, key2, …, keyN 的並集存入 dstkey
SDIFF key1 key2 … keyN 依據 key2, …, keyN 求 key1 的差集。官方例子:
key1 = x,a,b,c
key2 = c
key3 = a,d
SDIFF key1,key2,key3 => x,b
SDIFFSTORE dstkey key1 key2 … keyN 依據 key2, …, keyN 求 key1 的差集並存入 dstkey
SMEMBERS key 返回某個序列的所有元素
SRANDMEMBER key 隨機返回某個序列的元素

處理有序集合(sorted sets)的命令 (zsets)
ZADD key score member 添加指定成員到有序集合中,如果目標存在則更新score(分值,排序用)
ZREM key member 從有序集合刪除指定成員
ZINCRBY key increment member 如果成員存在則將其增加_increment_,否則將設定一個score為_increment_的成員
ZRANGE key start end 返回升序排序後的指定範圍的成員
ZREVRANGE key start end 返回降序排序後的指定範圍的成員
ZRANGEBYSCORE key min max 返回所有符合score >= min和score <= max的成員 ZCARD key 返回有序集合的元素數量 ZSCORE key element 返回指定成員的SCORE值 ZREMRANGEBYSCORE key min max 刪除符合 score >= min 和 score <= max 條件的所有成員。

使用體會:
個人在覺得 redis速度是不用說了(很快的),但是很消耗實體記憶體,算是redis的一個弊端吧,redis適合資料量比較小速度更新快的類型的網站,比如社區, 不適合資料比較龐大的網站,比如論壇。以前用redis應用的一個論壇文章上,但是因為資料量太大,消耗實體記憶體驚人而放棄了用 redis!

再說說TTSERVER
Tokyo Cabinet 是一個DBM的實現。這裡的資料庫由一系列key-value對的記錄構成。key和value都可以是任意長度的位元組序列,既可以是二進位也可以是字元 串。這裡沒有資料類型和資料表的概念。當做為Hash表資料庫使用時,每個key必須是不同的,因此無法儲存兩個key相同的值。提供了以下存取方法:提 供key,value參數來儲存,按 key刪除記錄,按key來讀取記錄,另外,遍曆key也被支援,雖然順序是任意的不能被保證。這些方法跟Unix標準的DBM,例如GDBM,NDBM 等等是相同的,但是比它們的效能要好得多(因此可以替代它們) 當按B+樹來儲存時,擁用相同key的記錄也能被儲存。像hash表一樣的讀取,儲存,刪除函數也都有提供。記錄按照使用者提供的比較函數來儲存。可以採用 順序或倒序的遊標來讀取每一條記錄。依照這個原理,向前的字串匹配搜尋和整數區間搜尋也實現了。另外,B+樹的事務也是可用的。對於定長的數組,記錄按 自然數來標記儲存。不能儲存key相同的兩條或更多記錄。另外,每條記錄的長度受到限 制。讀取方法和hash表的一樣。 Tokyo Cabinet是用C寫的,同時提供c,perl,ruby,java的API。Tokyo Cabinet在提供了POSIX和C99的平台上都可用,它以GNU Lesser Public License協議發布。

tokyocabinet :一個key-value的DBM資料庫,但是沒有提供網路介面,以下稱TC。
tokyotyrant :是為TC寫的網路介面,他支援memcache協議,也可以通過HTTP操作,以下稱TT。

效能:
Tokyo Cabinet 是日本人 平林幹雄 開發的一款 DBM 資料庫,Tokyo Cabinet基於GNU Lesser General Public License協議發布,採用C語言開發,它可以運行在任何支援C99和POSIX平台上使用。相比一般的DBM資料庫有以下幾個特點:空間小,效率高, 效能高,可靠性高,多種開發語言的支援(現已提供C,Perl,Ruby,Java,Lua的API),支援64位作業系統。該資料庫讀寫非常快,雜湊模 式寫入100萬條資料只需0.643秒,讀取100萬條資料只需0.773秒,是 Berkeley DB 等 DBM 的幾倍。

Tokyo Tyrant 加上 Tokyo Cabinet,構成了一款支援高並發的分布式持久儲存系統,對任何原有Memcached用戶端來講,可以將Tokyo Tyrant看成是一個Memcached,但是,它的資料是可以持久儲存的。這一點,跟新浪的Memcachedb性質一樣。

ttserver和memcache比較:
ttserver 是資料庫,memcached是緩衝。兩者都是儲存<key,value>形式的資料,通過key進行任何操作。ttserver可以將資料 持久化儲存,memcached全部是儲存在記憶體中,memcached會自動刪除到期資料,最長不超過30天。memcached在和一些api配合 時,能自動進行資料的出入序列化,讀取還原序列化。ttserver有主從複製的功能,動作記錄等,這完全是資料庫才有的東西。據說memcached正在 對整體架構做調整,到時候支援plugin機制.會把網路,事件處理,記憶體儲存剝離開來.以後要做基於磁碟的key-value儲存就可以寫一個儲存引擎 就成了。memcached的二次開發又步入一個小高潮。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.