1.Redis概述redis
所謂Redis全稱爲REmoteDIctionaryServer(遠程字典服務器)數據庫
是徹底開源免費的,用C語言編寫的,遵照BSD協議,是一個高性能的(key/value)分佈式內存數據庫,基於內存運行並支持持久化的NoSQL數據庫,是當前最熱門的NoSql數據庫之一,也被人們稱爲數據結構服務器緩存
2.Redis三個特色服務器
1).Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用網絡
2). Redis不單單支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲session
3).Redis支持數據的備份,即master-slave模式的數據備份數據結構
4).支持事務併發
3.Redis的優點異步
1)性能極高–Redis能讀的速度是110000次/s,寫的速度是81000次/s。分佈式
2)豐富的數據類型– Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。
3)原子– Redis的全部操做都是原子性的,同時Redis還支持對幾個操做合併後的原子性執行.(事務)
4)豐富的特性:可用於緩存,消息,按key設置過時時間,過時後將會自動刪除
5)Redis支持 publish/subscribe, 通知等
4.Redis的劣勢
1)Redis 事務支持比較弱,只能保證事務中的每一個操做連續執行
2)Redis只能使用單線程,性能受限於CPU性能
3)redis數據量較小的更性能操做和運算上
5.Redis運用場景
1)內存存儲和持久化:支持異步將內存中的數據寫到硬盤上,同時不影響繼續服務
2)取最新N個數據的操做如:能夠將最新的10條評論的ID放在Redis的List集合裏面
3)模擬相似於HttpSession這種須要設定過時時間的功能
4)緩存:緩存如今幾乎是全部中大型網站都在用的必殺技,合理的利用緩存不只可以提高網站訪問速度,還能大大下降數據庫的壓力。Redis提供了鍵過時功能,也提供了靈活的鍵淘汰策略;
5)排行榜:不少網站都有排行榜應用的,如京東的月度銷量榜單、商品按時間的上新排行榜等。Redis提供的有序集合數據類構能實現各類複雜的排行榜應用。
6)計數器:什麼是計數器,如電商網站商品的瀏覽量、視頻網站視頻的播放數等。爲了保證數據實時效,每次瀏覽都得給+1,併發量高時若是每次都請求數據庫操做無疑是種挑戰和壓力。Redis提供的incr命令來實現計數器功能,內存操做,性能很是好;
7)分佈式會話:集羣模式下,在應用很少的狀況下通常使用容器自帶的session複製功能就能知足,當應用增多相對複雜的系統中,通常都會搭建以Redis等內存數據庫爲中心的session服務,session再也不由容器管理,而是由session服務及內存數據庫管理。
8)分佈式鎖:在不少互聯網公司中都使用了分佈式技術,分佈式技術帶來的技術挑戰是對同一個資源的併發訪問,如全局ID、減庫存、秒殺等場景,併發量不大的場景可使用數據庫的悲觀鎖、樂觀鎖來實現,但在併發量高的場合中,利用數據庫鎖來控制資源的併發訪問是不太理想的,大大影響了數據庫的性能。能夠利用Redis的setnx功能來編寫分佈式的鎖,若是設置返回1說明獲取鎖成功,不然獲取鎖失敗,
6)社交網絡:點贊、踩、關注/被關注、共同好友等是社交網站的基本功能,社交網站的訪問量一般來講比較大,並且傳統的關係數據庫類型不適合存儲這種類型的數據,Redis提供的哈希、集合等數據結構能很方便的的實現這些功能。
7)最新列表:Redis列表結構,LPUSH能夠在列表頭部插入一個內容ID做爲關鍵字,LTRIM可用來限制列表的數量,這樣列表永遠爲N個ID,無需查詢最新的列表,直接根據ID去到對應的內容頁便可。
8)消息系統:消息隊列是大型網站必用中間件,如ActiveMQ、RabbitMQ、Kafka等流行的消息隊列中間件,主要用於業務解耦、流量削峯及異步處理實時性低的業務。Redis提供了發佈/訂閱及阻塞隊列功能,能實現一個簡單的消息隊列系統.