歡迎光臨
每天分享高質量文章

超強、超詳細Redis入門教程

背景~~

隨著網際網路+和大資料時代的來臨,傳統的關係型資料庫已經不能滿足中大型網站日益增長的訪問量和資料量,這個時候就需要一種能夠快速存取資料的元件來緩解資料庫服務I/O的壓力 ,來解決系統效能上的瓶頸。

什麼是Redis~~


Redis是一個開源的,高效能的,C語言開發,鍵值對(key-value)儲存資料的NoSql資料庫

NoSql: Not Only Sql 泛指非關係型資料庫  Redis / MongoDB/Hbase

關係型資料庫 : Oracle Mysql SqlServer


資料庫應用的發展歷史

1: 在網際網路大資料時代來臨前,企業的一些內部資訊管理系統,一個單個資料庫實體就可以應付系統的需求

單資料庫實體

2: 隨著系統訪問量使用者的增多,資料量的增大 ,單個資料庫實體已經滿足不了系統讀取資料的需求

快取(ehCache/MemCached)+資料庫實體

3: 快取可以緩解資料庫的讀取壓力,但是資料量的寫入壓力持續增大,可以採取資料庫主從進行讀寫分離

快取+主從資料庫+讀寫分離

4:  資料量再次增大 ,讀寫分離以後 ,主資料庫的寫庫壓力出現瓶頸

快取 +主從資料庫叢集+讀寫分離 +分庫分表

5 :網際網路+大資料時代來臨,關係型資料庫不能很好的存取一些併發性大,實時性高而且格式不固定的資料

NoSql資料庫 +主從資料庫叢集+讀寫分離 +分庫分表

Redis有什麼用~~

Redis的主要作用: 快速存取

以電商平臺為例,Redis在系統架構中的一個位置


Redis的應用場景:

單點登陸/直播平臺裡面線上好友串列/搶購 秒殺/商品的排行榜/點贊/資料過期

Redis怎麼用~~


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

命令地址http://doc.redisfans.com/

最新版本 : 3.2.9

應用版本: 3.0.4


Redis的五大資料型別以及應用場景

List

k-v格式中 v的資料型別是List,其實類似java裡面的LinkedList

把這個有序串列看成一根竹子,可以從兩頭插入資料

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

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

3  2  1  4  5  6

從左邊彈出記錄 lpop comment:1 1

從右邊彈出記錄 rpop comment:1 1

獲取分頁: lrange comment:1 start end

1.lrem key 刪N個value

rpush list03 1 1 1 2 2 2 3 3 3 4 4 4 5 6 7

lrem list03 2 3   代表刪掉2個3

lrange list03 0 -1

應用場景: 商品的評論表

String


k-v格式中 v的資料型別是String,一個redis中字串value最多可以是512M

設值  set  key  value /mset k1 v1 mset k2 v2

incr k2 遞增加1

decr k2 遞減減1

 incrby  k2 3  k2加3

取值  get key

刪值  del key

實際應用場景: 秒殺商品/點贊


Hash

k-v格式中 v的資料型別是hash,其實就是java裡面的Map

設值: hset mobile_huawei id 1  批次:hmset mobile_huawei id 1 name huaweip9 price 2999

取值: hget mobile_huawei id    批次:hgetall mobile_huawei

刪值: del key

hexists customer id 如果存在傳回1 不存在傳回0

hkeys/hvals

實際應用場景:電商網站中的商品詳細資訊


set

k-v格式中 v的資料型別是set  和list不同的是:list是有序的 ,set就是無序的,且具有唯一性

sadd set01 1 1 2 2 3 3  會去掉重覆新增

增  sadd friends:juran tds jungle aurocal yulouchun

刪  srem friends:keven tds

檢視 smember friends:juran

兩個集合的交集 sinter friends:juran friends:tds

隨機出棧 spop juran

應用場景: 微信朋友檢視許可權 /獨立IP投票限制


Zset(sorted set)

k-v格式中 v的資料型別是zset 有序的set

增加 zadd mobile:sales 100 huawei 99 iphone 98 vivo 97 oppo

刪除 zrem mobile:sales oppo

ZRANGEBYSCORE  mobile:sales 98 (100  不包含100

從小到大獲取商品 :zrange  mobile:sales 0  10 從小到大  

withscores 帶上分數

從大到小獲取商品 :  zrevrange  mobile:sales 0  10

ZRANGEBYSCORE mobile:sales 97 100 limit 2 2  從第二條開始擷取兩條

應用場景: 商品的銷售排行榜


Redis~~

Redis對事務的支援目前還比較簡單,redis只能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令。當一個client在一個連線中發出multi命令時,這個連線會進入一個事務背景關係,該連線後續的命令不會立即執行,而是先放到一個佇列中,當執行exec命令時,redis會順序的執行佇列中的所有命令

set age 33

multi   開啟事務

set age 10

set age 20

exec   讓命令按順序執行

get age

discard 取消事務 其實就是清空事務的命令佇列並退出事務背景關係,也就是我們常說的事務回滾。

redis只支援簡單的事務,mysql事務如果執行不成功會進行回滾。

multi

incr age

incr name

exec

Redis的持久化~~

簡單說,資料從記憶體同步到硬碟

兩種持久化方式

RDB方式

預設支援,在指定的時間間隔內,將記憶體中的資料集快照寫入到磁碟

save 900 1  900秒內如果超過1個key被修改,則發起快照

save 300 10

save 60 10000

AOF方式

日誌的形式記錄伺服器處理的每一個操作,伺服器啟動之初,讀取檔案,重新構建資料庫

3.無持久化
   透過配置繼用Redis持久化功能,Redis快取機制

4.同時使用RDB和AOF

分享創造快樂

© 2024 知識星球   網站地圖