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:儲存鍵值對
比較常用的是 String、hash
string
string 型別的資料在redis中是以二進位制的方式儲存的,這就避免了編碼格式的問題,存入的是什麼編碼格式的字串,讀取的就是什麼編碼格式的字串
- 以二進位制形式儲存,存入和獲取的資料一致
- value 最多可以容納的資料長度是 512M
string 常用命令
-
賦值:
set 鍵 值
-
不存在才賦值:
setnx 鍵 值
存在不賦值,返回0, 不存在才賦值,返回1 -
取值:
get 鍵
獲取鍵的值 -
修改:
getset 鍵 新值
將鍵的值改為新值 -
刪除:
del 鍵
刪除鍵的值 -
數值加1:
inc 鍵
如果 鍵 不存在,則建立 鍵 並設定值為0再加1,如果存在就直接加1,如果存在但值不能轉成整型,就會報錯 -
數值減1:
decr 鍵
,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
sdiff set2 set1
-
儲存差集(補集)到新set:
sdiffstore 新集合 集合1 集合2
將集合1的差集(補集) 存入新集合 -
交集運算:
sinter 鍵a 鍵b
結果是兩個set 中都有的元素 -
儲存交集到新set:
sinterstore 新集合 集合1 集合2
將集合1 和集合2的交集存入新集合 -
並集運算:
sunion 鍵a 鍵b
會將兩個 set 中的元素合併在一起,重複的元素只會保留一份 -
儲存並集到新set:
sunionstore 新集合 集合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