背景~~
隨著網際網路+和大資料時代的來臨,傳統的關係型資料庫已經不能滿足中大型網站日益增長的訪問量和資料量,這個時候就需要一種能夠快速存取資料的元件來緩解資料庫服務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