
Redis 基本資料形態
這篇是比較多人整理過的入門文章,不過最近正好在重新學,就把筆記也隨筆記錄在這裡吧!!
本篇主要是參考 https://www.tutorialspoint.com/redis/index.htm 裡的教學,
我所使用到的英文單字、範例都是參考這篇而來!
這是一篇非常棒的入門教學,有一定程式基礎但是沒有 Redis 經驗的人是可以非常順的一次讀完的~
請一定要加到您的必讀清單內!
Redis 的形態有以下幾種
- Strings ( 字串 )
- Hashes ( 鍵值 [Key ⇒ Value] 型式 )
- Lists ( 陣列 )
- Sets ( 不重複的陣列 )
- Sorted Sets ( 有順序的不重複陣列 )
Strings
這是最基本的形態,顧名思義,就是字串囉~~
127.0.0.1:6379> SET name "Wayne Chang" OK 127.0.0.1:6379> GET name "Wayne Chang"
這邊使用到的 Redis Command 是 Set 、 GET,他們是 Redis 中對字串形態資料最基本的指令了~
name 是我們要設定進去的 key
“Wayne Chang” 是字串的 Value
Redis 最高可以支援到 512 megabytes ( 5MB ) 在一個 Strings 的欄位內 ( 真是夠大了… )
Hashes
其實就很像 Java 的 HashMap 那種資料形態,裡面存放這一個一個 Key ⇒ Value 這種 Pair 集合
文字講起來有點抽象,來張圖吧!

他的資料類型像是這樣,一個 user001 裡面是一個 Hash,一個 Hash 裡面又有 name, phone, gender 等等的資訊
這邊使用到的 Redis Command 是 HSET 跟 HGET
127.0.0.1:6379> HSET user001 name "Wayne" (integer) 1 127.0.0.1:6379> HSET user001 phone "0911234567" (integer) 1 127.0.0.1:6379> HSET user001 gender "M" (integer) 1 # HSET 會回傳有多少新的欄位被建立 127.0.0.1:6379> HGET user001 gender "F" # 可以使用 HGET 來取得對應 Key 的欄位值 # 此範例為取得 user001 這個 Hash 物件的 gender 欄位值
note:
有些教學會這樣做
127.0.0.1:6379> HSET user002 name "Wayne" phone "0911234567" gender "F" (integer) 3 # 可以看到一次對 3 個欄位動作
一次對 user001 中設定三個欄位值,回傳 3 代表新增了三個欄位,個人不太喜歡這樣,因為我的眼睛會看花掉 XDD ( 老了 )
Lists
這就是很常見的 List 結構啦~
這邊使用到的 Redis Command 是 LPUSH 跟 LRANGE
127.0.0.1:6379> LPUSH applelist aa bb cc bb (integer) 4 127.0.0.1:6379> LRANGE applelist 0 10 1) "bb" 2) "cc" 3) "bb" 4) "aa"
夠簡單吧!超級單純的
Sets
其實跟 List 一樣,就是資料的集合,只是 Sets 有多一層限制是集合中的值不會重複
這邊使用到的 Redis Command 是 SADD 跟 SMEMBER 指令
127.0.0.1:6379> SADD appleset "Red Delicious" "Gala" "Fuji" "Gala" "Granny Smith" "Honeycrisp" (integer) 5 127.0.0.1:6379> SMEMBERS appleset 1) "Fuji" 2) "Red Delicious" 3) "Granny Smith" 4) "Gala" 5) "Honeycrisp" # 可以看到,它把我重複設定進去的 "Gala" 拿掉了
Sorted Sets
顧名思義,就是有排序的 Sets 結構,一樣是不重複值的集合,它跟 Sets 的差別在於,Sorted Sets 結構會多一個數字值去作為排序的權重來決定先後順序
這邊使用到的 Redis Command 是 ZADD、ZRANGEBYSCORE 來操作
# 1 127.0.0.1:6379> ZADD sortedset 2 "Red Delicious" (integer) 1 # 2 127.0.0.1:6379> ZADD sortedset 1 "Wayne Change" (integer) 1 # 3 127.0.0.1:6379> ZADD sortedset 2 "Wayne Zhange" (integer) 1 # 4 127.0.0.1:6379> ZADD sortedset 1 "Andy Wang" (integer) 1 # 5 127.0.0.1:6379> ZADD sortedset 1 "Tom Hank" (integer) 1 # 6 127.0.0.1:6379> ZADD sortedset 2 "Tom Lee" (integer) 1 # 7 127.0.0.1:6379> ZADD sortedset 100 "Chris Ruby" (integer) 1 # 8 127.0.0.1:6379> ZADD sortedset 50 "Nico Yazawa" (integer) 1 # 9 127.0.0.1:6379> ZADD sortedset 0 "Untyped" (integer) 1 127.0.0.1:6379> ZRANGEBYSCORE sortedset 0 100 1) "Untyped" 2) "Andy Wang" 3) "Tom Hank" 4) "Wayne Change" 5) "Red Delicious" 6) "Tom Lee" 7) "Wayne Zhange" 8) "Nico Yazawa" 9) "Chris Ruby" # 可以看到在取出來的時候並不是依照寫入的順序,而是依照所指定數字的權重去排序的! 127.0.0.1:6379> ZRANGEBYSCORE sortedset 1 100 1) "Andy Wang" 2) "Tom Hank" 3) "Wayne Change" 4) "Red Delicious" 5) "Tom Lee" 6) "Wayne Zhange" 7) "Nico Yazawa" 8) "Chris Ruby" # 小補充 如果 ZRANGEBYSCORE 的值範圍外的是不會被查詢出來的唷~~
重新整理一次發現自己之前在用的時候真的少看了很多東西,就是直接別人用 Jedis 之類的函式庫包好直接拿來用而已,自己身為使用者也就這樣傻傻的用下去了。
倒也不是說不能用,只是不瞭解背後的實際語法,實在是太不求甚解了!
對了!中間 Sets 有用到蘋果種類的範例,各位知道… 蘋果的種類總共有 7500 種以上嗎?

No Comment