redis(二) 資料型別

2021-09-02 11:59:25 字數 3228 閱讀 8878

參考文章:

一、redis資料型別

·1.1 字串-strings

有人說,如果只使用redis中的字串型別,且不使用redis的持久化功能,那麼,redis就和memcache非常非常像了。這說明strins型別是乙個很基礎的資料型別,也是任何儲存系統都必須必備的資料型別。字串型別是二進位制安全的。

1、set

建立string。注意:此命令缺省會覆蓋已存在key的值。

用法:

set joan dora

set joan dora nx -->如果存在key為joan時,則會失敗

set joan dora xx -- >成功

2、incr

如果value是數字型別(當然也是string的),可以使用此命令,進行加法操作。

用法:

set counter 100

incr counter -->101

incrby counter 49 -->150

在遇到數值操作時,redis會將字串型別轉換為數值。由於incr等指令本身就具有原子操作的特性,所以我們完全可以利用redis的incr、incrby、decr、decrby等指令來實現原子計數的效果。假如,在某種場景下有三個客戶端同時讀取了mynum的值(值為2),然後對其同時進行了加1操作,那麼,最後mynum的值一定是5。不少**都利用redis的這個原子特性來實現業務上的統計計數需求。

3、get

取值,用法:

get joan -->dora
1.2 列表-lists

rdis中的lists在底層實現並不是陣列,而是鍊錶,也就是對於乙個具有上百萬個元素的lists來說,在頭部和尾部插入乙個新元素,其時間複雜度是常數級別的。雖然lists有這樣的優勢,但同樣尤其弊端,那就是,鏈表型lists的元素定位會比較慢,而陣列型lists的元素定位就會快很多。

lpush、rpush、lrange

redis 的一種資料結構:雙端列表。lpush是將alue放到列表的頭部,rpush是將value放在列表的尾部。

用法:

rpush mylist a

rpush mylist b

lpush mylist first

lrange mylist 0 -1 -->0代表列表的第乙個 -1代表列表的最後乙個 -2 是倒數第二個

rpush mylist a b c d "joandora" --> 連續存放多個值

應用場景:

1、我們可以利用lists來實現乙個訊息佇列,而且可以確保先後順序,不必像mysql那樣還要通過order by來進行排序。

2、利用lrange可以很方便的實現分頁功能。

1.2.1 ltrim 

對乙個列表進行修剪,讓列表只保留制定區間的元素。例如:ltrim 0 2:表示只保留list前三個元素,其他元素都刪除。

1.3 無序不重複集合 set

redis中的集合是一種無序的集合集合相關的操作也很豐富,如新增刪除已有元素,取交集、並集、差集等。

用法: 

//向集合myset中加入乙個新元素"one"

127.0.0.1:6379> sadd myset "one"

(integer) 1

127.0.0.1:6379> sadd myset "two"

(integer) 1

//列出集合myset中的所有元素

127.0.0.1:6379> smembers myset

1) "one"

2) "two"

//判斷元素1是否在集合myset中,返回1表示存在

127.0.0.1:6379> sismember myset "one"

(integer) 1

//判斷元素3是否在集合myset中,返回0表示不存在

127.0.0.1:6379> sismember myset "three"

(integer) 0

//新建乙個新的集合yourset

127.0.0.1:6379> sadd yourset "1"

(integer) 1

127.0.0.1:6379> sadd yourset "2"

(integer) 1

127.0.0.1:6379> smembers yourset

2) "2"

//對兩個集合求並集

127.0.0.1:6379> sunion myset yourset

1) "1"

2) "one"

3) "2"

4) "two"

1.4 有序不重複集合 sorted set

有序集合中的每個元素都關聯乙個序號(score),這便是排序的依據。很多時候,我們都將redis中的有序集合叫做zsets。這是因為在redis中,有序集合相關的操作指令都是以z開頭,比如:zrange、zadd等。

zadd 1 a  --> 1是排序

zrange myset 0 -1 --> 檢視集合元素

zrevrange myset 0 -1 --> 檢視集合元素,反向

zrange myset 0 -1 withscores --> 列印元素的時候,間隔列印出序號

1.5 雜湊-hashes

雜湊是從redis-2.0版本之後才有的資料結構。hashes存的是字串和字串值之間的對映,比如乙個使用者要儲存其全名、姓氏、年齡等等,就很適用hashes。

hmset key field value  --> 將多個field-vaue存放到key中

hget webset yahoo --> 能查,不過結果為空

hincrby user age 10 --> 給hash中age加10

二、其他操作命令

2.1、mset、mget

可同時完成多個key-value訪問值

用法:

mset a 10 b 20 c 30

mget a b c

2.2、del

刪除key-value

用法:del mylist

2.3、pop

取值,和push類似,也是分左和右。

用法:rpop mylist

lpop mylist

(二)redis的資料型別

redis可以儲存資料,但是不加限定,這裡的資料指的是個什麼樣的資料就成了疑問,因為面對現實社會中存在的資訊,不同語言或者不同工具,會把它們劃分成不同的資料型別,每種資料型別甚至又有自己獨特的表示方式。所以引出了redis這個工具中可以容納的資料型別。redis的資料型別可以分為字串 雜湊表 鍊錶 ...

redis的資料型別(二)string型別

下面講解value,value包括string list set sorted set hash string是最基本的型別,而且stirng型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg或者序列化的物件。從內部實現來看其實string可以看做byte陣列,最大上限...

redis資料型別

redis對比與memcached 最大的優勢就是支援更多靈活的資料結構,豐富的資料操作 redis現支援的資料型別有 字串,列表,集合,雜湊,有序集合 1.字串 普通資料型別 2.列表 簡單的字串列表,按照插入順序排序。你可以新增乙個元素到列表的頭部 左邊 或者尾部 右邊 適用於 對資料頭尾操作頻...