1. 程式人生 > 實用技巧 >Redis-04-資料型別

Redis-04-資料型別

  • RedisKey基本命令

    • # 檢視所有屬性名
      keys *

    • # 設定屬性的過期時間,應用場景:單點登入、熱點資料、過期時間
      expire 屬性名 時間(以秒為單位)
      # 檢視屬性剩餘時間
      ttl 屬性名

    • # 檢視屬性型別
      type 屬性名

    • 其他命令的學習可以檢視官方文件

1、String,字串

    • # 設定值
      set 屬性名 屬性值
      # 設定值的同時設定過期時間
      setex 屬性名 過期時間 屬性值
      # 設定值,如果該值不存在建立成功,如果該值存在,建立失敗(分散式鎖時常用)
      setnx 屬性名 屬性值
      # 批量設定多個值
      mset 屬性名 屬性值 屬性名 屬性值 屬性名 屬性值 ......
      # 批量設定多個值,如果其中有一個屬性已經存在,則所有值都設定失敗
      msetnx 屬性名 屬性值 屬性名 屬性值 屬性名 屬性值 ......
      # 設定物件,值為json字串
      set 物件名 {屬性名:屬性值,屬性名:屬性值,屬性名:屬性值......}
      set 物件名:屬性名 屬性值
      #獲取屬性的值後修改屬性值
      getset 屬性名 屬性值

    • # 查詢屬性值
      get 屬性名
      # 批量查詢屬性值
      mget 屬性名 屬性名 ......
      # 查詢物件的屬性值
      get 物件名:屬性名 物件名:屬性名 ......
      mget 物件名:屬性名 物件名:屬性名 ......
    • # 查詢屬性值的長度
      strlen 屬性名

    • # 從當前資料庫中移除該值
      move 屬性名 當前資料庫號

  • 改、替換

    • # 替換字串,從初始字元值開始替換字元
      getrange 屬性名 初始字元值 替換字元

  • 追加

    • # 在字元的尾部追加字元,返回的是新字元的長度,如果該屬性不存在,相當於新建一個屬性
      append 屬性名 屬性值

  • 擷取

    • # 擷取字串,不改變原屬性值,結尾字元值為-1時,擷取到最後一個字元
      getrange 屬性名 初始字元值 結尾字元值

  • 判斷是否存在

    • # 判讀某個列是否存在,返回1,表明該值存在,返回0,表明該值不存在
      exists 屬性名

  • 自增、自減、步長

    • # 加1操作
      incr 屬性名
      # 減1操作
      decr 屬性名
      # 設定步長
      # 增加
      incrby 屬性名 步長
      # 減少
      decrby 屬性名 步長

  • 應用場景

    • 計數器

    • 統計數量

    • 物件快取儲存

2、List,列表

    • # 在列表的頭部設定值
      lpush 列表名 列表值
      lpush 列表名 列表值1 列表值2 列表值3 ......
      # 在列表的尾部設定值
      rpush 列表名 列表值
      rpush 列表名 列表值1 列表值2 列表值3 ......
      # 把列表中的最後一個值彈出,並把該值放到新的列表中
      rpoplpush 原列表 新列表

    • # 獲取列表的值
      lrange 列表名
      # 獲取指定下標的值
      lindex 列表名 下標
      # 查詢列表長度
      llen 列表名

  • 改、替換

    • # 更新列表中指定下標的值,列表或者下標不存在,報錯
      lset 列表名 下標 值

    • # 刪除列表中的第一個元素
      lpop 列表名
      # 刪除列表中的最後一個元素
      rpop 列表名
      # 刪除指定的值,如果有重複值,可以指定移除幾個
      lrem 列表名 個數 列表值

  • 插入

    • # 在列表中的某一個元素之前或之後插入值
      linsert 列表名 before或after 被插入的元素值 要插入的元素值

  • 截斷

    • # 截斷列表,會改變列表中的值
      ltrim 列表名 初始下標 結束下標

  • 判斷是否存在

    • # 判斷列表是否存在
      exists 列表名

  • 應用場景

    • 佇列

3、Set,不可重複的集合

    • # 設定值
      sadd 集合名 集合值

    • # 檢視集合值
      smembers 集合名
      # 查詢集合的長度
      scard 集合名
      # 隨機查詢集合中的某一個值
      srandmember 集合名
      # 隨機查詢集合中的某幾個值
      srandmember 集合名 個數

    • # 刪除集合中的某個元素
      srem 集合名 值
      # 隨機刪除集合中的某一個值
      spop 集合名

  • 移動

    • # 移動集合1中的某個值到另外一個集合2
      smove 集合1 集合2 值

  • 判斷是否存在

    • # 判斷某個值是否存在集合中
      sismembers 集合名 值

  • 差集、交集、並集

    • # 集合A - 集合B
      sdiff A B
      # 集合A ∩ 集合B
      sinter A B
      # 集合A ∪ 集合B
      sunion A B

  • 應用場景

    • 共同關注

    • 推薦好友

