[Database] Redis 隨筆

Redis 隨筆

1. 特色

  • 非關係數據庫 non-relational database
  • 內存數據庫
  • 高性能
  • 主從複製
  • 可持久化存儲
  • 發佈與訂閱
  • 支持腳本

2. 數據類型5種

STRING

  • 能夠是字符串、整數、浮點數
  • 操做
    • 對整個字符串或都字符串的一部分執行操做;
    • 對整數或浮點數執行自增或自減操做;

LIST

  • 鏈表,每一個節點都包含一個字符串
  • 操做
    • 從鏈表兩端推入或彈出元素;
    • 依據偏移量對鏈表進行修剪(trim);
    • 讀取單個或者多個元素;
    • 依據值查找或移動元素;

SET

  • 包含字符串的無序收集器,而且各字符串獨一無2、各不相同
  • 操做
    • 添加、獲取、移除單個元素;
    • 檢查一個元素是否存在於集合中;
    • 計算交集、並集、差集;
    • 從集合裏面隨機獲取元素;

HASH

  • 包含鍵值對的無序散列表
  • 操做
    • 添加、獲取、移除單個鍵值對;
    • 獲取全部鍵值對;

ZSET

  • 字符串成員與浮點數分值之間的有序映射,元素的排列順序由分值的大小決定
  • 操做
    • 添加、獲取、刪除單個元素;
    • 依據分值範圍或者成員來獲取元素

3. 命令

基本事務 transaction

  • MULTI
  • EXEC
  • UNWATCH
  • WATCH
  • DISCARD

4. 數據安全與性能保障

持久化

  • 快照 snapshotting
    • 將存在於某一時刻的全部數據都寫入硬盤裏面
    • 操做
      • 執行 BGSAVE
      • 執行 SAVE
      • 配置選項 save 60 10000 ; 能夠多個條件,條件知足時執行一次BGSAVE
      • 收到SHUTDOWN 或 TERM信號時,會執行SAVE
      • 一個Redis鏈接另外一個Redis 服務器,併發送SYNC 開始複製時,主服務器非剛執行完BGSAVE操做,就會執行BGSAVE
  • AOF 只追加文件 append-only file
    • AOF 持久化會將被執行的寫命令寫到AOF文件的末尾,以此來記錄數據發生的變化。
    • 重寫/壓縮AOF文件
      • 執行命令 BGREWRITEAOF
      • 設置選項
        • auto-aof-rewrite-min-size
        • auto-aof-rewrite-percentage

複製 replication

  • 讓其餘服務器擁有一個不斷更新的數據副本,從而使擁有副本的服務器能夠用於處理客戶端發送的讀請求。
  • slaveof host port
  • slaveof no one
  • 主從鏈
  • 檢驗硬盤寫入
    • INFO命令輸出結果aof_pending_bio_fsync 屬性的值是否爲0
  • 驗證快照文件和AOF文件
    • redis-check-aof
    • redis-check-dump

事務

  • 事務型流水線
    • PyRedis
      • conn.pipeline()
      • conn.multi *** conn.exec
  • 非事務性流水線
    • PyRedis
      • conn.pipeline(False)

性能測試工具

  • reids-benchmark

分佈式鎖

Redis使用WATCH命令來代替對數據進行加鎖,由於WATCH只會在數據被其餘客戶端搶先修改了的狀況下通知執行了這個命令的客戶端,而不會阻止其餘客戶端對數所進行修改,因此這個命令被稱爲樂觀鎖(optimistic locking)html

發佈、訂閱

publish、subscriberedis


下降內存佔用

短結構

Redis 爲列表、集合、散列和有序集合提供了一組配置選項,可讓Redis以更節約空間的方式存儲長度較短的結構。算法

在列表、散列、有序集合的長度較短或者體積較小的時候,Redis能夠選擇使用和種名爲壓縮列表(ziplist)的緊湊存儲方式來存儲這些結構。壓縮列表以序列化的方式存儲數據,這些數據每次被讀取的時候都要進行解碼,每次被寫入的時候也要進行局部的從新編碼,而且可能須要對內存裏面的數據進行移動。數據庫

通常壓縮列表的長度限制在 1024 個之內,每一個元素體積不能超過 64字節,通常能同時兼顧內存佔用和高性能這兩方面優勢。緩存

配置使用

* list-max-ziplist-entries  512  #容許包含的最大元素數
* list-max-ziplist-value    64   #每一個節點最大致積是多少個字節
* hash-max-ziplist-entries  512
* hash-max-ziplist-value    64
* zset-max-ziplist-entries  128
* zset-max-ziplist-value    64
* set-max-intset-entries    512

分片結構 sharding

  • 經過哈希環等算法,把列表、集合、散列分佈到多處存儲,來減少元素數,從而使用壓縮列表減小內存佔用。
  • 打包存儲二進制位和字節
  • 對於簡短而且長度固定的連續ID,能夠用分片Redis字符串去存儲。

擴展Redis

  • 增長從服務器
  • 使從服務器可寫
  • slave-read-only安全

  • 分片擴展寫性能和內存容量服務器


解決實用案例

  • Web 登陸緩存
  • 購物車
  • 網頁緩存
  • 數據行緩存
  • 基於搜索的應用
  • 定向廣告
  • 社交網站

相關連接:
Redis 1
Redis 2併發

XMIND:
app

相關文章
相關標籤/搜索