1. 程式人生 > >Redis 基礎資料結構(二)

Redis 基礎資料結構(二)

1.String

字串 string 是 Redis 最簡單的資料結構。Redis 所有的資料結構都是以唯一的 key 字串作為名稱,然後通過這個唯一 key 值來獲取相應的 value 資料。不同型別的資料結構的差異就在於 value 的結構不一樣。

字串結構使用最為廣泛,最常見的就是快取資訊。一般情況下我們是將這些資訊使用JSON序列化成字串,然後將序列化後的字串塞進Redis進行快取,同樣,獲取使用者資訊的時候是會進行一次反序列化的過程。

字串是由多個位元組組成,每個位元組又是由 8 個 bit 組成,如此便可以將一個字串看成很多 bit 的組合,這便是 bitmap「點陣圖」資料結構。

Java中的字串是常量,知道String pool的同學應該很明白這句話的含義,但Redis 的字串是動態字串,是可以修改的字串,內部結構實現上類似於 Java 的 ArrayList,採用預分配冗餘空間的方式來減少記憶體的頻繁分配,內部為當前字串實際分配的空間 capacity 一般要高於實際字串長度 len。當字串長度小於 1M 時,擴容都是加倍現有的空間,如果超過 1M,擴容時一次只會多擴 1M 的空間。需要注意的是字串最大長度為 512M。可以看到擴容機制和Java中的ArrayList有所不同。

鍵值對:

127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> get name
"xiaoming"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)

批量鍵值對:

127.0.0.1:6379> mset name1 xiaoming1 name2 xiaoming2
OK
127.0.0.1:6379> get name1
"xiaoming1" 127.0.0.1:6379> get name2 "xiaoming2" 127.0.0.1:6379> mget name1 name2 1) "xiaoming1" 2) "xiaoming2"

過期和set:

127.0.0.1:6379> set myName xiaoming
OK
127.0.0.1:6379> get myName
"xiaoming"
127.0.0.1:6379> expire myName 5
(integer) 1
127.0.0.1:6379> get myName
(nil)
127.0.0.1:6379> setex myName1 5 xiaoming OK 127.0.0.1:6379> get myName (nil) 127.0.0.1:6379> setnx myName2 xiaoming (integer) 1 127.0.0.1:6379> get myName2 "xiaoming"

計數:

127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> incr age
(integer) 31
127.0.0.1:6379> get age
"31"
127.0.0.1:6379>
127.0.0.1:6379> incrby age 5
(integer) 36
127.0.0.1:6379> set age 9223372036854775807
OK
127.0.0.1:6379> incr age
(error) ERR increment or decrement would overflow