作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

前言

作為Java開發程序員【Redis】是你必須要掌握的知識

Redis是互聯網技術領域使用最為廣泛的存儲中間件,它是「Remote Dictionary Service」的首字母縮寫,也就是「遠程字典服務」。Redis 以其超高的性能、完美的文檔、簡潔易懂的源碼和豐富的客戶端庫支持在開源中間件領域廣受好評。

國內外很多大型互聯網公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娛樂、Github、StackOverflow、騰訊、阿里、京東、華為、新浪微博等等,很多中小型公司也都有應用。也可以說,對 Redis 的瞭解和應用實踐已成為當下中高級後端開發者繞不開的必備技能。

本文總共分為3個部分對Redis進行“解剖”:

第一部分對Redis進行了基本介紹,並展示了一些Redis的使用示例;

第二部分對Redis的多個命令進行了詳細的介紹,之後還介紹了Redis 的管理操作以及使用Redis構建更復雜的應用程序的方法;

第三部分介紹瞭如何通過內存優化、水平分片以及Lua腳本這3種技術來擴展Redis。

如果需要獲取到這個【Redis文檔】文檔的話幫忙轉發一下然後再關注我私信回覆“架構資料”得到獲取方式吧!(內容細節比較多,所以把知識點粗略的介紹Redis)

一、Redis入門

入門簡介:對於Redis數據庫的描述只說出了一部分真相,Redis是-一個速度非常快的非關係數據庫( non-relational database),它可以存儲鍵(key) 與5種不同類型的值( value)之間的映射(mapping),可以將存儲在內存的鍵值對數據持久化到硬盤,可以使用複製特性來擴展讀性能,還可以使用客戶端分片來擴展寫性能,接下來的幾節將分別介紹Redis的這幾個特性。

Redis目錄如下圖

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

關於Redis與其他數據庫和軟件的對比

下圖展示了部分在功能上與Redis有重疊的數據庫服務器和緩存服務器,從這個表可以看出Redis與這些數據庫及軟件之間的區別。

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

第一部分關於詳細介紹由於文案篇幅過長就不詳細在文中展示

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

二、Redis的核心概念

這一部分的前面幾章將深人探討標準的 Redis命令,其中包括 數據操作命令和配置命令,而後面的幾章將展示如何使用Redis構建更為複雜的輔助工具和應用程序,並在最後使用Redis來構建一個簡單的社交網站。

Redis目錄如下圖

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

2.1.Redis命令

  1. 字符串命令、 列表命令和集合命令
  2. 散列命令和有序集合命令
  3. 發佈命令與訂閱命令
  4. 其他命令

2.2.數據安全與性能保障

  1. 將數據持久化至硬盤
  2. 將數據複製至其他機器
  3. 處理系統故障
  4. Redis事務
  5. 非事務型流水線( non-transactional pipeline )
  6. 診斷性能問題

2.3.使用Redis構建支持程序

  1. 使用Redis記錄日誌
  2. 使用Redis實現計數器並進行數據統計
  3. 查詢IP地址所屬的城市與國家
  4. 服務的發現與配置

2.4.使用Redis構建應用程序組件

  1. 構建兩個前綴匹配自動補全程序
  2. 通過構建分佈式鎖來提高性能
  3. 通過開發計數信號量來控制併發
  4. 構建兩個不同用途的任務隊列
  5. 通過消息拉取系統來實現延遲消息傳遞
  6. 學習如何進行文件分發

2.5.基於搜索的應用程序

  1. 使用Redis進行搜索
  2. 對搜索結果進行排序
  3. 實現廣告定向
  4. 實現職位搜索

2.6.構建簡單的社交網站

  1. 用戶和狀態
  2. 主頁時間線
  3. 關注者列表和正在關注列表
  4. 狀態消息的發佈與刪除
  5. 流API

三、Redis進階內容

最後的這幾章將對Redis用戶經常會遇到的一-些問題進行介紹(降低內存佔用、擴展性能、使用Lua語言進行腳本編程),並說明如何使用常規的技術去解決這些問題。

目錄如下圖:

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

3.1.降低內存佔用

短結構( short structure )、分片結構( shared structure )、打包存儲二進制位和字節

該篇將介紹3種非常有價值的降低Redis內存佔用的方法。降低Redis 的內存佔用有助於減少創建快照和加載快照所需的時間、提升載人AOF文件和重寫AOF文件時的效率、縮短從服務器進行同步所需的時間”,並且能讓Redis存儲更多的數據而無需添加額外的硬件。

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

3.2.擴展Redis

擴展讀性能、擴展寫性能以及內存容量、擴展複雜的查詢

隨著Redis的使用越來越多,只使用一臺Redis服務器沒辦法存儲所有數據或者沒辦法處理所有讀寫請求的問題遲早都會出現,這時我們就需要使用一些方法對Redis進行擴展,讓它能夠滿足我們的需求。

擴展性能圖如下:

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

3.3.Redis的Lua腳本編程

在不編寫C代碼的情況下添加新功能、使用Lua重寫鎖和信號量、移除WATCH/MULTI/EXEC事務、使用Lua對列表進行分片

前面介紹瞭如何構建- 些工具並將它們應用到已有的程序裡面,與此同時還介紹了-些可以用於解決各種問題的技術。這- -章要做的事情也是類似的,並且效果將比你想象中的還要好。Redis從2.6版本開始引人使用Lua編程語言進行的服務器端腳本編程功能,這個功能可以讓用戶直接在Redis內部執行各種操作,從而達到簡化代碼並提高性能的作用。

Redis的Lua腳本如下圖:

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

Redis實戰書籍

作為Java程序員連Redis都不會?阿里架構師帶你深入“解剖”Redis

如果需要獲取到這個【Redis文檔】文檔的話幫忙轉發一下然後再關注我私信回覆“架構資料”得到獲取方式吧!(內容細節比較多,所以把知識點粗略的介紹了)


分享到:


相關文章: