Speed และ Flexibility ของ Redis ทำให้เป็น Tool อันทรงพลังสำหรับ Developers ใช้ได้หลายแบบ แม้มักเรียกว่า Key-Value Store แต่ควรอธิบายว่า Data Structure Server มากกว่า เพราะรองรับ 5 Data Structure Types:
- Strings
- Hashes
- Lists
- Sets
- Sorted Sets
แต่ละ Structure มี Shared Commands และ Commands เฉพาะ Structure นั้นๆ
Introduction นี้ครอบคลุม Basics การใช้ Redis และ Overview Data Structures จะครอบคลุม Basic Commands บ้าง Redis มี 160+ Commands ขณะเขียน หาเอกสารได้ที่ redis.io/commands
Starting Redis
ใช้ Instance จาก ObjectRocket for Redis หรือ Install Local
Install Local: Download, Extract, Compile:
$ wget https://download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make
Start Local Instance:
$ src/redis-server
Using Redis
พร้อม Interact Redis ด้วย Built-in Client ObjectRocket for Redis Instance เริ่ม redis-cli ด้วย Hostname, Port, Password:
$ redis-cli -h my-host -p 1234 -a mypassword
Local Instance: Host=localhost, Default Port=6379, No Password Default
$ redis-cli
GET และ SET
ระดับง่ายที่สุด Redis = Key-Value Store Command SET foo bar = Set Value ของ foo เป็น bar ตัวอย่างจาก redis-cli:
redis> SET foo bar OK
อ่านค่า foo ด้วย GET:
redis> GET foo "bar"
EXPIRE และ TTL
ตั้ง Key Expire ในเวลาที่กำหนดด้วย EXPIRE TTL รายงานเวลาคงเหลือก่อน Expire
redis> SET foo bar OK redis> EXPIRE foo 120 (integer) 1 redis> TTL foo (integer) 113
Lists
Feature แตกต่างของ Redis: Value ของ Key เป็น Data Structures ไใช่แค่ Values
สร้าง List 用 LPUSH หรือ RPUSH หาก List มีอยู่แล้ว LPUSH Add Value ไปต้น List RPUSH Add ท้าย List
redis> LPUSH cities "San Francisco" (integer) 1 redis> RPUSH cities "Austin" (integer) 2 redis> LRANGE cities 0 -1 1. "San Francisco" 2. "Austin" redis> SORT cities alpha 1. "Austin" 2. "San Francisco" redis> LPOP cities "San Francisco" redis> LRANGE cities 0 -1 1. "Austin"
SORT + ALPHA = Lexicographically Ascending DESC = Descending RPOP = Pop จากท้าย LPOP = Pop จากหน้า
Sets
Sets คล้าย Lists แต่ Element ซ้ำไม่ได้ ตัวอย่างสร้าง Set รัฐ US เล็กๆ SADD Add Item ถ้ายังไม่มีใน Set (Return 1) มีอยู่แล้ว Return 0 SMEMBERS Return All Items SCARD Return Count SREM Remove Item
redis> SADD states "Vermont" (integer) 1 redis> SMEMBERS states 1. "Vermont" redis> SADD states "Texas" (integer) 1 redis> SCARD states (integer) 2 redis> SADD states "Vermont" (integer) 0 redis> SMEMBERS states 1. "Vermont" 2. "Texas" redis> SADD states "California" (integer) 1 redis> SMEMBERS states 1. "Vermont" 2. "Texas" 3. "California" redis> SREM states "California" (integer) 1 redis> SMEMBERS states 1. "Vermont" 2. "Texas"
Hashes
ใช้ Hashes Map String Values ไป Fields ในแต่ละ Key Hash ที่มี Fields น้อย Stored แบบ Space-efficient เก็บ Millions of Objects ใน Small Redis Instance ได้ ตัวอย่าง: Name ของ user:1 = "john racker" ด้วย HSET HGET ดึง Name HGETALL Return All Keys/Values
redis> HSET user:1 name "john racker" (integer) 1 redis> HGET user:1 name "joe racker" redis> HSET user:1 company "objectrocket" (integer) 1 redis> HGET user:1 company "ObjectRocket" redis> HSET user:1 city "austin" (integer) 1 redis> HGET user:1 city "austin" redis> HGETALL user:1 1. "name" 2. "john racker" 3. "company" 4. "objectrocket" 5. "city" 6. "austin"
SORTED SETS
Sorted Sets คล้าย Sets (Non-repeating Strings) แต่ทุก Member มี Score เรียงตาม Score Ascending Element เดียวกันอยู่ได้ครั้งเดียว Scores ซ้ำได้
ตัวอย่าง: Add Points Top 5 Teams English Premier League วันที่ 10/23/2014:
redis> ZADD EPL 22 "chelsea" (integer) 1 redis> ZADD EPL 17 "man city" (integer) 1 redis> ZADD EPL 16 "southampton" (integer) 1 redis> ZADD EPL 13 "liverpool" (integer) 1 redis> ZADD EPL 13 "west ham" (integer) 1 redis> ZRANK EPL "chelsea" (integer) 3 redis> ZRANK EPL "liverpool" (integer) 0 redis> ZRANK EPL "arsenal" (nil)
Rank Teams ตาม Points ด้วย ZRANGE:
redis> ZRANGE EPL 0 -1 1) "liverpool" 2) "west ham" 3) "southampton" 4) "man city" 5) "chelsea" redis> ZRANGE EPL 2 3 1) "southampton" 2) "man city"
จำไว้: Sets เรียง Ascending ดู Rank ตาม Points ต้อง用 ZREVRANGE
redis> ZREVRANGE EPL 0 -1 1) "chelsea" 2) "man city" 3) "southampton" 4) "west ham" 5) "liverpool" redis> ZREVRANGE EPL 0 -1 WITHSCORES 1) "chelsea" 2) "22" 3) "man city" 4) "17" 5) "southampton" 6) "16" 7) "west ham" 8) "13" 9) "liverpool" 10) "13"
Southampton เล่นเกม ชนะ ได้ 3 Points ใช้ ZINCRBY Increment Score และ ZREVRANGE ดู Southampton ขึ้น Rank 2 ใช้ ZREVRANK ดู Rank (0-based = Highest Score Rank 0)
redis> ZINCRBY EPL 3 "southampton" "19" redis> ZREVRANGE EPL 0 -1 WITHSCORES 1) "chelsea" 2) "22" 3) "southampton" 4) "19" 5) "man city" 6) "17" 7) "west ham" 8) "13" 9) "liverpool" 10) "13" redis> ZREVRANK EPL "southampton" (integer) 1 redis> ZREVRANGEBYSCORE EPL 25 (15 1) "chelsea" 2) "southampton" 3) "man city"
สัปดาห์หน้า Deep Dive Redis และ Use Cases สำหรับ Versatile Developer Tool นี้ ติดต่อเราถ้ามีคำถามเรื่อง Run Redis หรืออยากเล่าว่าคุณใช้ Redis ใน App Stack อย่างไร