前提:我們說的數據類型一般是value的數據類型,key的類型都是字符串。
redis字符串【String】
string類型是二進制安全的,意思是redis的string可以包含任何數據,比如jpg圖片或者序列化的對象。
string類型是Redis最基本的數據類型,一個redis中字符串value最多可以是512M
string是redis最基本的類型,一個key對應一個value
redis列表【List】
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
它的底層實際是個雙端鏈表,最多可以包含2^32-1個元素(4294967295,每個列表超過40億個元素)
127.0.0.1:6379> LPUSH fruits apple banana
(integer) 2
127.0.0.1:6379> RPUSH fruits orange
(integer) 3
127.0.0.1:6379> LRANGE fruits 0 -1
1) "banana"
2) "apple"
3) "orange"
redis哈希表【Hash】
Redis hash 是一個string類型的field(字段)和 value(值)的映射表,hash特別適合用于存儲對象。
Redis 中每個hash 可以存儲 2^32-1鍵值對(40多億)
// 設置用戶user:1001 的id name email
HSET user:1001 id 1001 name "Alice" email "alice@example.com"//獲取用戶姓名
HGET user:1001 name
redis集合【Set】
Redis 的SetString類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據,集合對象的編碼可以是intset 或者 hashtable.
Redis中Set集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。
集合中最大的成員數為2^32-1(4294967295,每個集合可存儲40多億個成員)
redis有序集合【ZSet】
zset(sorted set:有序集合)
Redis zset 和set一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數,redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重復。
zset集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。集合中最大的成員數為2^32-1
redis地理空間【GEO】
主要用于存儲地理位置信息,并對存儲的信息進行操作。包括:
添加地理位置的坐標。
獲取地理位置的坐標。
計算兩個位置之間的距離。
根據用戶給定的經緯度坐標來獲取指定范圍內的地理位置集合
redis基數統計【HperLogLog】
HyperLogLog 是用來做基數統計的算法,HyperLogLog的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定且是很小的。|
在Redis里面,每個 HyperLogLog鍵只需要花費12KB內存,就可以計算接近2^64個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
但是,因為HyperLogLog只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以HyperLogLog不能像集合那樣,返回輸入的各個元素。
redis位圖【bitmap】
由0和1狀態表現的二進制位的bit數組
redis位域【bitfield】
通過bitfield命令可以一次性操作多個比特位域(指的是連續的多個比特位),它會執行一系列操作并返回一個響應數組,這個數組中的元素對應參數列表中的相應操作的執行結果。
說白了就是通過bitfield命令我們可以一次性對多個比特位域進行操作。
redis流【Stream】
Redis Stream 主要用于消息隊列(MQ. Message Queue),Redis本身是有一個Redis發布訂閱(pub/sub)來實現消息隊列的功能,但它有個缺點就是消息無法持久化,如果出現網絡斷開、Redis宕機等,消息就公被丟棄。
簡單來說發布訂閱(pub/sub)可以分發消息,但無法記錄歷史消息。
而 Redis Stream提供了消息的持久化和主備復制功能,可以讓任何客戶端訪問任何時刻的數據,并且能記住每一個客戶端的訪問位置,還能保證消息不丟失
redis常見數據類型操作命令
官網英文:https://redis.io/commands/
中文:http://www.redis.cn/commands.html