1. 程式人生 > >redis 的應用場景

redis 的應用場景

一、 redis 特點

  • 所有資料儲存在記憶體中,高速讀寫

  • 提供豐富多樣的資料型別:string、 hash、 set、 sorted set、bitmap、hyperloglog

  • 提供了 AOF 和 RDB 兩種資料的持久化儲存方式,保證了 Redis 重啟後資料不丟失

  • Redis 的所有操作都是原子性的,還支援對幾個操作合併後的原子性操作,支援事務

通常我們都把資料存到關係型資料庫中,但為了提升應用的效能,我們應該把訪頻率高且不會經常變動的資料快取到記憶體中。。Redis 沒有像 MySQL 這類關係型資料庫那樣強大的查詢功能,需要考慮如何把關係型資料庫中的資料,合理的對應到快取的 key-value 資料結構中。

二、 設計 Redis Key

分段設計法——使用冒號把 key 中要表達的多種含義分開表示,步驟如下:

  1. 把表名轉化為 key 字首

  2. 主鍵名(或其他常用於搜尋的欄位)

  3. 主鍵值

  4. 要儲存的欄位。

eg. 使用者表(user)

id name email
1 zj [email protected]
2 ai [email protected]

這個簡單的表可能經常會有這個的需求:>根據使用者 id 查詢使用者郵箱地址,可以選擇把郵箱地址這個資料存到 redis 中:

  1. set user:id:1:email [email protected].com;

  2. set user:id:2:email [email protected].com;

三、 String資料型別的應用場景

1.簡介

string 型別是 Redis 中最基本的資料型別,最常用的資料型別,甚至被很多玩家當成 redis 唯一的資料型別去使用。string 型別在 redis 中是二進位制安全(binary safe)的,這意味著 string 值關心二進位制的字串,不關心具體格式,你可以用它儲存 json 格式或 JPEG 圖片格式的字串。

2.資料模型

string 型別是基本的 Key-Value 結構,Key 是某個資料在 Redis 中的唯一標識,Value 是具體的資料。

Key Value
‘name’ ‘redis’
‘type’ ‘string’

3. 應用場景

(1) 儲存 MySQL 中某個欄位的值

把 key 設計為 表名:主鍵名:主鍵值:欄位名

eg.

  1. set user:id:1:email [email protected].com

(2) 儲存物件

string 型別支援任何格式的字串,應用最多的就是儲存 json 或其他物件格式化的字串。(這種場景下推薦使用 hash 資料型別)

  1. set user:id:1[{"id":1,"name":"zj","email":"[email protected]"},{"id":1,"name":"zj","email":"[email protected]"}]

(3) 生成自增 id

當 redis 的 string 型別的值為整數形式時,redis 可以把它當做是整數一樣進行自增(incr)自減(decr)操作。由於 redis 所有的操作都是原子性的,所以 不必擔心多客戶端連線時可能出現的事務問題。

四、hash 資料型別的應用場景

1.簡介

hash 型別很像一個關係型資料庫的資料表,hash 的 Key 是一個唯一值,Value 部分是一個 hashmap 的結構。 

2.資料模型

假設有一張資料庫表如下:

id name type
1 redis hash

如果要用 redis 的 hash 結構儲存,資料模型如下:

hash資料型別在儲存上述型別的資料時具有比 string 型別更靈活、更快的優勢,具體的說,使用 string 型別儲存,必然需要轉換和解析 json 格式的字串,即便不需要轉換,在記憶體開銷方面,還是 hash 佔優勢。

3.應用場景

hash 型別十分適合儲存物件類資料,相對於在 string 中介紹的把物件轉化為 json 字串儲存,hash 的結構可以任意新增或刪除‘欄位名’,更加高效靈活。

  1. hset user:1 name zj email [email protected].com

五、list 資料型別的應用場景

1.簡介

list 是按照插入順序排序的字串連結串列,可以在頭部和尾部插入新的元素(雙向連結串列實現,兩端新增元素的時間複雜度為 O(1))。插入元素時,如果 key 不存在,redis 會為該 key 建立一個新的連結串列,如果連結串列中所有的元素都被移除,該 key 也會從 redis 中移除。

2.資料模型

常見操作時用 lpush 命令在 list 頭部插入元素, 用 rpop 命令在 list 尾取出資料。

3. 應用場景

(1) 訊息佇列

