Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Redis ใน Ruby: คู่มือปฏิบัติจริง

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 ให้คนอื่น — ขอบคุณที่อ่านครับ!