Redis詳解以及Redis的應(yīng)用場(chǎng)景
Redis簡(jiǎn)介
Redis 是完全開源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫。 Redis 是一個(gè)強(qiáng)大的內(nèi)存型存儲(chǔ),具有豐富的數(shù)據(jù)結(jié)構(gòu),使其可以應(yīng)用于很多方面,包括作為數(shù)據(jù)庫、緩存、消息隊(duì)列等等。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
- Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
- Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
- Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Redis 優(yōu)勢(shì):
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個(gè)操作是原子性的。多個(gè)操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis的5個(gè)常見應(yīng)用場(chǎng)景
如果你的印象中Redis只是一個(gè) key-value 存儲(chǔ),那就錯(cuò)過了Redis很多強(qiáng)大的功能,下面就是實(shí)際應(yīng)用場(chǎng)景中5個(gè)最普遍的案例。
1. 全頁面緩存
如果你使用的是服務(wù)器端內(nèi)容渲染,你又不想為每個(gè)請(qǐng)求重新渲染每個(gè)頁面,就可以使用 Redis 把常被請(qǐng)求的內(nèi)容緩存起來,能夠大大的降低頁面請(qǐng)求的延遲,已經(jīng)有很多框架用Redis來緩存頁面,這就是頁面靜態(tài)化的一種方式。
2. 排行榜
Redis 基于內(nèi)存,可以非常快速高效的處理增加和減少的操作,相比于使用 SQL 請(qǐng)求的處理方式,性能的提升是非常巨大的。
Redis 的有序集合可以輕松實(shí)現(xiàn)“從一個(gè)大型列表中取得排名***的N個(gè)元素”,毫秒級(jí),而且非常簡(jiǎn)單。
3. Session 存儲(chǔ)
這可能是應(yīng)用最廣的點(diǎn)了,相比較于類似 memcache 的 session 存儲(chǔ),Redis 具有緩存數(shù)據(jù)持久化的能力,當(dāng)緩存因出現(xiàn)問題而重啟后,之前的緩存數(shù)據(jù)還在那兒,這個(gè)就比較實(shí)用,避免了因?yàn)閟ession突然消失帶來的用戶體驗(yàn)問題。
4. 隊(duì)列
例如 email 的發(fā)送隊(duì)列、等待被其他應(yīng)用消費(fèi)的數(shù)據(jù)隊(duì)列,Redis 可以輕松而自然的創(chuàng)建出一個(gè)高效的隊(duì)列。
5.發(fā)布/訂閱
pub/sub 是 Redis 內(nèi)置的一個(gè)非常強(qiáng)大的特性,例如可以創(chuàng)建一個(gè)實(shí)時(shí)的聊天系統(tǒng)、社交網(wǎng)絡(luò)中的通知觸發(fā)器等等。