Redis คืออะไร? — In-Memory Database มี Data Structures ต่างๆ
เช่น: Key/Value Storage, Lists, Sets
ไม่เกี่ยวกับ SQL Database เหมือน Postgres
Use Cases:
- Caching
- Leaderboards
- Counting Visitors
- Fast Autocomplete Suggestions
- Track Active User Sessions
- Work & Message Queues
มาดูใช้ Redis ใน Ruby Apps!
ติดตั้ง Redis Locally
First: ติดตั้ง Redis Server — เหมือน Database อื่นๆ
Ubuntu: apt install redis-server, Mac: brew install redis, Windows 10: "Windows Subsystem for Linux"
Server Up -> 用 redis-cli Connect — Note: อาจต้อง redis-server Terminal อื่นก่อน
พร้อมใช้ Redis!
ใช้ Redis Gems
互動 Redis โดย直 redis-cli ได้ แตจาก Ruby อยาก用 Gem
Gems พร้อม: oxblood, redic, redis-rb (Officially Recommended by Redis Developers)
Install: gem install redis
Connect Redis Server เริ่มทำงาน — ใส่ Key a Value 1:
require 'redis'
redis = Redis.new(host: "localhost")
redis.set("a", 1) # "OK"
redis.get("a") # "1"
Gem Map Ruby Methods -> Redis Commands ดี — เช็ค Commands ใน Redis Doc หรือ Gem Doc
ทำงานกับ Documentation
พิมพ์ Command Name หรือ Search by Data Structure — Click "Filter by Group" เลือก "Strings" เลือก Command ทดสอบ
เช่น incr Command: redis.incr("a") # "2"
หรือ Set Auto-Expiring Key setex: redis.setex("bacon", 10, 100) — Arg 2 = Seconds Expire, Arg 3 = Value
ตัวอย่าง: redis.get("bacon") # "100" — 10 Seconds Later: redis.get("bacon") # nil
สนุก Explore และลอง Commands อื่นๆ!
วิธีใช้ Sorted Sets ใน Redis
Redis ไม่แค่ Key/Value — มี Powerful Data Structures
เช่น Sorted Set — Unique Items Sorted by Score (Value เรียกว่า Score ใน Redis Doc)
Query Top N Items ได้ — Perfect สำหรับ Leaderboard!
ตัวอย่าง:
redis.zadd("popular_fruit", 10, "apple") # true
redis.zadd("popular_fruit", 20, "banana") # true
redis.zadd("popular_fruit", 30, "orange") # true
Query Top Item: r.zrevrange("popular_fruit", 0, 0) # ["orange"] — 从 Highest Rank (0) ให้ Top Item
อยากได้ทั้งหมดเรียง: r.zrevrange("popular_fruit", 0, -1) # ["orange", "banana", "apple"]
สังเกต "rev" ใน "zrevrange" = Reverse -> Descending Order — "zrange" = Ascending
Sorted Sets ไม่แค่ Leaderboards! — Fast Autocomplete Engine ด้วย ZRANGEBYLEX — อ่าน Doc เพิ่ม
เข้าใจ Keys, Values & Namespacing
No Columns, No Tables — Everything = 1 Plain Namespace
จัดระเบียบยังไง? 用 Key Name เอง — Convention: Colon (:) แยก Generic Name และ Specific Part
ตัวอย่าง: redis.set("fruit:1", "apple"), redis.set("fruit:2", "banana") — Redis ไม่แตกต่าง แต Developer เข้าใจง่าย
Data Persistence ใน Redis
Default Redis ไม่ Save ทุก Operation เหมือน DB ปกติ — Save Disk ตอน Stop Server
หรือเงื่อนไข:
- 15 Min, 1+ Keys Changed
- 5 Min, 10+ Keys Changed
- 1 Min, 10,000+ Keys Changed
สร้าง dump.rdb — อยาก Persistence เหมือน SQL Enable "Append Only Mode" Save ทุกวินาที
appendonly yes ใน Redis Config
ใช้ Redis เป็น Rails Cache
Rails 5.2+ 用 Redis Cache Store — ต้อง redis Gem + Server
Enable:
# config/environments/production.rb
Rails.application.configure do
config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
end
Rails 用 Redis สำหรับ Caching ทั้งหมด — เก็บ Cache เอง: Rails.cache.write("a", 1), Rails.cache.read("a") # 1
Rails เก็บ Values แบบ Serialized — ใส่ Serializable Ruby Objects ได้ (ActiveRecord Query Results)
Redis F.A.Q
"List All Keys ได้ไหม?" ได้ ด้วย keys หรือ scan แตไม่แนะนำ Slow มากตอน DB ใหญ่
"เมื่อไหร่ควร用 Redis?" ตอนมี Sense สำหรับ Use Case — ใช้ Redis Data Structures ทำโค้ดเข้าใจง่าย — ไม่ใช่用เพราะ Cool/Popular
"ทำไม Redis เร็วขึ้น?" Install hiredis Gem บน redis-rb Max Performance
Summary (สรุป)
คุณเรียนรู้ Redis — Fast In-Memory Database ช่วยใน Situations ต่างๆ: Caching, Counting, Queues
ถ้าสนใจ Share ให้คนอื่น — ขอบคุณที่อ่านครับ!