Redis學習(6)-Redis高級實用特性

Redis高級實用特性:redis

1.安全性
2.主從複製
3.事務處理
4.持久化機制
5.發佈訂閱消息
6.虛擬內存的使用
數據庫

安全性:設計模式

設置客戶端鏈接後進行任何其餘指定前須要使用的密碼警告:由於Redis速度至關快,因此一臺比較好的服務器下一個外部的用戶能夠在一秒鐘進行150k次的密碼嘗試,這意味着你須要指定很是很是強大的密碼來防止暴力破解
配置方法:
  requirepass beijing(在配置文件中配置密碼)
  auth beijing(受權方式1)
  redis-cli -a beijing(受權方式2)
緩存

 

主從複製:安全

Redis主從複製配置和使用都很是簡單,經過主從複製能夠容許多個Redis server擁有和master server相同的數據庫副本

Redis主從複製特色:
1.Master能夠擁有多個slave
2.多個slave能夠鏈接同一個master外,還能夠鏈接到其餘slave
3.主從複製不會阻塞master,在同步數據時,master能夠繼續處理client請求
4.提升系統的伸縮性

Redis主從複製過程:
1.Slave與master創建鏈接,發送sync同步命令
2.Master會啓動一個後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。
3.後臺完成保存後,就將此文件發送給slave
4.slave將文件保存到硬盤上

配置主從服務器:
  配置slave服務器很簡單,只需在slave的配置文件中加入一下配置:
  slaveof 192.168.1.1 6379 #指定master的IP和端口
  masterauth lamp #這是主機的密碼
服務器

 

事務處理:app

Redis對事物的支持目前還比較簡單,Redis智能保證一個client發起的事務中的命令能夠連續的執行,而中間不會插入其中client的命令,當一個client在一個鏈接中發出multi命令時,這個鏈接會進入一個事務上下文該鏈接後續的命令不會當即執行,而是先放到一個隊列中當執行exec命令時,redis會順序的執行隊列中的全部命令、
函數

添加一個事務
  命令:
  multi
  OK
  incr a
  QUEUED
  incr b QUEUED
  exec
  1)1
  2)1

如何取消一個事務(回滾)
  dicard
  若是有一條不成功,並不影響上面的操做
  incr age
  incr name    #不成功
  exec

樂觀鎖復瑣事務控制
樂觀鎖:大多數是基於數據版本(version)的記錄機制實現的,即爲數據加一個版本的標識,在基於數據庫表的版本解決方案中,通常是經過爲數據庫表添加一個「version」字段來實現讀取出數據時,將此版本號一同讀出,以後更新時,對此版本號加1,此時,將提交數據的版本號與數據表對應記錄的當前版本號進行對比,若是提交的數據版本號大於數據庫當前版本號,則予以更新,不然認爲是過時數據。watch命令會監視給定的key,當exec時候若是監視的key從調用watch後發生過變化,則整個事務會失敗,也能夠調用watch屢次監視多個key,這樣就能夠對指定的key加樂觀鎖了,注意watch的key是對整個鏈接有效的,事務也同樣,若是鏈接斷開,監視和事務會被自動清除,固然了exec,discard,unwatch命令都會清楚鏈接中的全部監視
性能

 

持久化機制:學習

Redis是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到硬盤來保證持久化
Redis支持兩種持久化方式:
1.snapshotting(快照)也就是默認方式
2.Append-only file(縮寫aof)的方式

Snapshotting方式
快照是默認的持久化方式,這種方式是將內存中數據以快照的方式寫入二進制文件中,默認的文件名爲dump.rdb能夠經過配置設置自動作快照持久化的方式,咱們能夠配置redis在n秒內若是超過m個key修改就自動作快照

配置方式:
  save 900 1 #900秒內若是超過1個key被修改,則發起快照保存
  save 300 10 #300秒內容若是超過10個key被修改,則發起快照保存
  save 60 10000

aof方式
因爲快照方式是在必定間隔時間作一次的,因此若是redis意外down掉的話,就會丟失最後一次快照後的全部修改。aof比快照方式有更好的持久化性,是因爲在使用aof時,redis會將每一個收到的寫命令都經過write函數追加到文件中,當redis重啓時會經過從新執行文件中保存的寫命令來內存中重建真個數據庫的內容。固然因爲os會在內核中緩存write作的修改,因此可能不是當即寫入磁盤上,這樣aof方式的持久化也仍是有可能會丟失布馮修改。能夠經過配置文件告訴redis咱們想要經過fsync函數強制os寫入到磁盤的時機。

配置方式:
  appendonly yes //啓用aof持久化方式
  #appendfsync always //收到寫命令就當即寫入磁盤最慢,可是保證徹底的持久化
  appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面作了很好的折中
  #appendfync no //徹底依賴os,性能最好持久化沒保證

 

發佈及訂閱消息:

  發佈訂閱(pub/sub)是一種消息通訊模式,主要的目的是解耦消息發佈者和消息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較類似。pub /sub不只僅解決發佈者和訂閱者直接代碼級別耦合也解決二者在物理部署上的耦合。redis做爲一個pub/sub server,在訂閱者和發佈者之間起到了消息路由的功能。訂閱者能夠經過subscribe和psubscribe命令向redis server訂閱本身感興趣的消息類型,redis將消息類型稱爲通道(channel)。當發佈者經過publish命令向redis server發送特定類型的消息時。訂閱該消息類型的所有client都會收到此消息。這裏消息的傳遞是多對多的。一個client能夠訂閱多個 channel,也能夠向多個channel發送消息。

 

虛擬內存:

Redis的虛擬內存與操做系統的虛擬內存不是一回事,可是思路和目的都是相同的。都是暫時把不常常訪問的數據從內存交換到磁盤中,從而騰出寶貴的內存空間用於其餘須要訪問的數據。尤爲是對於redis這樣的內存數據庫,內存老是不夠用的。除了能夠將數據分割到多個
redisserver外。另外可以提升數據庫容量的辦法就是使用虛擬內存把那些不常常訪問的數據交換到磁盤上。

配置:
  vm-enabled yes #開啓vm功能
  vm-swap-file /tmp/redis.swap #交換出來的value保存的文件路徑
  vm-max-memory 1000000 #redis使用的最大內存上限
  vm-page-size 32 #每一個頁面的大小32字節
  vm-pages 13417728 #最多使用多少頁面
  vm-max-threads 4 #用於執行value對象換入患處的工做線程數量

啓動後提示,還要配置:
  really-use-vm yes

 

注:Redis系列博客均是結合兄弟連Redis學習視頻的筆記!

相關文章
相關標籤/搜索