總結了下Redis五種數據結構的特定,本文主要參考 《redis in action》。
字符串
首先,字符串類型是最基礎的類型,在redis里面字符串可以存儲3中類型的值,字節串、整數、浮點數。這里整數或者浮點數是可以執行自增或自減的。
字符串常用命令
列表
列表類似於數據結構的鏈表,可以給定int范圍去顯示這個列表中的數據。列表允許用戶從序列的兩端推入或者彈出元素,獲取列表元素,以及執行各種常見的列表操作。
列表經常用來存儲任務信息、最近瀏覽過的文章或者聯系人信息等。
列表的一個主要優點在於他可以包含多個字符串值,而且都集中在一個區域,而且多個字符串是可以重復的。
列表常用命令
rpush list-key item
lrange list-key 0 -1
當你像隊列一樣使用列表時候,這些阻塞命令是非常有用的。
集合
redis的集合以無序的方式來存儲多個各不相同的元素,用戶可以快速地對集合執行添加元素操作、移除元素操作以及檢查一個元素是否存在於集合中。集合跟列表不同之處在於,列表可以存儲多個相同的字符串,而集合則通過使用散列來保證存儲的字符串各不相同(這些散列表只有建,並沒有與鍵相關聯的值)。
因為redis講的集合使用無序方式存儲元素,所以用戶不能像使用列表那樣,從某一端推入元素,或者彈出元素。
集合常用命令
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item2"
2) "item3"
3) "item"
127.0.0.1:6379> sismember set-key item2
(integer) 1
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 0
127.0.0.1:6379> smembers set-key
散列
redis的散列可以存儲多個鍵值對之間的映射。散列在很多方面就像一個微縮版的redis,不少字符串命令都有相應的散列版本。
一個key name的散列中,有多個key value對。我們可以把這種數據聚集看做是關系庫中的行。
散列常用命令
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
127.0.0.1:6379> hset hash-key sub-key1 value
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key1
"value"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value"
盡管有hgetall存在,但是hkeys和hvalues也是非常有用的;如果散列包含的值非常大,那么用戶可以先使用hkeys取出散列包含的所有鍵,然后使用hget取出我們需要的值,從而避免因為一次獲取多個大體積的值而導致服務器阻塞。
有序集合
有序集合相比集合多出一個分值(score),分值必須為浮點數。有序集合既可以根據成員訪問,又可以根據分值或分值的排列順序來訪問的結構。
有序集合常用命令
127.0.0.1:6379> zadd zset-key 982 menber0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
5) "menber0"
6) "982"
127.0.0.1:6379> zrange zset-key 0 -1
1) "member1"
2) "member0"
3) "menber0"
127.0.0.1:6379> zrangebyscore zset-key 0 800
1) "member1"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
3) "menber0"
4) "982"
下圖展示了對兩個輸入有序集合執行交集運算並得到輸出有序集合的過程,這次交集運算使用的是默認的聚合函數sum,所以輸出有序集合成員的分值都是通過加法計算得出的。
下圖展示了使用聚合函數min執行並集運算的過程。