淺談大型分佈式系統Redis內存數據庫實踐

隨着互聯網的飛速發展和大數據雲計算概念的普及 ,傳統的關係型數據庫已經不能滿足中大型網站日益增長的訪問量和數據量, 這個時候需要一種能夠快速存取數據的組件來緩解傳統數據庫服務I/O的壓力,解決系統性能上的瓶頸.

本篇文章的主要目的是爲了讓大家初步瞭解Redis內存數據是什麼,在大型分佈式系統架構中有什麼作用,以及Redis內存數據庫在實際項目中怎麼應用。


分佈式有什麼用


1) 將系統功能模塊化,且部署在不同的地方,對於底層模塊,只要保持接口不變,

上層系統調用底層模塊將不關心其具體實現,且底層模塊做內部邏輯變更,上層系統

都不需要再做發佈,可以極大限度的解耦合

2) 解耦合之後,可以複用共同的功能,且業務擴展更爲方便,加快開發和發佈的速度

3) 系統分開部署,充分利用硬件,可以提高系統性能

4) 減少數據庫連接資源的消耗


Redis是什麼 


Redis是一個開源的 ,高性能 ,C語言開發的,鍵值對(key-value)存儲數據的NOSQL數據庫。那接下來我們理清楚幾個基本的概念和數據庫應用的一個發展歷史:

基本概念:NOSQl : Not Only Sql  泛指非關係數據庫  Redis /MongoDB /Hbase

關係型數據庫: Oracle/Mysql/Sybase /SqlServer


1

Redis 有什麼用


1.1. Redis的作用和地位


Redis的主要作用一句話來概括就是 能夠快速存取。


如下圖所示:以電商平臺架構爲例,Redis在系統架構中的位置,它是擋在關係型數據庫前面的一道快速讀取數據的屏障,極大的緩解了關係型數據的讀取壓力,使整個系統的在數據存取的瓶頸得到了極大的改善。



1.2. Redis的應用場景


Redis在大型分佈式系統架構中主要的一些應用場景包括 單點登陸系統的權限驗證,直播平臺的好友列表顯示,商品秒殺活動的剩餘商品數目,電商網站的商品排行,網站的訪問數量統計等高併發訪問的功能需求,接下來我們在介紹Redis支持的數據類型裏面會一一介紹此些場景的操作。


2

Redis怎麼用


Redis的官網地址:  https://redis.io/

Redis最新版本:3.2.9

Redis數據庫服務啓動: 在linux下面啓動Redis數據庫服務:./redis-server  /etc/redis.conf

Redis客戶端:啓動客戶端鏈接數據庫   ./redis-cli -h 127.0.0.1 -p 6379


2.1. Redis的五大數據類型以及應用場景


Redis一共有五種數據類型來支持各種應用場景,String /Hash/List/Set/Zset

接下來我們一一介紹。


2.1.1. String類型 

K-V格式中 V是一個字符串(數字)

基本的操作語法如下:

單個設值取值 : set k1 v1   get k1

多個設置取值  mset k1 v1 k2 v2  mget  k1 k2

刪除key  del k1

注意: 當value是數字時,可以遞增,可以進行遞增遞減操作 比如INCR K1, DECR K1 

實際應用場景: 如下圖所示 秒殺商品數目或者點 zan 的操作。


2.1.2. Hash 數據類型

K-V格式中 V是一個Hash類型 ,類似於Java裏面Map<Object,Object>

基本的操作語法如下:

設置對象的某個屬性 hset student:001 id 1

設置對象的多個屬性hmset student:001 id 1 name xiaoxi  sex boy height 180

獲取對象的單個屬性 hget student:001 id /hget strudent name

獲取對象的多個屬性 hmget student:001 id name

獲取對象所有的屬性 hgetall student

刪除一個或多個字段 hdel  stduent   id  name

實際應用場景 : 如下圖所示,電商網站中商品的詳細信息可以存儲在Redis中,不需要每次都訪問關係型數據庫。


2.1.3. list數據類型

K-V格式中 V是一個list類型 ,類似與java裏面的LinkedList 有序列表

基本的操作語法如下:

從左邊插入記錄  lpush comment:1  1 2 3

從右邊插入記錄  rpush comment:1  4 5 6

把它看成一個竹子,從竹子兩端插入數據 上面插入的記錄排列如下。

3 2 1 4 5 6

刪除就是彈出左邊彈出,右邊彈出 lpop commet:1 1/ rpop commet:1 1

獲取list長度 llen comment:1

獲取list lrange start end 適用分頁

應用場景: 如下圖所示: 商品的評論表,最新的評論顯示在最前面,而且可以分頁顯示


2.1.4. set數據類型

K-V格式中 V是一個set類型,和list的不同的地方就是set是無序的而且裏面的元素有唯一性

基本的操作語法如下:

增加元素 sadd keven_friends xiaoxi  xiaohei

  刪除元素 srem keven_friends  xiaoxi

  查看元素 smember keven_friends

  查看元素個數 scard keven_friends

  是否存在某個元素 sisimember keven_friends xiaoxi

  集合運算 交集/並集 sinter key1 key2 / sunion key1 key2

應用場景: 如下圖所示,set數據類型主要應用在 獨立IP投票的限制/微信朋友quan的查看權限(共同好友)。


*  Zset (sorted set) 有序集合。


K-V格式中 V是一個有序set類型  怎麼做到有序呢,其實就是給它增加一個分數。

基本的操作語法如下:


以上給大家介紹的一些內容僅僅是Redis的一些基礎入門知識,同樣Redis雖然是內存數據,但是也可以同其他數據庫一樣進行數據的持久化,以及進行主從分配和集羣,在這裏就不再詳細描述 。


原文鏈接:https://mp.weixin.qq.com/s/Pjebk5F4IODfbuBAgLdXdA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章