redis 常用命令

記錄一下redis 常見的命令,redis練習(xí)命令官網(wǎng)

啟動(dòng)停止命令
  • 啟動(dòng)

    redis-server
    

    以配置項(xiàng)的方式啟動(dòng)

    redis-server --{configKey1} {configvalure1}
    

    配置文件方式啟動(dòng)

     redis-server /opt/redis/redis.conf
    
  • 停止
    使用redis-cli 客戶端

    redis-cli shutdown [nosave|save]
    

    redis 關(guān)閉過程:

    • 斷開與客戶端的連接
    • 持久化文件生成
      關(guān)于持久化文件的生成可以是用save|nosave選項(xiàng)控制

redis-cli
redis-cli -h {server_ip} -p {port} -a {password}

數(shù)據(jù)庫命令
  • 切換數(shù)據(jù)庫

    select {dbindex}
    

    redis 默認(rèn)配置0到15 總共16個(gè)數(shù)據(jù)庫,各個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)沒有關(guān)聯(lián)。

  • 清除當(dāng)前數(shù)據(jù)庫

    flushdb
    
  • 清除所有的數(shù)據(jù)庫

    flushall 
    

鍵管理相關(guān)命令
  • 查看所有鍵

    keys *
    
  • 鍵總數(shù)

    dbsize
    
  • 檢查鍵是否存在

    exist {key}
    
  • 刪除鍵

    del {key}
    
  • 鍵的數(shù)據(jù)結(jié)構(gòu)類型

    type {key}
    
  • 鍵的內(nèi)部編碼

    object encoding {key}
    

    鍵一共有5種,但其類型編碼有多種


    image.png

鍵過期相關(guān)
  • 鍵過期
    expire {key} seconds
    

字符串
  • 設(shè)置值

    set {key} {value} [ex {seconds}] [px {milliseconds}] [nx|xx]
    
  • 獲取值

    get {key}
    

    如果獲取的鍵不存在,則返回nil

  • 批量設(shè)置值

    mset {key} {value} {key} {value} ...
    
  • 批量獲取值

    mget {key} {key} ...
    
  • 計(jì)數(shù)

    incr {key}
    

    結(jié)果分為3種情況:

    • 值不是整數(shù)
    • 值是整數(shù),返回自增后的結(jié)果
    • 鍵不存在,按照值為0自增,返回結(jié)果為1
      類似的,還提供了自減命令decr {key},自增指定數(shù)字 incrby {key} {increment},自減指定數(shù)字decrby {key} {decrement},自增浮點(diǎn)數(shù)incrbyfloat key increment
  • 追加

    append {key} {value}
    
  • 返回value的長度

    strlen {key}
    

哈希
  • 設(shè)置
    hset {key} {field} {value}
    eg: hset user:1 name tom
    
    設(shè)置成功返回1,反之返回0
  • 獲取
    hget {key} {field}
    eg: hget user1:1 name
    
    如果鍵不存在,則返回nil
  • 批量設(shè)置
  • 批量獲取
  • 刪除
    hdel {key} {field} {field} ...
    
    返回刪除的個(gè)數(shù)
  • 計(jì)算個(gè)數(shù)
    hlen key
    
  • 判斷 field 是否存在
    hexists {key} {field}
    
    {key}中包含{field}域,返回1,不包含返回0
  • 獲取所有的 field
    hkeys {key}
    
  • 獲取所有的 value
    hvals {key}
    
  • 獲取所有的 field-value
    hgetall {key}
    

列表
  • 添加

    • 從右向左插入元素

      rpush {key} {value} {value} ...
      

      eg: rpush list 100 4 89 55 11,將會是:


      image.png
    • 從左向右插入元素

      lpush {key} {value} {value} ...
      

      eg: lpush list 100 4 89 55 11,將會是:


      image.png
    • 向某個(gè)元素的前或者后插入元素

      linsert {key} befor|after {pivot} {value}
      
  • 查詢

    • 獲取指定范圍的元素
      lrange {key} {start} {end}
      
    • 獲取指定索引的元素
      lindex {key} {index}
      
  • 獲取列表元素?cái)?shù)量

    llen {key}
    
  • 刪除

    • 從左側(cè)彈出元素
      lpop {key}
      
    • 從右側(cè)彈出元素
      rpop {key}
      
    • 刪除指定元素
      lrem {key} {count} {value}
      
      從列表中找到等于value的元素,按照count的不同分為3種情況
      • count > 0
      • count < 0
      • count = 0 刪除所有
  • 按照范圍修剪列表

    ltrim {key} {start} {end}
    eg: ltrim lis 1 3   // 將會只保留第[2, 4]
    
  • 修改指定索引下標(biāo)的元素

    lset {key} {index} {newValue}
    
  • 阻塞操作

    bloop {key} 
    

