概念
概念: redis是一 款高性能的NOSQL系列的非關(guān)系型數(shù)據(jù)庫
什么是NOSQL
NOSQL(NOSQL = Not only SQL), 意即“不僅僅是SQL",是一項全新的數(shù)據(jù)庫理念,泛指非關(guān)系型的數(shù)據(jù)庫舀寓。
隨著互聯(lián)網(wǎng)web2. 0網(wǎng)站的興起胆数,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2. 0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2. 0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心互墓,暴露了很多難以克服的問題必尼,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NOSQL 數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大故據(jù)應(yīng)用難題判莉。
NOSQL 和關(guān)系型數(shù)據(jù)庫比較
優(yōu)點:
- 成本: nosql數(shù)據(jù)庫簡單易部署豆挽,基本都是開源軟件,不需要像使用oracle那樣花費大量成本購買使用券盅,相比關(guān)系型數(shù)據(jù)庫價格便宜帮哈。
- 查詢速度: nosql數(shù)據(jù)庫將數(shù)據(jù)存儲于緩存之中,關(guān)系型數(shù)據(jù)庫將數(shù)據(jù)存儲在硬盤中锰镀,自然查詢速度遠不及nosql數(shù)據(jù)庫娘侍。
- 存儲數(shù)據(jù)的格式: nosql的存儲格式是key,value形式,文檔形式泳炉、圖片形式等等憾筏,所以可以存儲基礎(chǔ)類型以及對象或者是集合等各種格式,而數(shù)據(jù)庫則只支持基礎(chǔ)類型花鹅。
- 擴展性:關(guān)系型數(shù)據(jù)庫有類似join這樣的多表查詢機制的限制導(dǎo)致擴展很艱難氧腰。
缺點:
- 維護的工具和資料有限,因為nosql是屬于新的技術(shù)刨肃,不能和關(guān)系型數(shù)據(jù)庫10幾年的技術(shù)同日而語容贝。
- 不提供對sql的支持,如果不支持sql這樣的工業(yè)標(biāo)準(zhǔn)之景,將產(chǎn)生一定用戶的學(xué) 習(xí)和使用成本斤富。
- 不提供關(guān)系型數(shù)據(jù)庫對事務(wù)的處理。
非關(guān)系型數(shù)據(jù)庫的優(yōu)勢:
- 性能NOSQL是基于鍵值對的锻狗,可以想象成表中的主鍵和值的對應(yīng)關(guān)系满力,而且不需要經(jīng)過SQL層的解析,所以性能非常高轻纪。
- 可擴展性同樣也是因為基于鍵值對油额,數(shù)據(jù)之間沒有耦合性,所以非常容易水平擴展刻帚。
關(guān)系型數(shù)據(jù)庫的優(yōu)勢 :
- 復(fù)雜查詢可以用SQL語句方便的在一個表以及多個表之間做非常復(fù)雜的數(shù)據(jù)查詢潦嘶。
- 事務(wù)支持使得對于安全性能很高的數(shù)據(jù)訪問要求得以實現(xiàn)。對于這兩類數(shù)據(jù)庫崇众,對方的優(yōu)勢就是自己的弱勢,反之亦然掂僵。
總結(jié)
關(guān)系型數(shù)據(jù)庫與NOSQL數(shù)據(jù)庫并非對立而是互補的關(guān)系,即通常情況下使用關(guān)系型數(shù)據(jù)庫顷歌,在適合使用NOSQL的時候使用NOSQL數(shù)據(jù)庫,讓NOSQL數(shù)據(jù)庫對關(guān)系型數(shù)據(jù)庫的不足進行彌補锰蓬。
一般會將數(shù)據(jù)存 儲在關(guān)系型數(shù)據(jù)庫中,在nosql 數(shù)據(jù)庫中備份存儲關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)
主流的NOSQL產(chǎn)品
- 鍵值(Key-Value )存儲數(shù)據(jù)庫
- 相關(guān)產(chǎn)品: Tokyo Cabinet/Tyrant. Redis. Voldemort. Berkeley DB
- 典型應(yīng)用:內(nèi)容緩存眯漩,主要用于處理大量數(shù)據(jù)的高訪問負載芹扭。
- 數(shù)據(jù)模型:一系列鍵值對
- 優(yōu)勢:快速查詢
- 劣勢:存儲的數(shù)據(jù)缺少結(jié)構(gòu)化
-
列存儲數(shù)據(jù)庫
- 相關(guān)產(chǎn)品: Cassandra, HBase, Riak
- 典型應(yīng)用:分布式的文件系統(tǒng)
- 數(shù)據(jù)模型:以列簇式存儲麻顶,將同一列數(shù)據(jù)存在一起
- 優(yōu)勢:查找速度快,可擴展性強舱卡,更容易進行分布式擴展
- 劣勢:功能相對局限
-
文檔型數(shù)據(jù)庫
- 相關(guān)產(chǎn)品: CouchDB. MongoDB
- 典型應(yīng)用: Web應(yīng)用(與Key-Value類似辅肾,Value是結(jié)構(gòu)化的)
- 數(shù)據(jù)模型: 一系列鍵值對
- 優(yōu)勢:數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格
- 劣勢:查詢性能不高,而且缺乏統(tǒng)一的查詢語法
-
圖形(Graph)數(shù)據(jù)庫
- 相關(guān)數(shù)據(jù)庫: Ne04J轮锥、InfoGrid. Infinite Graph
- 典型應(yīng)用:社交網(wǎng)絡(luò)
- 數(shù)據(jù)模型:圖結(jié)構(gòu)
- 優(yōu)勢:利用圖結(jié)構(gòu)相關(guān)算法宛瞄。
- 劣勢:需要對整個圖做計算才能得出結(jié)果,不容易做分布式的集群方案交胚。
什么是Redis
Redis是用C語言開發(fā)的一個開源的高性能鍵值對(key-value) 數(shù)據(jù)庫份汗,官方提供測試數(shù)據(jù), 50個并發(fā)執(zhí)行100000個請求,讀的速度是110000次/s蝴簇,寫的速度是81000次/s杯活,且Redis通過提供多種鍵值故據(jù)類型來適應(yīng)不同場景下的存儲需求,目前為止Redis支持的鍵值數(shù)據(jù)類型如下:
- 字符串類型string
- 哈希類型hash
- 列表類型list
- 集合類型set
- 有序集合類型sortedset
redis的應(yīng)用場景
- 緩存(數(shù)據(jù)查詢熬词、短連接旁钧、新聞內(nèi)容、商品內(nèi)容等等)
- 聊天室的在線好友列表
- 任務(wù)隊列互拾。(秒殺歪今, 搶購、12306等等)
- 應(yīng)用排行榜
- 網(wǎng)站訪問統(tǒng)計
- 數(shù)據(jù)過期處理(可以精確到毫秒)
- 分布式集群架構(gòu)中的session分副
redis命令操作
redis數(shù)據(jù)結(jié)構(gòu):
redis存儲的是:key,value格式的數(shù)據(jù)颜矿,其中key都是字符串寄猩,value有五種不同的數(shù)據(jù)結(jié)構(gòu)
- 字符串類型 sting
- 哈希類型 hash:map格式
- 列表結(jié)構(gòu) list:linkedlist格式,支持重復(fù)元素
- 集合類型 set:不允許重復(fù)元素
- 有序集合類型 sortedsed:不允許重復(fù)元素骑疆,且元素有序
字符串類型
- 存儲:set key value
- 獲忍锲:get key
- 刪除:del key
哈希類型 hash
存儲:hset key field value
-
獲取:
- hget key field: 獲取指定的field對應(yīng)的值
- hgetall key :獲取所有的field和value
刪除:hdel key field
列表類型list
可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
-
添加:
- lpush key value: 將元素加入列表左表
- rpush key value: 將元素加入列表右表
獲取
- lrange key start end: 范圍獲取
- 刪除:
- lpop key :刪除列表最左邊元素箍铭,并將元素返回
- rpop key :刪除列表最右邊元素泊柬,并將元素返回
集合類型set:
不允許重復(fù)元素
- 存儲:sadd key value
- 獲取:smembers key :獲取set集合所有元素
- 刪除:srem key value: 刪除set集合中的某個元素
有序集合類型 sortedset
不允許重復(fù)元素诈火,且元素有序
- 存儲:zadd key score value
- 獲仁蘖蕖:zrange key start end
- 刪除:zrem key value