1. Redis簡介
Redis是一個由C語言編寫的锯蛀、開源的(GitHub地址)、基于Key-Value的非關(guān)系型內(nèi)存數(shù)據(jù)庫次慢,由意大利人Salvatore Sanfilippo開發(fā)創(chuàng)造(下附帥照)旁涤。Redis雖基于內(nèi)存但是也可持久化到硬盤翔曲,支持網(wǎng)絡(luò)并且提供多種語言的API。更多關(guān)于Redis的介紹可移步Redis官網(wǎng)(https://redis.io/)劈愚。
2. Redis與其他數(shù)據(jù)庫的對比
與常見的關(guān)系數(shù)據(jù)庫不同(如MySQL瞳遍、SQLServer、Oracle)菌羽,Redis屬于NoSQL數(shù)據(jù)庫即非關(guān)系數(shù)據(jù)庫陣營掠械,(而MongoDB則是介于非關(guān)系與關(guān)系數(shù)據(jù)庫之間)。Redis不使用關(guān)系數(shù)據(jù)庫中的表注祖,它不會預(yù)定義或強制要求用戶對Redis存儲的不同數(shù)據(jù)進行關(guān)聯(lián)猾蒂。
Redis與memcached類似,都是用于存儲鍵值映射是晨,但支持更多的value類型肚菠。而且Redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步罩缴。
以下引用《Redis實戰(zhàn)》中的表格(片段)展示Redis與其他一些數(shù)據(jù)庫的對比
名稱 類型 數(shù)據(jù)存儲選項 查詢類型 附加功能 Redis 使用內(nèi)存存儲(in-memory)的非關(guān)系數(shù)據(jù)庫 字符串蚊逢、列表、集合箫章、散列表烙荷、有序集合 每種數(shù)據(jù)類型都有自己的專屬命令,另外還有批量操作(bulk operation)和不完全(partial)的事務(wù)支持 發(fā)布與訂閱檬寂,主從復(fù)制(master/slave replication)终抽,持久化,腳本(存儲過程焰薄,stored procedure) memcached 使用內(nèi)存存儲的鍵值緩存 鍵值之間的映射 創(chuàng)建命令拿诸、讀取命令、更新命令塞茅、刪除命令及其他幾個命令 以提升性能而設(shè)的多線程服務(wù)器 MySQL 關(guān)系數(shù)據(jù)庫 每個數(shù)據(jù)庫可以包含多個表,每個表可以包含多個行季率;可以處理多個表的視圖(view)野瘦;支持空間(spatial)和第三方擴展 SELECT、INSERT飒泻、UPDATE鞭光、DELETE、函數(shù)泞遗、存儲過程等 支持ACID性質(zhì)(需要使用InnoDB)惰许,主從復(fù)制和主主復(fù)制(master/master replication) MongoDB 使用硬盤存儲(on-disk)的非關(guān)系文檔存儲 每個數(shù)據(jù)庫可以包含多個表,每個表可以包含多個無schema(schema-less)的BSON文檔 創(chuàng)建命令史辙、讀取命令汹买、更新命令佩伤、刪除命令、條件查詢命令等 支持map-reduce操作晦毙,主從復(fù)制生巡,分片,空間索引(spatial index)
3. Redis適用場景
緩存见妒。這應(yīng)該是Redis最常用的使用場景孤荣,可以避免寫入不必要的臨時數(shù)據(jù),也免去了對臨時數(shù)據(jù)進行掃描和刪除的麻煩须揣,進而改善程序性能盐股。
排行榜相關(guān)。Redis的SortedSet(有序集合)數(shù)據(jù)結(jié)構(gòu)能夠輕易的處理排序相關(guān)的計算耻卡,而使用關(guān)系型數(shù)據(jù)庫的ASC遂庄、DESC代價要大些。
計數(shù)器/限速器劲赠。利用Redis中原子性的自增操作涛目,我們可以統(tǒng)計類似用戶點贊數(shù)、用戶訪問數(shù)等凛澎,這類操作如果用MySQL霹肝,頻繁的讀寫會帶來相當大的壓力;限速器比較典型的使用場景是限制某個用戶訪問某個API的頻率塑煎,常用的有搶購時沫换,防止用戶瘋狂點擊帶來不必要的壓力。
集合操作最铁。利用set數(shù)據(jù)結(jié)構(gòu)的一些命令讯赏,比如求交集、并集冷尉、差集等漱挎。可以方便搞定一些共同好友雀哨、共同愛好之類的功能磕谅。
簡單消息隊列,除了Redis自身的發(fā)布/訂閱模式雾棺,我們也可以利用List來實現(xiàn)一個隊列機制膊夹,比如:到貨通知、郵件發(fā)送之類的需求捌浩,不需要高可靠放刨,但是會帶來非常大的DB壓力,完全可以用List來完成異步解耦尸饺。
Session共享进统,以PHP為例助币,默認Session是保存在服務(wù)器的文件中,如果是集群服務(wù)麻昼,同一個用戶過來可能落在不同機器上奠支,這就會導(dǎo)致用戶頻繁登陸;采用Redis保存Session后抚芦,無論用戶落在那臺機器上都能夠獲取到對應(yīng)的Session信息倍谜。
一些頻繁被訪問的數(shù)據(jù),經(jīng)常被訪問的數(shù)據(jù)如果放在關(guān)系型數(shù)據(jù)庫叉抡,每次查詢的開銷都會很大尔崔,而放在redis中,因為redis 是放在內(nèi)存中的可以很高效的訪問 褥民。
此外季春,因為Redis將數(shù)據(jù)存儲在內(nèi)存中,而且發(fā)送給Redis的命令請求并不會經(jīng)過典型的查詢分析器(parser)或者查詢優(yōu)化器(optimizer)進行處理消返,所以對Redis存儲的數(shù)據(jù)執(zhí)行隨機寫的速度總是非常迅速的载弄。
相關(guān)鏈接
Redis官網(wǎng):(https://redis.io/)
Redis開源地址:(https://github.com/antirez/redis)
Redis中文網(wǎng):(http://www.redis.cn/)
======返回目錄======