4、Hash,雜湊表,key-value

    • # 設定一個值
      hset 雜湊表名 欄位名 欄位值
      # 批量設定值
      hmset 雜湊表名 欄位名1 欄位值 欄位名2 欄位值 ......
      # 新增一個值,如果已經存在該值,則新增失敗
      hsetnx 雜湊表名 欄位名 欄位值

    • # 查詢欄位值
      hget 雜湊表名 欄位名
      # 批量查詢值
      hmget 雜湊表名 欄位名1 欄位名2 ......
      # 查詢雜湊表全部的欄位名和值
      hgetall 雜湊表名
      # 只查詢雜湊表中的所有欄位
      hkeys 雜湊表名
      # 只查詢雜湊表中的所有欄位值
      hvals 雜湊表名
      # 查詢雜湊表的長度
      hlen 雜湊表名

    • # 刪除雜湊表中的某一個欄位
      hdel 雜湊表名 欄位名

  • 增量、減量

    • # 增加欄位值
      hincrby 雜湊表名 欄位名 增量
      # 刪除欄位值incr
      hincrby 雜湊表名 欄位名 減量(負值)

  • 判斷是否存在

    • # 判斷雜湊表中的某個欄位是否存在
      hexists 雜湊表名 欄位名

  • 應用場景

    • 本質和String很相似,Hash適合做物件的儲存,String適合做字串的儲存

    • 適合儲存物件或者易變動的資訊

5、ZSet、有序集合

    • # 增加一個值
      zadd 集合名 序號 集合值
      # 增加多個值
      zadd 集合名 序號 集合值 序號 集合值 ......

    • # 檢視集合中的所有元素
      zrange 集合名 0 -1
      # 檢視集合中的元素個數
      zcard 集合名
      # 查詢某一個區間的值的個數
      zcount 集合名 最小值 最大值

    • # 移除集合中的某個元素
      zrem 集合名 集合值

  • 排序

    • # 升序語法:zrangebyscore 集合名 最小值 最大值 [顯示key] [限制個數]
      zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

      # 從小到大排序,只顯示value
      zrangebyscore 集合名 -inf +inf
      # 從小到大排序,顯示key和value
      zrangebyscore 集合名 -inf +inf withscores

      # 降序語法:zrevrange key start stop [WITHSCORES]
      zrevrange 集合名 開始值 結束值 [WITHSCORES]

  • 應用場景

    • 排序

    • 排行榜

    • 帶權重執行操作

6、Geospatial,地理位置

原理:底層是Zset,所以可以用Zset的命令操作Geo

官方文件https://www.redis.net.cn/order/3685.html

  • 新增地理位置,geoadd

    • # 語法:geoadd key longitude latitude member
      # 有效的經度從-180度到180度,有效的緯度從-85.05112878度到85.05112878度
      geoadd 集合名 經度 緯度 名稱 [經度 緯度 名稱 ......]

  • 查詢地理位置,geopos

    • # 語法:geopos key member [member ...]
      geopos 集合名 集合值 [集合值 ......]

  • 查詢距離,geodist

    • # 語法:geodist key member1 member2 [m|km|ft|mi]
      geodist 集合名 元素1 元素 2 [里程單位]

  • 附近的人,以指定位置為中心,georadius

    • # 語法:georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

      georadius 集合名 經度 維度 半徑 里程單位 [經緯度位置] [距離] [距離hash表示] [count 個數] [遞增|遞減]

      # 根據 指定位置 的距離半徑查詢附近的人
      georadius 集合名 經度 維度 半徑 里程單位
      # 根據 指定位置 的距離半徑查詢附近的人,以及直線距離
      georadius 集合名 經度 維度 半徑 里程單位 WITHDIST
      # 根據 指定位置 的距離半徑查詢附近的人,以及直線距離雜湊表示
      georadius 集合名 經度 維度 半徑 里程單位 WITHHASH
      # 根據 指定位置 的距離半徑查詢附近的人,以及定位
      georadius 集合名 經度 維度 半徑 里程單位 WITHCOORD
      # 根據 指定位置 的距離半徑查詢附近的人,並限制人數
      georadius 集合名 經度 維度 半徑 里程單位 COUNT 個數

  • 附近的人,以集合中存在的元素為中心,georadiusbymember

    • # 語法:georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

      georadiusbymember 集合名 元素 半徑 里程單位 [經緯度位置] [距離] [距離hash表示] [count 個數] [遞增|遞減]

      # 根據 集合中的元素 的距離半徑查詢附近的人
      georadiusbymember 集合名 元素 半徑 里程單位
      # 根據 集合中的元素 的距離半徑查詢附近的人,以及直線距離
      georadiusbymember 集合名 元素 半徑 里程單位 WITHDIST
      # 根據 集合中的元素 的距離半徑查詢附近的人,以及直線距離雜湊表示
      georadiusbymember 集合名 元素 半徑 里程單位 WITHHASH
      # 根據 集合中的元素 的距離半徑查詢附近的人,以及定位
      georadiusbymember 集合名 元素 半徑 里程單位 WITHCOORD
      # 根據 集合中的元素 的距離半徑查詢附近的人,並限制人數
      georadiusbymember 集合名 元素 半徑 里程單位 COUNT 個數

  • 查詢距離,距離用編碼顯示,geohash

    • # 語法:geohash key member [member ...]
      geohash 集合名 元素1 [元素2 ......]

7、HyperLogLog,計數

  • 應用場景

    • 網站訪問量統計

    • # 語法:pfadd key element [element ...]
      pfadd 集合名 元素 [元素 ......]
  • 統計

    • # 語法:pfcount key [key ...]
      pfcount 集合 [集合 ......]
  • 合併

    • # 語法:pfmerge destkey sourcekey [sourcekey ...]
      pfmerge 目標集合 原集合 [原集合 ......]

8、BitMap,位運算場景

  • 應用場景

    • 儲存結果為是或否的資料,如:是否打卡、是否登入、是否為活躍使用者......

  • 設定值

    • # 語法:setbit key offset value
      setbit 集合名 位標誌 值
  • 獲得值

    • # 語法:getbit key offset
      getbit 集合名 位標誌
  • 統計值

    • # 語法:bitcount key [start end]
      bitcount 集合名 [開始 結束]