集合

集合中不允許有重復(fù)的元素,并且集合中的元素是無序的,不能通過下標(biāo)獲取元素。但是集合方便的是可以多個(gè)集合取交集,并集,差集。

集合的內(nèi)部編碼有2種:

  • 添加元素
    sadd {key} {element} [{element} ...]
    
    返回結(jié)果為添加成功的元素個(gè)數(shù)
  • 刪除元素
    srem {key} {element} [{element}...]
    
    返回結(jié)果為刪除成功的元素個(gè)數(shù)
  • 計(jì)算元素個(gè)數(shù)
    scard {key}
    
  • 判斷元素是否在集合中
    sismember {key} {element}
    
  • 隨機(jī)從集合返回指定個(gè)數(shù)元素
    srandmember {key} [count]
    
    [count]為可選參數(shù),默認(rèn)為1
  • 從集合隨機(jī)彈出元素
    spop {key} [count]
    
    3.2版本后支持[count]為可選參數(shù),默認(rèn)為1
  • 獲取所有元素
    smembers {key} 
    
  • 求多個(gè)集合的交集
    sinter {key} {key} ...
    
    還可以將結(jié)果保存在新的集合中
    sinterstore {destination} {key} {key} ...
    
  • 求多個(gè)集合的并集
    sunion {key} {key}
    
    還可以將結(jié)果保存在新的集合中
    sunionstore {destination} {key} {key} ...
    
  • 求多個(gè)集合的差集
    sdiff {key} {key}
    
    還可以將結(jié)果保存在新的集合中
    sdiffstore {destination} {key} {key} ...
    

有序集合

有序集合中的元素可以排序,它給每個(gè)元素設(shè)置一個(gè) score 作為排序的依據(jù)。

有序集合.png
  • 添加成員

    zadd {key} {score} {member} [{score} {member} ...]
    

    有序集合相比集合提供了排序手段,但是也產(chǎn)生了代價(jià),zadd 時(shí)間復(fù)雜度為O(log(n)),sadd 的時(shí)間復(fù)雜度為O(1)

  • 計(jì)算成員個(gè)數(shù)

    zcard {key}
    
  • 查看成員分?jǐn)?shù)

    zscore {key} {member}
    

    如果成員不存在,則返回nil

  • 計(jì)算成員排名
    zrank 按照從低到高的順序返回排名

    zrank {key} {member}
    

    zrevrank 按照從高到低的順序返回排名

    zrevrank {key} {member}
    
  • 刪除成員

    zrem {key} {member} [{member}...]
    
  • 增加成員分?jǐn)?shù)

    zincrby {key} {increment} {member}
    

    例如下面,給 tom 增加 9分

    > zincrby user:ranking 9 tom
    260.0
    
  • 返回指定排名范圍的成員
    zrange 按照從低到高的順序

    zrange {key} {start} {end} [withscores]
    

    例如返回排名范圍 [0, 2]的元素:

    > zrange user:ranking 0 2
    1) "tina"
    2) "tom"
    3) "jack"
    

    如果加上withscores,同時(shí)會返回成員的分?jǐn)?shù)

    > zrange user:ranking 0 2
    1) "tina"
    2) 201.0
    3) "tom"
    4) 251.0
    5) "jack"
    6) 300.0
    

    zrevrange 按照從高到低的順序

    zrevrange {key} {start} {end} [withscores]
    
  • 返回指定分?jǐn)?shù)范圍的成員
    zrangebyscore 按照從高到低的順序

    zrangebyscore {key} {min} {max} [withscores]
    

    例如返回 [200, 280] 范圍的元素

    zrangebyscore user:ranking 200 280
    1) "tina"
    2) "tom"
    

    同時(shí) min 和 max 還支持2個(gè)特殊的 -inf +inf 分表表示無窮小和無窮大。

    zrangebyscore user:ranking -inf +inf
    1) "tina"
    2) "tom"
    3) "jack"
    

    zrevrangebyscore 按照從低到高的順序

    zrevrangebyscore {key} {min} {max} [withscores]
    
  • 返回指定分?jǐn)?shù)范圍成員個(gè)數(shù)

    zcount {key} {min} {max}
    
  • 刪除指定排名(升序)范圍內(nèi)的元素

    zremrangebyrank {key} {start} {end}
    

    例如刪除排名[0, 2] 范圍內(nèi)的元素

    > zremrangebyrank user:ranking 0 2
    3
    
  • 刪除指定分?jǐn)?shù)范圍內(nèi)的元素

    zremrangebyscore {key} {min} {max}
    

Info 命令