redis 的 list 資料型別對於大部分使用者來說,是實現佇列服務的最經濟,最簡單的方式。 

(2) “最新內容”

因為 list 結構的資料查詢兩端附近的資料效能非常好,所以適合一些需要獲取最新資料的場景,比如新聞類應用的 “最近新聞”。 

4.優化建議

list 是連結串列結構,所有如果在頭部和尾部插入資料,效能會非常高,不受連結串列長度的影響;但如果在連結串列中插入資料,效能就會越來越差。

六、set 資料型別的應用場景

1.簡介

  • set 資料型別是一個集合(沒有排序,不重複),可以對 set 型別的資料進行新增、刪除、判斷是否存在等操作(時間複雜度是 O(1) )

  • set 集合不允許資料重複,如果新增的資料在 set 中已經存在,將只保留一份。

  • set 型別提供了多個 set 之間的聚合運算,如求交集、並集、補集,這些操作在 redis 內部完成,效率很高。

2.資料模型

3.應用場景

set 型別的特點是——不重複且無序的一組資料,並且具有豐富的計算功能,在一些特定的場景中可以高效的解決一般關係型資料庫不方便做的工作。

1.“共同好友列表”

社交類應用中,獲取兩個人或多個人的共同好友,兩個人或多個人共同關注的微博這樣類似的功能,用 MySQL 的話操作很複雜,可以把每個人的好友 id 存到集合中,獲取共同好友的操作就可以簡單到一個取交集的命令就搞定。

  1. // 這裡為了方便閱讀,把 id 替換成姓名

  2. sadd user:wade james melo paul kobe

  3. sadd user:james wade melo paul kobe

  4. sadd user:paul wade james melo kobe

  5. sadd user:melo wade james paul kobe

  6. // 獲取 wade 和 james 的共同好友

  7. sinter user:wade user:james

  8. /* 輸出:

  9. *      1) "kobe"

  10. *      2) "paul"

  11. 相關推薦

    分布式緩存Redis應用場景解析

    Redis 分布式 緩存 Redis的應用場景非常廣泛。雖然Redis是一個key-value的內存數據庫,但在實際場景中,Redis經常被作為緩存來使用,如面對數據高並發的讀寫、海量數據的讀寫等。舉個例子,A網站首頁一天有100萬人訪問,其中有一個“積分商城”的板塊,要直接從數據庫查詢,那麽一天

    NoSQL - Redis應用場景

    返回 變體 性問題 概念 update 做了 點擊 ren 內部存儲 問題的引入 DB(Oracle、MySQL、Postgresql等)+Memcached 這種架構模式在我們生產環境中十分常見,一般我們通過Memcached將熱點數據加載到cache,應用層首先向Mem

    Redis 應用場景

    快取 作為Key-value形態的記憶體資料庫,Redis最先會被想到的應用場景便是作為資料快取。而使用Redis快取資料非常簡單,只需要通過String型別將序列化後的物件存起來即可,不過也有一些需要注意的地方: 必須保證不同物件的key不會重複,並且使key儘

    redis應用場景

       毫無疑問,Redis開創了一種新的資料儲存思路,使用Redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用Redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。希望你喜歡這個比喻。 一、Redis常用資料型別

    Redis應用場景解析

    Redis特性: 讀寫效能優異(快取) 持久化(兩種,RDB和AOF) 資料型別豐富(5種) 單執行緒 資料自動過期 高效能適合當做快取 快取是Redis最常見的應用場景,之所有這麼使用,主要是因為Redis讀寫效能優異。而且逐漸有取代memcached,成為首選服務端快取的元

    詳解 Redis 應用場景應用例項

    Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。 1. MySql+Memcached架構的問題 實際MySQL是適合進行海量資料儲存的,通過Mem

    Redis應用場景分析

    在上一篇文章《Redis資料結構探究》中,對Redis的五種資料結構和它們的底層實現進行了分析,這篇文章主要結合近期應用Redis的經歷,對Redis的使用場景做出分析。 在上篇文章中,簡單總結了Redis有以下應用場景: 1、快取服務 這是Redis應用

    Redis應用場景介紹

    昨天和一位前輩聊天,談到關於redis到場景問題,這裡做一下小結。 Redis呢,百科這樣說,是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 在官方上講的很仔細,這裡就簡單說一下redis幾個特點,因

    ehcache、redis應用場景比較

    應用場景: ehcache直接在jvm虛擬機器中快取,速度快,效率高;但是快取共享麻煩,叢集分散式應用不方便。 redis是通過socket訪問到快取服務,效率比ecache低,比資料庫要快很多

    redisredis應用場景,快取的各種問題

    如果你還不知道redis的基本命令與基本使用方法,請看  【redis】redis基礎命令學習集合 快取 redis還有另外一個重要的應用領域——快取 引用來自網友的圖解釋快取在架構中的位置 預設情況下,我們的服務架構如下圖,客戶端請求service,然後servi

    PHP(Mysql/Redis)消息隊列的介紹及應用場景案例--轉載

    接收 根據 好友 學習 range nod 存取 情況下 ble 鄭重提示:本博客轉載自好友博客,個人覺得寫的很牛逼所以未經同意強行轉載,原博客連接 http://www.cnblogs.com/wt645631686/p/8243438.html 歡迎訪問 在進行網站設計

    MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景

    tel val 開發 一段時間 2.4 緩沖區 sta 位置 date NoSQL的四大種類 NoSQL數據庫在整個數據庫領域的江湖地位已經不言而喻。在大數據時代,雖然RDBMS很優秀,但是面對快速增長的數據規模和日漸復雜的數據模型,RDBMS漸漸力不從心,無法應對很多數據

    Redis簡介及應用場景

    sub ffi Redis介紹 comment 插入數據 數據 tag l數據庫 排序 一丶Redis介紹 Redis是一個開源的 key—value型 單線程 數據庫,支持string、list、set、zset和hash類型數據。 默認端口:6379 默認數據庫數量:1

    MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景 NoSQL的四大種類

    NoSQL資料庫在整個資料庫領域的江湖地位已經不言而喻。在大資料時代,雖然RDBMS很優秀,但是面對快速增長的資料規模和日漸複雜的資料模型,RDBMS漸漸力不從心,無法應對很多資料庫處理任務,這時NoSQL憑藉易擴充套件、大資料量和高效能以及靈活的資料模型成功的在資料庫領域站穩了腳跟。 目前大家

    Redis特性和應用場景

    Redis特性 速度快 Redis使用標準C編寫實現,而且將所有資料載入到記憶體中,所以速度非常快。官方提供的資料表明,在一個普通的Linux機器上,Redis讀寫速度分別達到81000/s和110000/s。 資料結構 可以將Redis看做“資料結構伺服器”。目前,Redis支援5

    nosql資料庫:mongodb,redis,memcached,其優缺點和使用應用場景

    1.mongodb (1)是文件型的非關係型資料庫,使用bson結構。其優勢在於查詢功能比較強大,能儲存海量資料,缺點是比較消耗記憶體。 (2)一般可以用來存放評論等半結構化資料,支援二級索引。 適合儲存json型別資料,不經常變化。 (3)舉例: a.網站資料:非常適合實時的插

    redis的資料型別和各自的應用場景

    Redis最為常用的資料型別主要有以下:String 、Hash、List、Set、Sorted set、pub/sub、Transactions String:Strings 資料結構是簡單的key-value型別,value其實不僅是String,也可以是數字.常用命令:  se

    [redis]redis五種資料型別和應用場景

    一、String(字串)字串型別是redis最基礎的資料結構,首先鍵是字串型別,而且其他幾種結構都是在字串型別基礎上構建的,所以字串型別能為其他四種資料結構的學習尊定基礎。字串型別實際上可以是字串(簡單的字串、複雜的字串(xml、json)、數字(整數、浮點數)、二進位制(圖片、音訊、視訊)),但最大不能超過

    Redis概念及應用場景

    不管你是從事Python、Java、Go、PHP、Ruby等等… Redis都應該是一個比較熟悉的中介軟體。而大部分經常寫業務程式碼的程式設計師,實際工作中或許只用到了set value、get value兩個操作。對Redis缺乏一個整體的認識。今天就來對Redis的常見問題做一個總結。希望能夠幫

    Redis的伺服器安裝與視覺化工具安裝和使用以及應用場景

    在Windows下使用redis 在cmd中執行 通過配置檔案啟動redis伺服器 驗證 3、如果視覺化工具連線不上redis服務端。檢查你是否設定了密碼 4、redis特性: Redis不支援自定義資料庫的名字,每個資料庫都以編號命名,開發者必須自