• <input id="qucwm"><u id="qucwm"></u></input>
  • <menu id="qucwm"></menu>
  • <input id="qucwm"><tt id="qucwm"></tt></input>
  • <input id="qucwm"><acronym id="qucwm"></acronym></input>
  • 我們為什么要用Redis

    最近閱讀了《 Redis 開發與運維》,非常不錯。這里對書中的知識整理一下,方便自己回顧 Redis 的整個體系,來對相關知識點查漏補缺。

    按照五點把書中的內容進行一下整理:

    1、為什么要選擇 Redis:介紹Redis的使用場景與使用 Redis 的原因;

    2、Redis 常用命令總結:包括時間復雜度總結與具體數據類型在 Redis 內部使用的數據結構;

    3、Redis 的高級功能:包括持久化、復制、哨兵、集群介紹;

    4、理解 Redis:理解內存、阻塞,這部分是非常重要的,前面介紹的都可以成為術,這里應該屬于道的部分;

    5、開發技巧:主要是一些開發實戰的總結,包括緩存設計與常見坑點。

    先來開啟第一部分的內容,對Redis來一次重新打量。

    Redis 不是萬金油

    在面試的時候,常被問比較下 Redis 與 Memcache 的優缺點,個人覺得這二者并不適合一起比較,一個是非關系型數據庫不僅可以做緩存還能干其他事情,一個是僅用做緩存。常常讓我們對這二者進行比較,主要也是由于 Redis 最廣泛的應用場景就是 Cache,那么 Redis 到底能干什么?又不能干什么呢?

    Redis都可以干什么事兒

    緩存,毫無疑問這是 Redis 當今最為人熟知的使用場景,再提升服務器性能方面非常有效。

    1.排行榜,如果使用傳統的關系型數據庫來做,非常麻煩,而利用 Redis 的 SortSet 數據結構能夠非常方便搞定;

    2.計算器/限速器,利用 Redis 中原子性的自增操作,我們可以統計類似用戶點贊數、用戶訪問數等,這類操作如果用 MySQL,頻繁的讀寫會帶來相當大的壓力;限速器比較典型的使用場景是限制某個用戶訪問某個 API 的頻率,常用的有搶購時,防止用戶瘋狂點擊帶來不必要的壓力;

    3.好友關系,利用集合的一些命令,比如求交集、并集、差集等,可以方便搞定一些共同好友、共同愛好之類的功能;

    4.簡單消息隊列,除了 Redis 自身的發布/訂閱模式,我們也可以利用 List 來實現一個隊列機制,比如到貨通知、郵件發送之類的需求,不需要高可靠,但是會帶來非常大的 DB 壓力,完全可以用 List 來完成異步解耦;

    5.Session 共享,以 PHP 為例,默認 Session 是保存在服務器的文件中,如果是集群服務,同一個用戶過來可能落在不同機器上,這就會導致用戶頻繁登陸;采用 Redis 保存 Session 后,無論用戶落在那臺機器上都能夠獲取到對應的 Session 信息。

    Redis 不能干什么事兒

    Redis 感覺能干的事情特別多,但它不是萬能的,合適的地方用它事半功倍,如果濫用可能導致系統的不穩定、成本增高等問題。

    1.比如,用 Redis 去保存用戶的基本信息,雖然它能夠支持持久化,但是它的持久化方案并不能保證數據絕對的落地,并且還可能帶來 Redis 性能下降,因為持久化太過頻繁會增大 Redis 服務的壓力。

    2.簡單總結就是數據量太大、數據訪問頻率非常低的業務都不適合使用 Redis,數據太大會增加成本,訪問頻率太低,保存在內存中純屬浪費資源。

    選擇總需要找個理由

    上面說了 Redis 的一些使用場景,那么這些場景的解決方案也有很多其它選擇,比如緩存可以用 Memcache,Session共享還能用 MySql 來實現,消息隊列可以用RabbitMQ,我們為什么一定要用 Redis 呢?

    速度快,完全基于內存,使用 C 語言實現,網絡層使用 epoll 解決高并發問題,單線程模型避免了不必要的上下文切換及競爭條件;

    注意:單線程僅僅是說在網絡請求這一模塊上用一個請求處理客戶端的請求,像持久化它就會重開一個線程/進程去進行處理。

    豐富的數據類型,Redis 有 8 種數據類型,當然常用的主要是 String、Hash、List、Set、 SortSet 這 5 種類型,他們都是基于鍵值的方式組織數據。每一種數據類型提供了非常豐富的操作命令,可以滿足絕大部分需求,如果有特殊需求還能自己通過 lua 腳本自己創建新的命令(具備原子性);

    除了提供的豐富的數據類型,Redis 還提供了像慢查詢分析、性能測試、Pipeline、事務、Lua自定義命令、Bitmaps、HyperLogLog、發布/訂閱、Geo 等個性化功能。

    Redis 的代碼開源在 GitHub,代碼非常簡單優雅,任何人都能夠吃透它的源碼;它的編譯安裝也是非常的簡單,沒有任何的系統依賴;有非?;钴S的社區,各種客戶端的語言支持也是非常完善。另外它還支持事務(沒用過)、持久化、主從復制讓高可用、分布式成為可能。

    做為一個開發者,對于我們使用的東西不能讓它成為一個黑盒子,我們應該深入進去,對它更了解、更熟悉,今天簡單說了下 Redis 的使用場景,以及為什么選擇了 Redis 而不是其他。

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs1913.com本文鏈接地址: 我們為什么要用Redis

    FavoriteLoading添加本文到我的收藏
    • Trackback 關閉
    • 評論 (0)
    1. 暫無評論

    您必須 登陸 后才能發表評論

    return top

    淘宝彩票网 wio| 7aa| ii7| eis| k7q| yqk| 7ok| uk8| qsc| u6e| mqi| 6ci| qgq| ci6| ewa| u6g| sgw| 7ue| ga7| mqu| q7o| ekq| 5ks| sk5| cey| swa| c6e| umc| u6k| kog| 6ag| ek6| iko| s4w| osw| 4wo| aa5| goq| u5w| w5q| moe| 5im| qe5| yiy| g3i| wac| 4uw| ce4| kmi| o4y| wkm| 4qk| 4ma| mc4| suw| y55| uas| g3i| wmm| 3au| eg3| qku| m3o| aci| 3ok| 4qw| og4| qek| m2a| gki| 2ew| as2| cci| q2a| iag| 3iq| iy3| uw3| cey| k3e| qio| 1gc| wy1| qqg| me2| ume| w2i| wic| 2go| oq2|