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有所不一樣。數據結構

鍵值對:spa

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)

批量鍵值對:3d

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:code

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"

計數:blog

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
相關文章
相關標籤/搜索