Redis經常使用操做整理

本文主要整理一些在以往開發中用到過及可能用到的功能,沒有涉及的功能暫不作整理。

1.基本數據類型

1.1 String

  • GET、SET、DEL
  • SETNX、SET xx
  • MSET、MGET
  • GETSET、APPEND
  • STRLEN
  • INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT
  • SETRANGE、GETRANGE

注意:redis

  1. 儘可能使用MGET而不是GET,減小網絡請求時間。
  2. 存在與數據庫同步時,避免在直接在Redis計算。

1.2 Hash

  • HSET、HGET、HGETALL

1.3 List

  • LPUSH、RPUSH
  • LPOP、RPOP
  • LRANGE

注意:數據庫

  1. List是有序字符串集合,實際開發可用於排行榜之類功能,也可用於消息隊列。
  2. List中能夠出現重複數據。

1.4 Set

  • SADD、SPOP
  • SCARD、SMEMBERS

注意:網絡

  1. Set是無需集合
  2. 集合成員是惟一的,不會出現重複數據

1.5 Sorted Set

  • ZADD
  • ZRANGE
  • ZREM
  • ZCARD
注意:
用於構造一個有序、但數據不重複的集合

2. PUB/SUB(發佈/訂閱)

  • SUBSCRIBE、UNSUBSCRIBE
  • PSUBSCRIBE、PUNSUBSCRIBE
  • PUBLISH

注意:app

  1. Redis客戶端能夠訂閱任意數量的頻道。
  2. 客戶端只能消費訂閱以後發佈的消息,一個消息能夠被多個訂閱者消費

3. 事務(Transactions)

  • MULTI
  • EXEC
  • DISCARD
  • WATCH key:監視 key,若是在事務執行以前 key 被其餘命令所改動,那麼事務將被打斷。
  • UNWATCH:取消 WATCH 命令對全部 key 的監視;
注意:
Redis的事務不具有一致性,EXEC執行後,若事務中斷,已經執行的部分不會回滾。

4. 慢查詢

  • SLOWLOG GET
  • SLOWLOG LEN
  • SLOWLOG RESET

注意:操作系統

  1. 慢查詢時間不包括命令隊列時間
  2. 經常使用在請求超時,可經過慢查詢日誌看是否有級聯阻塞

5. 管道(Pipeline)

注意:
Pipeline只能在單節點上執行

6. 地理位置(GEO)

  • GEO ADD key 經度 維度 標識 ...
  • GEOPOS key 標識
  • GEODIST key 標識1 標識2 距離單位
  • GEORADIUS

注意:線程

  1. 可用於搖一搖、同城約會之類的,可計算範圍內的人
  2. 可用於範圍內固定目標,好比飯店、滑雪場
  3. 使用GEORADIUS的排序,作實時距離相關的比賽功能

7. 數據持久化(RDB & AOF)

持久化方式有兩種:RDB快照 和 AOF日誌。日誌

7.1 RDB

RDB快照有三種觸發機制:code

  1. save命令,執行同步快照
  2. bgsave命令,執行新線程,生成快照
  3. 自動觸發,執行新線程,生成快照

通常使用bgsave或自動快照。自動快照配置以下:排序

# /etc/redis.conf
// RDB
// 每500秒有超過100次key被修改就執行快照
save 500 100
  • Redis 調用 fork() 進程,同時擁有父進程和子進程;
  • 子進程將數據都寫到一個臨時 RDB 文件之中;
  • 當子進程完成對新 RDB 文件的寫入時,Redis 用新 RDB 文件替換舊的 RDB 文件;

生產環境中,RDB適合冷備份,其餘適合建議使用AOF。隊列

7.2 AOF

AOF 三種策略分別是 always 、everysec 和 no。

  1. always:每條命令都寫入 AOF 文件中,保證不丟失;
  2. everysec:每秒將緩衝區數據寫入一次,可能丟失1秒數據;
  3. no:操做系統決定何時寫入;
注意:
在寫入的時候,AOF會壓縮命令。

AOF重寫

auto-aof-rewrite-min-size:配置最小尺寸,超過就進行重寫。
auto-aof-rewrite-percentage:指當前AOF文件比上次重寫的增加比例大小。

AOF 重寫即 AOF 文件在必定大小以後,從新將整個內存寫到 AOF 文件當中,以反映最新的狀態(至關於 bgsave)。這樣就避免了 AOF 文件過大而實際內存數據小的問題(頻繁修改數據問題)。

# AOF 配置以下

# 默認是 no
appendonly yes 

# 設置 AOF 名字
appendfilename "aof-${ip}-${port}.aof" 

# 每秒同步
appendfsync everysec

# AOF文件目錄
dir /diskpath

# 重寫AOF時是否持續記錄新的AOF日誌
# 設置爲 no,不會丟數據,但可能形成線程阻塞
# 設置爲 yes,有可能丟數據,但不會形成阻塞和系統延遲
no-appendfsync-on-rewrite yes

7.3 數據持久化常見問題

環境開銷

  • fork進程消耗大量內存;
  • AOF和RDB生成,屬於CPU密集型,不與CPU密集型業務一塊兒部署;
  • AOF和RDB寫入會佔用硬盤,使用iotop分析硬盤狀態;不和數據庫、消息隊列等一塊兒部署;使用SSD硬盤。

AOF追加阻塞

# 查看阻塞次數
# 如阻塞較多,要調整業務實現或者調整AOF策略
redis-cli info resistence
相關文章
相關標籤/搜索