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