1. 程式人生 > 程式設計 >Redis 的資料結構

Redis 的資料結構

redis 是 key-value 型別的資料庫,key 通常是一個字串,但它的value對應5種資料型別

key 的定義注意事項

它的 key 在定義時,需要注意以下事項

  • 不要超過 1024 個位元組,過長除了會消耗記憶體,還會降低查詢效率
  • 有統一的命名規範

key 常用的命令

  • 查詢所有的鍵keys *
  • 查詢所有以某個字串開頭的的鍵keys 字串?
  • 刪除鍵del 鍵1 鍵2
  • 檢視鍵是否存在exists 鍵 存在返回1 不存在返回0
  • 對鍵重新命名rename 鍵 新鍵名
  • 設定過期時間expire 鍵 秒
  • 檢視鍵的剩餘過期時間ttl 鍵 返回剩餘的秒 如果鍵沒有設定超時時間返回-1
  • 檢視鍵對應的值的型別type 鍵 sorted-set 型別的值會返回 zset

五種資料型別

redis 的值有五種資料型別

  • String:儲存字串、整數、浮點數
  • list: 儲存字串、整數、浮點數列表
  • set:儲存字串、整數、浮點數集合
  • sort set:儲存有序字串、整數、浮點數集合
  • hash:儲存鍵值對

比較常用的是 Stringhash

string

string 型別的資料在redis中是以二進位制的方式儲存的,這就避免了編碼格式的問題,存入的是什麼編碼格式的字串,讀取的就是什麼編碼格式的字串

  • 以二進位制形式儲存,存入和獲取的資料一致
  • value 最多可以容納的資料長度是 512M

string 常用命令

  • 賦值set 鍵 值
  • 不存在才賦值:setnx 鍵 值 存在不賦值,返回0, 不存在才賦值,返回1
  • 取值get 鍵 獲取鍵的值
  • 修改getset 鍵 新值 將鍵的值改為新值
  • 刪除del 鍵 刪除鍵的值
  • 數值加1inc 鍵 如果 鍵 不存在,則建立 鍵 並設定值為0再加1,如果存在就直接加1,如果存在但值不能轉成整型,就會報錯
  • 數值減1decr 鍵,decr 正好 與 inc 命令相反,它是減1
  • 數值加::incby 鍵 數值,與 inc 鍵 相同,不同的地方在於他指定了要加的數值
  • 數值減decrby 鍵 數值,與 inc 鍵 相同,不同的地方在於他指定了要減的數值
  • 拼接append 鍵 值 在指定鍵後面拼接值,如果鍵不存在,建立 鍵 並初始化化為 值
  • 判斷鍵是否存在exists 鍵, 存在返回1,不存在返回0

hash

hash 型別可以看做是 string key 和 string value 的 map 容器

一個hesh可以儲存 4294967295 個鍵值對

hash 常用命令

  • 賦值hset 鍵 hash的鍵 hash的值 存入一對 hash ,同一個 鍵 可以存入多對hash
  • 批量賦值hmset 鍵 hash的鍵1 hash的值1 hash的鍵2 hash的值2 在一個鍵中同時存入多對hash
  • 取值hget 鍵 hash的鍵 取出 hash鍵對應的值
  • 批量取值hmget 鍵 hash的鍵1 hash的鍵2 取出 hash鍵1、hash鍵2對應的值
  • 獲取全部的值hgetall 鍵 獲取 鍵 中所有 hash鍵對應的值
  • 刪除hdel 鍵 hash的鍵1 hash的鍵2 刪除hash的鍵1、hash的鍵2對應的鍵值對
  • 數值加::hincby 鍵 hash的鍵 數值,給 hash的鍵對應的值 加上指定的數值
  • 判斷某個 hash鍵 是否存在hexists 鍵 hash的鍵, 存在返回1,不存在返回0
  • 獲取 hash對 的數量hlen 鍵 獲取該鍵中 hash 對的數量
  • 獲取所有的 hash鍵hkeys 獲取該鍵中 hash鍵的列表
  • 獲取所有的 hash值hvals 獲取該鍵中 hash值的列表

list

Redis列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)

一個列表最多可以包含 232 - 1 個元素 (4294967295,每個列表超過40億個元素)。

如果列表中的所以元素被刪除,那麼列表本身也會被刪除

