日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis的数据类型详解

發布時間:2025/4/16 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis的数据类型详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串類型

雖然叫字符串類型,但是里面也可以由數字。

  • 創建一個字符串類型的key
127.0.0.1:6379> set name tom OK 127.0.0.1:6379> get name "tom" 127.0.0.1:6379> type name string
  • 還可以在value的尾部追加字符串
string 127.0.0.1:6379> append name qq (integer) 5 127.0.0.1:6379> get name "tomqq"
  • 用set可以設置一個鍵值對,用mset可以一次設置多個鍵值對,用mget可以一次獲取多個key的值
  • 127.0.0.1:6379> mset name jerry age 2 addr hebei OK 127.0.0.1:6379> mget name age addr 1) "jerry" 2) "2" 3) "hebei"
  • 用strlen可以獲取key字符串的長度
  • 127.0.0.1:6379> strlen name (integer) 5 127.0.0.1:6379> strlen age (integer) 1
  • 可以使用incr的decr將值加1或者減1,但需要注意的是只能用在整數類型中
  • 127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> type age string 127.0.0.1:6379> incr age (integer) 11 127.0.0.1:6379> decr age (integer) 10
  • 也可以使用incrby或decrby設置每次自增或者自減不是1而是一個指定的值
  • 127.0.0.1:6379> incrby age 3 (integer) 13 127.0.0.1:6379> decrby age 3 (integer) 10

    哈希類型

    • redis的hash其實就是鍵值對的集合
    • 每個hash中可以儲存2^32-1個鍵值對
  • 使用hset和hget可以設置和獲取哈希類型鍵值對得值
  • 127.0.0.1:6379> hset userinfo name cx (integer) 1 127.0.0.1:6379> hset userinfo age 20 (integer) 1 127.0.0.1:6379> hset userinfo addr beijing (integer) 1 127.0.0.1:6379> type userinfo hash 127.0.0.1:6379> hget userinfo age "20"
  • 使用hgetall可以返回哈希中全部的鍵值對
  • 127.0.0.1:6379> hgetall userinfo 1) "name" 2) "cx" 3) "age" 4) "20" 5) "addr" 6) "beijing"
  • 使用hmset和hmget可以一次設置或者獲取多個key所對應的值。
  • 127.0.0.1:6379> hmget userinfo name age 1) "cx" 2) "20"
  • 可以使用keys *查看全部數據對象,使用del命令刪除鍵值對
  • 127.0.0.1:6379> keys * 1) "name" 2) "userinfo" 127.0.0.1:6379> del name

    注意:del是刪除的一個數據對象,比如執行 del userinfo命令會刪除整個userinfo哈希表,想要刪除哈希表中的某個鍵值對需要使用hdel userinfo name.

    列表類型

    • 列表中的元素是有順序的
    • 列表中最多儲存2^32-1個鍵值對
    • 列表的元素是從0開始的
    • 列表其實是雙向的(左L 右R)
  • lpush可以將一個或者多個值插入到列表的首部(如果列表不存在,則創建列表)
  • 127.0.0.1:6379> lpush citylist beijing shanghai guangzhou (integer) 3
  • lrange可以顯示一個列表中的部分元素,在現實的是需要制定起始位置終止位置
  • 127.0.0.1:6379> lrange citylist 0 2 1) "guangzhou" 2) "shanghai" 3) "beijing"
  • rpush可以在列表末尾追加元素
  • 127.0.0.1:6379> rpush citylist shenyang (integer) 4 127.0.0.1:6379> lrange citylist 0 5 1) "guangzhou" 2) "shanghai" 3) "beijing" 4) "shenyang"
  • rpop可以顯示列表末尾的一個元素,并將其從列表中刪除
  • 127.0.0.1:6379> rpop citylist "shenyang" 127.0.0.1:6379> lrange citylist 0 5 1) "guangzhou" 2) "shanghai" 3) "beijing"
  • lpop可以顯示列表首部的一個元素,并將其從列表中刪除。
    llen可以返回列表長度
  • 127.0.0.1:6379> llen citylist (integer) 3
  • lrem可以刪除指定個數的元素,比如從前往后找,找到的前兩個qq
    用正數指定個數:表示從前往后找
    用負數指定個數:表示從后往前找
  • 127.0.0.1:6379> lpush list1 qq baidu taobao sina qq baidu qq taobao qq (integer) 9 127.0.0.1:6379> lrange list1 0 10 1) "qq" 2) "taobao" 3) "qq" 4) "baidu" 5) "qq" 6) "sina" 7) "taobao" 8) "baidu" 9) "qq" 127.0.0.1:6379> lrem list1 2 qq >>>刪除前兩個qq (integer) 2 127.0.0.1:6379> lrange list1 0 10 1) "taobao" 2) "baidu" 3) "qq" 4) "sina" 5) "taobao" 6) "baidu" 7) "qq" 127.0.0.1:6379> lrem list1 -1 baidu >>>刪除最后一個baidu (integer) 1 127.0.0.1:6379> lrange list1 0 10 1) "taobao" 2) "baidu" 3) "qq" 4) "sina" 5) "taobao" 6) "qq" 127.0.0.1:6379> lrem list1 0 taobao >>>刪除所有的taobao (integer) 2 127.0.0.1:6379> lrange list1 0 10 1) "baidu" 2) "qq" 3) "sina" 4) "qq"

    lset可以修改某個下標得值,比如說把下標為1的值改為360

    127.0.0.1:6379> lset list1 1 360 OK 127.0.0.1:6379> lrange list1 0 10 1) "baidu" 2) "360" 3) "sina" 4) "qq"
  • linsert可以在指定的值前面或者后面插入新的數據,比如在360的后面添加一個元素cx
  • 127.0.0.1:6379> linsert list1 after 360 cx (integer) 5 127.0.0.1:6379> lrange list1 0 10 1) "baidu" 2) "360" 3) "cx" 4) "sina" 5) "qq"
  • 在生產環境中,列表使用還是比較廣泛的
    很多時候都是從左邊添加數據,從右邊讀取數據,比如我們在緩存中緩存五個數據
  • 127.0.0.1:6379> lpush list2 q1 (integer) 1 127.0.0.1:6379> lpush list2 q2 (integer) 2 127.0.0.1:6379> lpush list2 q3 (integer) 3 127.0.0.1:6379> lpush list2 q4 (integer) 4 127.0.0.1:6379> lpush list2 q5 (integer) 5
  • 會發現新添加的數據在最后面(最下面,最右邊)
  • 127.0.0.1:6379> lrange list2 0 10 1) "q5" 2) "q4" 3) "q3" 4) "q2" 5) "q1"
  • 那么在讀取數據的時候就可以從后讀
  • 127.0.0.1:6379> rpop list2 "q1" 127.0.0.1:6379> rpop list2 "q2" 127.0.0.1:6379> rpop list2 "q3" 127.0.0.1:6379> rpop list2 "q4" 127.0.0.1:6379> rpop list2 "q5"

    這其實是一個生產者-消費者模型,也就是所謂的消息隊列,通常來說消息隊列會用在下訂單、用戶注冊場景中,比如一個用戶提交訂單了,這個訂單會首先保存在消息隊列中,那么這個時候即使數據庫還沒有寫入就宕機了,也是沒有問題的,在啟動以后,通過讀取消息隊列,就可以繼續執行了。

    集合類型(set)

    集合中會有比如交集、并集等這樣的概念。
    sadd可以創建集合,這里我們再結合中添加三個元素

    127.0.0.1:6379> sadd myset qq (integer) 1 127.0.0.1:6379> sadd myset baidu (integer) 1 127.0.0.1:6379> sadd myset sina

    smembers可以獲取集合中的全部元素

    127.0.0.1:6379> smembers myset 1) "baidu" 2) "qq" 3) "sina"

    sismember可以判斷一個元素是否在集合中

    127.0.0.1:6379> sismember myset sina (integer) 1 >>>在集合中 127.0.0.1:6379> sismember myset qqa (integer) 0 >>>不在集合中

    我們在怎樣的場景中會用到交集呢?比如在好友列表中,既是你的好友也是我的好友那就會用到交集。

    有序集合(sortdset)

  • ZADD key score member [[score member] [score member] …]
    將一個或多個 member 元素及其 score 值加入到有序集 key 當中。
  • # 添加單個元素 127.0.0.1:6379> zadd sortdset1 10 qq (integer) 1 # 添加多個元素 127.0.0.1:6379> zadd sortdset1 7 baidu 8 sina 15 taobao (integer) 3
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    有序集成員按 score 值遞增(從小到大)次序排列。
  • 127.0.0.1:6379> zrange salary 0 100 withscores 1) "baidu" 2) "7" 3) "sina" 4) "8" 5) "qq" 6) "10" 7) "taobao" 8) "15"
  • ZCARD key
    返回有序集 key 的基數
  • 127.0.0.1:6379> zcard sortdset1 (integer) 4
  • ZCOUNT key min max
    返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等于 min 或 max )的成員的數量。
  • 127.0.0.1:6379> zcount sortdset1 5 10 (integer) 3 >>>有三個score值在5-10之間taobao的score是15不再這個之間
  • ZSCORE key member
    返回有序集 key 中,成員 member 的 score 值。
    如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil
  • 127.0.0.1:6379> zscore salary baidu "7"
  • ZRANK key member
    返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。
    排名以 0 為底,也就是說, score 值最小的成員排名為 0 。
    使用 ZREVRANK 命令可以獲得成員按 score 值遞減(從大到小)排列的排名。
  • 127.0.0.1:6379> zrank salary baidu (integer) 0 >>>baidu排名第一 127.0.0.1:6379> zrank salary qq (integer) 2 >>>qq排名第三
  • ZINCRBY key increment member
    為有序集 key 的成員 member 的 score 值加上增量 increment。
    可以通過傳遞一個負數值 increment ,讓 score 減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
    當 key 不存在,或 member 不是 key 的成員時, ZINCRBY key increment member 等同于 ZADD key increment member 。
    當 key 不是有序集類型時,返回一個錯誤。
    score 值可以是整數值或雙精度浮點數。

  • ZREM key member [member …]
    移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。
    當 key 存在但不是有序集類型時,返回一個錯誤。

  • ZREVRANGE key start stop [WITHSCORES]
    返回有序集 key 中,指定區間內的成員。
    其中成員的位置按 score 值遞減(從大到小)來排列。
    具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。
    除了成員按 score 值遞減的次序排列這一點外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。

  • 總結

    以上是生活随笔為你收集整理的Redis的数据类型详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。