1. 什么是Redis鼎文?
Redis 是一個基于內存的高性能key-value數(shù)據(jù)庫周偎。
2. Redis的特點
Redis本質上是一個Key-Value類型的內存數(shù)據(jù)庫胡嘿,很像memcached勿侯,整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內存當中進行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進行保存。因為是純內存操作,Redis的性能非常出色禀横,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB缭嫡。
Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存多種數(shù)據(jù)結構,此外單個value的最大限制是1GB纵诞,不像 memcached只能保存1MB的數(shù)據(jù)浙芙,因此Redis可以用來實現(xiàn)很多有用的功能节仿,比方說用他的List來做FIFO雙向鏈表矾瘾,實現(xiàn)一個輕量級的高性 能消息隊列服務傅寡,用他的Set可以做高性能的tag系統(tǒng)等等芜抒。另外Redis也可以對存入的Key-Value設置expire時間,因此也可以被當作一 個功能加強版的memcached來用屯耸。
Redis的主要缺點是數(shù)據(jù)庫容量受到物理內存的限制铺韧,不能用作海量數(shù)據(jù)的高性能讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運算上前酿。
3. 使用Redis有哪些好處
- 速度快丙挽,因為數(shù)據(jù)存在內存中平窘,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復雜度都是O(1)
- 支持豐富數(shù)據(jù)類型,支持string芒率,list德玫,set,sorted set,hash
- 支持事務查刻,操作都是原子性谜疤,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行
- 豐富的特性:可用于緩存,消息膘螟,按key設置過期時間净当,過期后將會自動刪除
4. Redis最適合的場景
Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-backed的功能蜜猾,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問赶么,似乎Redis更像一個加強版的Memcached,那么何時使用Memcached,何時使用Redis呢?
如果簡單地比較Redis與Memcached的區(qū)別缕坎,大多數(shù)都會得到以下觀點:
1荷腊、Redis不僅僅支持簡單的k/v類型的數(shù)據(jù)香府,同時還提供list,set擒抛,zset歧沪,hash等數(shù)據(jù)結構的存儲撵孤。
2 咬清、Redis支持數(shù)據(jù)的備份画髓,即master-slave模式的數(shù)據(jù)備份。
3 、Redis支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保持在磁盤中躁劣,重啟的時候可以再次加載進行使用。
(1)溉浙、會話緩存(Session Cache)
最常用的一種使用Redis的情景是會話緩存(session cache)惊奇。用Redis緩存會話比其他存儲(如Memcached)的優(yōu)勢在于:Redis提供持久化祖秒。當維護一個不是嚴格要求一致性的緩存時抬纸,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現(xiàn)在,他們還會這樣嗎?
幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當?shù)氖褂肦edis來緩存會話的文檔膀懈。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件牢撼。
(2)纷责、全頁緩存(FPC)
除基本的會話token之外,Redis還提供很簡便的FPC平臺∥醪危回到一致性問題,即使重啟了Redis實例,因為有磁盤的持久化融痛,用戶也不會看到頁面加載速度的下降责语,這是一個極大改進白筹,類似PHP本地FPC它呀。
再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存后端支救。
此外贬堵,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis敞掘,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。
(3)赫冬、隊列
Reids在內存存儲引擎領域的一大優(yōu)點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平臺來使用风范。Redis作為隊列使用的操作锌半,就類似于本地程序語言(如Python)對 list 的 push/pop 操作冗澈。
如果你快速的在Google中搜索“Redis queues”腐缤,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創(chuàng)建非常好的后端工具窒朋,以滿足各種隊列需求抵赢。例如欺劳,Celery有一個后臺就是使用Redis作為broker,你可以從這里去查看瓣俯。
(4)杰标、排行榜/計數(shù)器
Redis在內存中對數(shù)字進行遞增或遞減的操作實現(xiàn)的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單彩匕,Redis只是正好提供了這兩種數(shù)據(jù)結構腔剂。所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為“user_scores”驼仪,我們只需要像下面一樣執(zhí)行即可:
當然掸犬,這是假定你是根據(jù)你用戶的分數(shù)做遞增的排序。如果你想返回用戶及用戶的分數(shù)绪爸,你需要這樣執(zhí)行:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games就是一個很好的例子湾碎,用Ruby實現(xiàn)的,它的排行榜就是使用Redis來存儲數(shù)據(jù)的奠货,你可以在這里看到介褥。
(5)、發(fā)布/訂閱
最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能递惋。發(fā)布/訂閱的使用場景確實非常多柔滔。我已看見人們在社交網(wǎng)絡連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器萍虽,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)>取(不,這是真的杉编,你可以去核實)超全。
Redis提供的所有特性中,我感覺這個是喜歡的人最少的一個邓馒,雖然它為用戶提供如果此多功能嘶朱。