list 常用命令

  • 左端新增lpush 鍵 值1 值2 值3 在list左邊新增值 如果鍵不存在則建立 插入後的順序為值3 值2 值1
  • 右端新增rpush 鍵 值1 值2 值3 在list右邊新增值 如果鍵不存在則建立 插入後的順序為值1 值2 值3
  • 檢視lrange 鍵 開始下標 結束下標 包括開始不包括結束 下標可以從0開始 也可以從-1開始,-1就表示倒數第一個
  • 左端彈出lpop 鍵 刪除掉list左邊第一個元素
  • 右端彈出rpop 鍵 刪除掉list右邊第一個元素
  • 獲取列表中元素的個數llen 鍵 如果鍵不存在,返回0
  • list存在時,左端新增lpushx 鍵 值 鍵存在則新增,鍵不存在不新增
  • list存在時,右端新增rpushx 鍵 值 鍵存在則新增,鍵不存在不新增
  • 批量刪除某個元素lrem 鍵 個數 元素 個數為正數則從左往右刪除 個數為負數則從右往左刪除 個數為0則刪除所有 舉例 lrem nameList 2 tom 表示從左往右刪除 nameList 中2個 tom 元素。lrem nameList -3 joy 表示從右往左刪除 nameList 中3個 joy 元素。lrem nameList 0 ros 刪除nameList中所以的 ros
  • 修改某一下標的值lset 鍵 下標的值 下標可以從0開始 也可以從-1開始,-1就表示倒數第一個 如果下標存在則覆蓋原有值 如果下標不存在則報錯
  • 在某個元素之前插入元素linsert 鍵 before 元素 要插入的元素 從左往右匹配第一個找到的元素 插入之後,插入點後面的元素下標+1
  • 在某個元素之後插入元素linsert 鍵 after 元素 要插入的元素 從左往右匹配第一個找到的元素 插入之後,插入點後面的元素下標+1
  • 將連結串列a的尾部元素彈出插入到連結串列b的頭部rpoplpush 鍵a 鍵b 完成之後 連結串列a會少一個元素 連結串列b會多一個元素

set

set 可以看成是沒有排序的字元集合,和list不同的是 set 中不允許出現重複元素

一個set 最多可以包含 232 - 1 個元素

set 常用命令

  • 新增元素sadd 鍵 元素1 元素2 元素3 重複的元素只會保留一份
  • 刪除元素srem 鍵 元素1 元素2
  • 檢視元素smembers 鍵 它會列出所有的元素
  • 檢視set中是否包含某元素sismember 鍵 元素 返回1表示存在 0表示不存在
  • 獲取set中元素的數量scard 鍵
  • 隨機獲取一個元素srandmember 鍵

集合運算

假設 set1 中有 a、b、c, set2 中有 1、2、c

  • 差集(補集)運算sdiff 鍵a 鍵b 誰在前面,求誰的差集(補集)

set1的差集(補集)為紅色部分中的 1、2,命令寫作 sdiff set1 set2

set2的差集(補集)為紅色部分中的 a、b,命令寫作 sdiff set2 set1

  • 儲存差集(補集)到新setsdiffstore 新集合 集合1 集合2 將集合1的差集(補集) 存入新集合

  • 交集運算sinter 鍵a 鍵b 結果是兩個set 中都有的元素

  • 儲存交集到新setsinterstore 新集合 集合1 集合2 將集合1 和集合2的交集存入新集合

  • 並集運算sunion 鍵a 鍵b 會將兩個 set 中的元素合併在一起,重複的元素只會保留一份

  • 儲存並集到新setsunionstore 新集合 集合1 集合2 將集合1 和集合2的並集存入新集合

sorted-set

有序的set集合,除了順序其他都和set一致,比如不允許出現重複元素

sorted-set 中的每一個成員都有一個對應的分數,sorted-set 通過分數確定成員的順序

如果兩個元素的分數一樣,那麼按照元素的字典順序排序

常用的命令

  • 新增元素zadd 鍵 分數1 值1 分數2 值2 例如 zadd sortName 90 張三 93 王五
  • 更新分數zadd 鍵 新分數 值1 例如 zadd sortName 100 張三
  • 獲取元素的分數zscore 鍵 值
  • 獲取元素數量zcard 鍵
  • 刪除某個元素zrem 鍵 值1 值2
  • 檢視元素zrange 鍵 序號1 序號2 序號可以從0開始 也可以從-1開始,-1就表示倒數第一個 比如 zrange sortName 0 -1 表示檢視 sortName 的第一個元素到最後一個元素
  • 檢視元素和對應的分數zrange 鍵 序號1 序號2 withscorse 按分數從小到大排序
  • 檢視元素和對應的分數zrevrange 鍵 序號1 序號2 withscorse 按分數從大到小排序
  • 按照排名的範圍刪除元素zremrangebyrank 鍵 序號1 序號2 包含開始不包含結束
  • 按照分數的範圍刪除元素zremrangebyscore 鍵 分數1 分數2 包含開始分數不包含結束分數
  • 獲取某段分數內的元素zrangebyscore 鍵 分數1 分數2 withscorse limit 數字1 數字2 包含開始分數不包含結束分數, 結果按分數從小到大排序, withscorse是可選引數,加上之後會顯示分數 limit也是可選引數,例如 limit 0 2 表示只取結果集的前兩位
  • 給元素加分數zincrby 鍵 要加的分數 值
  • 獲取某段分數中元素的個數zcount 鍵 分數1 分數2

參考

Redis 官網