使用Redis 時(shí),通常需要診斷很多問題,在診斷之前,可以通過強(qiáng)大的Info命令,可以清晰的知道Redis 內(nèi)部運(yùn)行的一系列參數(shù)。
Info 命令顯示的信息比較多,包括9大塊:

  1. Server 服務(wù)器運(yùn)行的環(huán)境參數(shù)
  2. Clients 客戶端相關(guān)信息
  3. Memory 服務(wù)器運(yùn)行內(nèi)存統(tǒng)計(jì)
  4. Persistence 持久化信息
  5. Stats 通用統(tǒng)計(jì)信息
  6. Replication 主從復(fù)制相關(guān)信息
  7. CPU CPU使用相關(guān)情況
  8. Cluster 集群信息
  9. KeySpace: 鍵值對統(tǒng)計(jì)數(shù)量信息

這里介紹一些常用的:

  • 查看Redis 每秒執(zhí)行了多少次命令

    Redis 每秒可以執(zhí)行10萬次命令,CPU 幾乎被完全榨干,

  • Redis 連接了多少客戶端

    redis-client clients
    

    通過這個(gè)可以觀察是否確定意料之外的連接,如果發(fā)現(xiàn)數(shù)量不對勁,那么可以使用client list指令列出所有的客戶端地址來進(jìn)一步確定。

    還需要注意的是,它表示因?yàn)槌鲎畲筮B接數(shù)限制而被拒絕的客戶端連接次數(shù),如果這個(gè)數(shù)字很大,那么意味著服務(wù)器最大連接數(shù)設(shè)置得過低,需要調(diào)整maxclients 參數(shù)。

  • Redis 內(nèi)存占用多大

    redis-cli info memory
    

    如果redis內(nèi)存占用過大,并且在業(yè)務(wù)上沒有太多壓縮的空間,那么可以考慮集群化了。

  • 復(fù)制積壓緩沖區(qū)多大
    復(fù)制積壓緩沖區(qū)大小非常重要,它嚴(yán)重影響了主從復(fù)制的效率。當(dāng)從節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)原因臨時(shí)斷開了對主節(jié)點(diǎn)的復(fù)制,然后網(wǎng)絡(luò)恢復(fù)又重新連接上的時(shí)候,這段斷開的時(shí)間內(nèi)發(fā)生在主節(jié)點(diǎn)上的修改操作指令都會被放在積壓緩沖區(qū)內(nèi),這樣從節(jié)點(diǎn)可以通過積壓緩沖區(qū)恢復(fù)中斷的主從同步過程。


    image.png

    積壓緩沖區(qū)是環(huán)形的,后來的指令會覆蓋掉前面的內(nèi)容,如果從節(jié)點(diǎn)斷開的時(shí)間過長,或者緩沖區(qū)的容量設(shè)置得太小,都會導(dǎo)致從節(jié)點(diǎn)無法快速恢復(fù)中斷的主從同步過程。

慢查詢相關(guān)

慢查詢?nèi)罩揪褪窍到y(tǒng)在命令執(zhí)行前后計(jì)算每條命令的執(zhí)行時(shí)間,當(dāng)超過預(yù)設(shè)閾值,就將這條命令的相關(guān)信息記錄下來。

  • 慢查詢的兩個(gè)配置
    slowlog-log-slower-than 預(yù)設(shè)閾值,單位是微秒,默認(rèn)值是10000,值設(shè)置為0會記錄所有的命令。
    slowlog-max-len Redis 使用了一個(gè)列表來存儲慢查詢?nèi)罩荆?code>slowlog-max-len 就是列表的最大長度,當(dāng)慢查詢?nèi)罩疽呀?jīng)處于最大長度時(shí),最早插入的一條命令將會從列表中移除。

    在 Redis 中有兩種修改配置的方法:

    1. 修改配置文件
    2. 使用config set 命令動(dòng)態(tài)修改
      config set slowlog-log-slower-than 20000
      config set slowlog-max-len 1000
      config rewrite  # 可選,將當(dāng)前配置持久化到本地配置文件
      
    • 配置建議
      1. 線上建議調(diào)大慢查詢列表
      2. 默認(rèn)值為10毫秒,對于高流量場景,如果命令執(zhí)行時(shí)間在1毫秒以上,則OPS最多可支撐不帶1000,所以高OPS場景,建議設(shè)置為1毫秒。
  • 獲取慢查詢?nèi)罩?/p>

    slowlog get [n]   # n 指定條數(shù)
    1)  1) (integer) 666  # 慢查詢標(biāo)識id
        2) (integer) 1456786500    # 時(shí)間戳
        3) (integer) 12006      # 記錄命令耗時(shí)
        4) 1) "BGREWRITEAOF"  # 命令
    
  • 獲取慢查詢?nèi)罩玖斜淼漠?dāng)前的長度

    slowlog len
    
  • 重置慢查詢?nèi)罩?/p>

    slowlog reset
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容