Redis學習筆記整理

來源:互聯網
上載者:User
Redis筆記整理

一、   Redis特性

二、   Redis應用情境

三、Redis營運與最佳化

 

一、   Redis特性

1、      Redis是一個開源的、高效能的key-value資料庫。它運行在記憶體中但是可持久化到磁碟。

2、      Redis的優點:

l  讀寫速度快,效能極高。(基於記憶體的操作,單線程免去了線程間的環境切換)read 11w/s,write 8w/s。

l  原子性,所有的操作都是原子的。

l  支援多種資料類型:String、list、set、sort set、hash、hyperloglogs、Geo。

l  支援transaction(事務內的每條指令都會執行,不管中途是否報錯,沒有復原機制)、pub/sub、lua script、key到期等特性

l  Redis sentinel提供高可用支援 master/slave,cluster的failover

l  支援資料持久化

 

二、   Redis應用情境

1、      緩衝

2、      MQ

使用list資料結構,LPush添加資料到隊尾,LPop從隊頭取出資料

3、      排名

使用sort set 資料結構,通過zadd給每個key添加設定一個score,擷取排名時使用zrang擷取前10名的資料

4、      分布式鎖

使用string資料結構,setnx命令只有當key不存在時添加key。大概流程如圖:

1)  setnx(lockname,expiretime)擷取鎖

2)  成功結束,失敗繼續

3)  get(lockname)得到expiretime,判斷expiretime是否到期,

4)  沒到期結束,到期繼續

5)  getset(lockname,expiretime1),擷取鎖並重新設定到期時間,判斷returnvalue

6)  returnvalue!= expiretime擷取鎖失敗可重試。returnvalue== expiretime擷取鎖成功。

5、      分頁最佳化

當分頁資料量大時,如分頁數超過幾百頁,可通過list資料結構緩衝最新的N條記錄,通過LPush插入資料,通過Ltrim來保持list鏈表的長度。

6、      共同好友,可能的好友

通過set資料結構進行實現,通過sdiff來判斷A,B集合之間的差集,返回集合A中所有與B集合不同的元素。通過sinter來擷取A,B兩個集合的交集。

7、      實作類別bitmap演算法

通過hyperLogLog資料結構來實現,PFADD對資料集進行插入操作,如果資料集有變化,返回1,無變化返回0。

 

三、   Redis營運

1、      主從複製

1)      config配置實現

slaveof <masterIP> <port>

      master存在密碼:masterauth <password>

2)      積壓空間的概念:

專門用來儲存資料修改的命令的緩衝空間。當有一個寫資料的請求進入時會將相應的命令儲存在該空間中,用於與slave伺服器進行同步。不直接發送給slave而採用該空間是為了適應主從斷開重連的情境。

3)      同步流程

slave首次串連到master,發起一個部分同步的請求(PSYNC 命令:master_runid 上次串連的主機身份 和offset積壓空間的位移量),master接受到請求進行資料驗證,看是否滿足部分同步的情況,不滿足返回全量同步,主機返回+FULLRESYNC master_runid offset(從機接收並記錄 master_runid 和 offset,並準備接收RDB 檔案)接著啟動 BGSAVE 產生 RDB 檔案,BGSAVE 結束後,向從機傳輸,首先向從機傳送rdb檔案,從機接受到rdb檔案儲存到磁碟,然後載入到記憶體中。接著master發送積壓空間中的資料給slave。  從而完成全量同步。

之後的資料同步都是由master有資料寫操作就直接推送給slave。

 

 

 

 2、      資料淘汰機制

當執行個體的記憶體達到設定的最大記憶體時,進行資料的淘汰機制:

l  volatile-lru:從已設定到期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰

l  volatile-ttl:從已設定到期時間的資料集(server.db[i].expires)中挑選將要到期的資料淘汰

l  volatile-random:從已設定到期時間的資料集(server.db[i].expires)中任意選擇資料淘汰

l  allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰

l  allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰

l  no-enviction(驅逐):禁止驅逐資料 ,超過最大值請求直接返回錯誤

由此可知,Redis並不保證所有key在到期後才回被回收。

Redis執行命令時都會檢測使用的記憶體是否超額,超額後 mem_tofree = mem_used - server.maxmemory 計算出要釋放的記憶體。然後根據資料淘汰機制進行釋放空間,同時將這個資料變更訊息發布到本地(AOF 持久化)和從機(主從串連)。

3、      持久化策略

持久化策略包括 RDB和AOF兩種方式。AOF 持久化和 RDB 持久化的最主要區別在於,前者記錄了資料的變更,而後者是儲存了資料本身。

可以同時開啟兩種持續方式,在這種情況下,當Redis進行重啟時,會優先載入AOF檔案進行恢複,因為在通常情況下AOF檔案儲存的資料集要比RDB檔案儲存的資料集要完整。

如果想把正在啟動並執行redis資料庫,從RDB切換到AOF,建議先使用動態切換方式,再修改設定檔,重啟資料庫。(不能直接修改設定檔,重啟資料庫,否則資料庫中資料就為空白了。)

1)      RDB策略:

將記憶體快照dump到磁碟進行備份儲存,由conf檔案進行設定,觸發條件“ N 秒內資料集至少有 M 個改動”。備份時主進程fork出一個子進程進行bgsave操作,備份完成後會將新的RDB檔案替換舊的RDB檔案,並刪除舊RDB檔案。

使用Copy-on-write方法進行備份,在備份過程中可能會消耗大量的主機記憶體。當同一主機上有多個執行個體時,避免同時進行RDB操作。

                     優點:

l  檔案儲存緊湊,儲存某個時間點的所有資料,便於備份,並且便於傳輸。

l  恢複大的資料集時,RDB的方式會更快些。

缺點:

l  因為是每隔一段時間進行一次備份,萬一在Redis意外宕機,你可能會丟失幾分鐘的資料。

l  RDB時要經常fork子進程來儲存資料,當資料集較大時,fork的過程會比較耗時,這時可能會導致主進程無法響應用戶端的請求

2)      AOF策略:

記錄每次對伺服器寫的操作儲存到AOF檔案末尾(fsync),fsync也是通過fork一個子進程來完成的。當AOF檔案過大時,Redis會對AOF檔案進行重寫(bgrewrite)。由conf檔案進行設定,預設每秒進行一次fsync。初次開啟AOF時,會進行AOF檔案初始化,將現有的資料集都AOF進AOF檔案中。

優點:

l  根據使用不同的fsync策略,可以保證丟失的資料最少。預設情況下丟失1秒資料

l  AOF只是一個追加檔案的操作,當某些原因未執行完整寫入命令時,可使用redis-check-aof工具修複。

l  AOF檔案易讀,便於人工修改

缺點:

l  相同資料量,AOF檔案比RDB檔案更大。

l  當資料量大時,Redis重啟所用時間比RDB長。



相關參考:

http://wiki.jikexueyuan.com/project/redis/master-slave-replication.html

http://www.redis.cn/topics/persistence.html

http://www.cnblogs.com/0201zcr/p/5942748.html







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.