首頁 > 軟體

一文快速搞懂Redis的幾種資料型別方式

2022-10-28 14:06:12

Redis簡介

Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。

它支援多種型別的資料結構,如 字串(strings), 雜湊(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。

Redis 內建了 複製(replication),LUA指令碼(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分割區(Cluster)提供高可用性(high availability)。

Redis有幾種資料型別

Redis是一個以key-value儲存系統,一個Key鍵值對應一個value值,鍵值不能重複,它支援儲存的value型別有5種。 

Redis支援五種資料型別:

  • String(字串)
  • List(列表)
  • Set(集合)
  • Hash(雜湊)
  • Zset(sorted set:有序集合)

Redis的基本指令

在講資料型別前先來看一下Redis的基本指令,主要是針對Key鍵值和的一些操作。

Redis預設16個資料庫,類似陣列下標從0開始,初始預設使用0號庫

可以通過以下指令來修改預設存放的資料庫

select   <dbid>        如: select 1 

Redis針對Key鍵值的一些基本操作。

keys * 			查詢當前庫的所有鍵,返回鍵值
exists  <key>     	判斷某個鍵是否存在,返回0或1
type  <key>			檢視鍵的型別
del  <key>			刪除某個鍵
expire   <key>   <seconds>		為鍵值設定過期時間,單位秒
ttl   <key>			檢視還有多少秒過期,-1表示永不過期,-2表示已過期
dbsize					檢視當前資料庫的key的數量

Demo樣例,初始Redis中有a,b兩個鍵。

清空Redis庫的兩個指令

Flushdb		清空當前庫
Flushall		清空全部庫

String(字串)

  • String是Redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value。
  • String型別是二進位制安全的。意味著Redis的string可以包含任何資料。比如jpg圖片或者序列化的物件 。
  • String型別是Redis最基本的資料型別,一個Redis中字串value最多可以是512M

基本指令:

set   <key>  <value>		新增鍵值
get   <key>			查詢對應的鍵值
append  <key>  <value>		將給定的<value> 追加到原鍵值的末尾
strlen  <key>			獲取鍵值的長度
setnx  <key>  <value>			只有在 key 不存在時設定 key 的值
incr  <key>				將 key 中儲存的數位值自增1,只能對數位值操作,如果為空,新增值為1
decr  <key>				將 key 中儲存的數位值減1,只能對數位值操作,如果為空,新增值為-1
incrby / decrby  <key>  <步長>			將 key 中儲存的數位值增 / 減。自定義步長。

mset  <key1>  <value1>  <key2>  <value2> ....		同時設定一個或多個 key-value對 
mget  <key1>   <key2>   <key3> .....					同時獲取一個或多個 value
msetnx <key1>  <value1>  <key2>  <value2>  .....		同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
getrange  <key>  <起始位置>  <結束位置>			獲得值的範圍,類似java中的substring
setrange  <key>   <起始位置>   <value>				用 <value>  覆寫<key> 所儲存的字串值,從<起始位置>開始。
setex  <key>  <過期時間>   <value>					設定鍵值的同時,設定過期時間,單位秒。
getset <key>  <value>											以新換舊,設定了新值同時獲得舊值。

Demo樣例

List(列表)

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

它的底層實際是個雙向連結串列,對兩端的操作效能很高,通過索引下標的操作中間的節點效能會較差。

基本指令:

lpush/rpush  <key>  <value1>  <value2>  <value3> ....			從左邊/右邊插入一個或多個值。
lpop/rpop  <key> 				從左邊/右邊吐出一個值並刪除。值在鍵在,值亡鍵亡。
rpoplpush  <key1>  <key2> 		從<key1>列表右邊吐出一個值,插到<key2>列表左邊。
lrange <key> <start> <stop>		按照索引下標獲得元素(從左到右)
lindex <key> <index>					按照索引下標獲得元素(從左到右)
llen <key>			獲得列表長度 
linsert <key>  before <value>  <newvalue>	在<value>的前面插入<newvalue> 插入值
lrem <key> <n>  <value>		從左邊刪除n個value(從左到右)

Demo樣式

Set(集合)

Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的,當你需要儲存一個列表資料,又不希望出現重複資料時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要介面,這個也是list所不能提供的。

Redis的Set是string型別的無序集合。它底層其實是一個value為null的hash表,所以新增,刪除,查詢的複雜度都是O(1)。

基本指令:

sadd <key>  <value1>  <value2> .....   		將一個或多個 value元素加入到集合 key 當中,已經存在於集合的 value 元素將被忽略。
smembers <key>		取出該集合的所有值。
sismember <key>  <value>			判斷集合<key>是否為含有該<value>值,有返回1,沒有返回0
scard   <key>		返回該集合的元素個數。
srem <key> <value1> <value2> ....			刪除集合中的某個元素。
spop <key>		隨機從該集合中吐出一個值並刪除。
srandmember <key> <n>		隨機從該集合中取出n個值。不會從集合中刪除
sinter <key1> <key2>		返回兩個集合的交集元素。
sunion <key1> <key2>  	返回兩個集合的並集元素。
sdiff <key1> <key2>		返回兩個集合的差集元素。

Demo樣式

Hash(雜湊)

  • Redis hash 是一個鍵值對集合。
  • Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
  • 類似Java裡面的Map<String,String>

基本指令:

hset <key>  <field>  <value>		設定<key>集合中指定欄位的值
hget <key>  <field>		從<key>集合取出欄位的value
hmset <key>  <field1> <value1> <field2> <value2>...		批次設定hash的值
hexists key  <field>		檢視雜湊表 key 中,給定域 field 是否存在。
hkeys <key>		列出該hash集合的所有field
hvals <key>			列出該hash集合的所有value
hincrby <key> <field>  <increment>	將該物件中指定域的值增加給定的value,原子自增操作,只能是integer的屬性值可以使用
hsetnx <key>  <field> <value>		將雜湊表 key 中的域 field 的值設定為 value ,當且僅當域 field 不存在 .

Demo樣式

Zset(sorted set:有序集合)

Redis有序集合zset與普通集合set非常相似,是一個沒有重複元素的字串集合。不同之處是有序集合的每個成員都關聯了一個評分(score) ,這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重複了 。

因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個範圍的元素。存取有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重複成員的智慧列表。

基本指令:

zadd  <key> <score1> <value1>  <score2> <value2>...		將一個或多個 value元素及其 score 值加入到有序集 key 當中。
zrange <key>  <start> <stop>  [WITHSCORES]  		返回有序集 key 中,下標在<start> <stop>之間的元素,帶WITHSCORES,可以讓分數一起和值返回到結果集。
zrangebyscore key min max [withscores] [limit offset count]		返回有序集 key 中,所有 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序整合員按 score 值遞增(從小到大)次序排列。 
zrevrangebyscore key max min [withscores] [limit offset count]		同上,改為從大到小排列。 
zincrby <key> <increment> <value>		為元素的score加上增量
zrem  <key>  <value>  		刪除該集合下,指定值的元素 
zcount <key>  <min>  <max> 		統計該集合,分數區間內的元素個數 
zrank <key>  <value> 			返回該值在集合中的排名,從0開始。

Demo樣式

RedisDesktopManager資料檢視工具

RedisDesktopManager是一款開源的Redis資料庫管理應用程式。

下載完成後,安裝就直接點下一步即可

安裝完成後建立連線後就可以使用了。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com