Redis 資料庫 ABC

來源:互聯網
上載者:User

標籤:rddb   memory data base   

什麼是記憶體資料庫?


傳統的資料庫資料都是儲存在磁碟上,因而叫做Disk-Resident DataBase。 顯而易見,基於這種資料庫,

資料苦需要頻繁地訪問磁碟來存取資料。 現在隨著DRAM成本的降低,系統記憶體的容量越來越大,為了提高訪問資料的效能,出現了一種資料都存放在記憶體的資料庫,這就是記憶體資料庫。


記憶體資料庫有何特點優點?

除了資料存取更快之外,記憶體資料庫一般還重新設計了資料緩衝、排序演算法、並行操作等方面,因而其資料處理速度也會比DRDB快很多,一般在10倍上。


Redis資料庫和其他資料庫的比較?

常用的記憶體資料庫有SQlite/Redis/Altibase/Oracl‘s Berkely DB and TimesTen和extreamDB。

其中SQlite是一個小型的C程式庫,實現了獨立的,可嵌入的,零配置的SQL資料庫引擎。 RdisRedis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關聯式資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等用戶端,使用很方便。Altibase代表記憶體資料管理系統的最新技術,是一個在事務優先的環境中提供高效能和高可用性的軟體解決方案。Altibase提供極限效能、容錯能力和交易管理的方便性,特別是在通訊、網上銀行、證券交易、即時應用和嵌入式系統領域。Oracle Berkeley DB是Oracle 收購了開來源資料庫廠商後推出的產品,其前身是Berkeley DB,它為開發人員提供了無需管理的快速、可靠的本地持久性。Oracle Berkeley DB系列通常部署為“前沿”資料庫,為不需要 SQL 的應用程式用例提供很高的效能、可靠性、延展性以及可用性。Oracle記憶體資料庫 TimesTen 是一個針對記憶體進行了最佳化的關聯式資料庫,它為應用程式提供了當今即時企業和行業(如電信、資本市場和國防)所需的即時響應性和非常高的輸送量。


由於Redis資料庫和C/C++介面的便捷, 實際項目中我們採用了Redis資料庫。因而下面以Redis資料庫為例,分析一下它主要的操作方法和介面函數。Redis資料提供了多種使用命令,這些命令是實現基於Rdis編程的基礎,下面列出了一些常用的命令:


list表相關命令:

LRANGE key star stp返回索引從star到stp之間的所有元素(包含兩端的元素);

LRANGE numbers -2 -1"-1"表示最右邊第一個元素,"-2"表示最右邊第二個元素;

LREM key count value(LREM numbers -1 2)LREM命令會刪除列表中前count個值為value的元素;

LINDEX key index(LINDEX numbers -1)index是負數則表示從右邊開始計算的索引;

LSET key index value(LSET numbers 1 7)設定第一個數為7;

LTRIM key start endLTRIM命令可以刪除指定索引範圍之外的所有元素;

LPUSH names "name1" "name2" "name3" "name4"左邊加入list;

RPUSH names "name1" "name2"右邊加入list;

LPOP names左邊彈出一個值;

RPOP names右邊彈出一個值;

LLEN names擷取總長度;

 

set集合相關操作命令:

SADD key member [member …]SADD命令用來向集合中增加一個或多個元素,如果鍵不存在則會自動建立。

SREM key member [member …]SREM命令用來從集合中刪除一個或多個元素,並返回刪除成功的個數;

SMEMBERS keySMEMBERS命令會返回集合中的所有元素;

SISMEMBER key member判斷元素是否在集合中;

SDIFF seta setbseta-setb;

SINTER seta setbSINTER命令用來對多個集合執行交集運算;

SUNION seta setbUNION命令用來對多個集合執行並集運算;

SCARD keySCARD命令用來獲得集合中的元素個數;

SDIFFSTORE destination key [key …]

SINTERSTORE destination key [key …]

SUNIONSTORE destination key [key …]

SRANDMEMBER key [count]隨機獲得集合中的元素(count個);

SPOP key從集合中隨機彈出一個元素;


單索引值相關命令:

SET name "hello"設定值;

GET name擷取值;

APPEND name "world"擴充值; 

SRTLEN name值的長度;

DEL name刪除欄位;


hash表相關命令:

MSET name1 "hello" name2 "world"同時設定兩個值;

MGET name1 name2同時擷取兩個值;

HSET car name "bmw"設定hash表值

HGET car name擷取單個hash值

HMSET car price 1250 speed 1000設定多個索引值

HMGET car price speed擷取多個索引值

HGETALL car擷取所有屬性和值

HEXISTS car price判斷是否存在

HDEL car price刪除hash索引值

HKEYS car顯示所有的hash建

HVALS car顯示所有的hash值

HLEN car擷取hash的索引值對數


sorted set有序集相關操作命令:

ZADD key score member [score member …](ZADD scoreboard 89 Tom 67 Peter 100 David)



如何在代碼中使用Redis資料庫?

1.下載原始碼: git clone https://github.com/redis/hiredis

2.cd hiredis && make && sudo make install

如果看到有下面的輸出,就表示安裝完成:

[[email protected] hiredis]# make install

mkdir -p /usr/local/include/hiredis /usr/local/lib

cp -a hiredis.h async.h read.h sds.h adapters /usr/local/include/hiredis

cp -a libhiredis.so /usr/local/lib/libhiredis.so.0.13

cd /usr/local/lib && ln -sf libhiredis.so.0.13 libhiredis.so

cp -a libhiredis.a /usr/local/lib

mkdir -p /usr/local/lib/pkgconfig

cp -a hiredis.pc /usr/local/lib/pkgconfig

3.編程

由於Redis資料庫是基於索引值二元組,任何一條記錄中的每個元素都具有這兩個屬性,因此在程式中調用Redis之前,

需要設計並定義好業務資料在資料庫中的組織形式。這就要求對下面這些問題有明確的回答:

1.什麼作為鍵?

2.每條記錄有哪些屬性或者叫子鍵?

3.資料之間如何關聯?

4.用什麼命令去建立索引值、存取期望的資料?

一旦弄清楚上面的所有問題之後,我們只需要在應用程式中從/usr/local/include/hiredis下include依賴的標頭檔,

在程式碼中調用上面列出的命令,然後在最後makefile的連結階段加上-lhiredis來指定連結到libhiredis.so動態庫,

就能編譯產生期望的可執行檔。


注意容易忽視的一點是: 最後產生了應用程式後,程式還不能馬上運行,因為Redis資料庫是基於用戶端伺服器模型,還需要啟動redis-server服務,才能保證所有的redis命令能夠執行。

   


參考文檔和連結: 

http://www.cnblogs.com/newstart/archive/2013/01/06/2847067.html

http://www.linuxidc.com/Linux/2014-12/111009.htm

https://github.com/redis/hiredis

http://baike.baidu.com/view/4595959.htm

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E5%86%85%E5%AD%98%E6%95%B0%E6%8D%AE%E5%BA%93&rsv_pq=b5a65a6c00c862ff&rsv_t=8e86C%2BBcvQ12Kl8Ujg97ZB%2F7esbXF9rV6PNt78RHsp6seDFe2kEvjcl6MH8&rsv_enter=1&rsv_sug3=9&rsv_sug1=9&rsv_sug7=100


本文出自 “儲存之廚” 部落格,請務必保留此出處http://xiamachao.blog.51cto.com/10580956/1771278

Redis 資料庫 ABC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.