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

วิธีใช้ฐานข้อมูล Redis ใน Ruby

Redis คืออะไร

Redis เป็นฐานข้อมูลในหน่วยความจำชนิดหนึ่งที่มีโครงสร้างข้อมูลประเภทต่างๆ ที่คุณสามารถใช้ได้

ถูกใจ :

  • ที่เก็บคีย์ / ค่า
  • รายการ
  • ชุด

ไม่มีส่วนเกี่ยวข้องกับฐานข้อมูล SQL ทั่วไปของคุณ เช่น Postgres

ใช้สำหรับ Redis รวมถึง :

  • แคช
  • ลีดเดอร์บอร์ด
  • กำลังนับผู้เข้าชม
  • คำแนะนำการเติมข้อความอัตโนมัติที่รวดเร็ว
  • การติดตามเซสชันผู้ใช้ที่ใช้งานอยู่
  • คิวงานและข้อความ

มาดูกันว่าคุณจะใช้ Redis ในแอปพลิเคชัน Ruby ได้อย่างไร!

การติดตั้ง Redis ในเครื่อง

อันดับแรก:

คุณต้องติดตั้งเซิร์ฟเวอร์ Redis

เช่นเดียวกับที่คุณจะติดตั้งฐานข้อมูลอื่น ๆ

หากคุณใช้งาน Ubuntu คุณสามารถใช้ apt install redis-server บน Mac คุณสามารถใช้ brew install redis และใน Windows 10 คุณจะต้องมี “Windows Subsystem for Linux” (คลิกเพื่อดูคำแนะนำ)

เมื่อเซิร์ฟเวอร์เริ่มทำงาน คุณจะสามารถใช้ redis-cli เพื่อเชื่อมต่อกับเซิร์ฟเวอร์

หมายเหตุ :คุณอาจต้องเรียกใช้ redis-server บนเทอร์มินัลอื่นเพื่อเริ่มต้นเซิร์ฟเวอร์ก่อนที่คุณจะสามารถเชื่อมต่อได้

ตอนนี้คุณพร้อมที่จะเริ่มใช้ Redis แล้ว!

การใช้ Redis Gems

คุณสามารถโต้ตอบกับ Redis ได้โดยตรงโดยใช้ redis-cli แต่ถ้าคุณต้องการทำงานกับ Redis จาก Ruby คุณควรใช้อัญมณี

มีอัญมณีอยู่บ้าง :

  • เลือดอ๊อกซ์บลัด
  • รีดิค
  • redis-rb

แต่มีเพียงหนึ่งเดียวเท่านั้นที่ได้รับการแนะนำอย่างเป็นทางการโดยนักพัฒนา Redis redis-rb .

ติดตั้ง :

gem install redis

เมื่อติดตั้ง gem แล้ว คุณจะเชื่อมต่อกับเซิร์ฟเวอร์ Redis และเริ่มใช้งานได้

เริ่มต้นด้วยการเพิ่มหนึ่งคีย์ a โดยมีค่า 1 .

นี่คือรหัส :

require 'redis'

redis = Redis.new(host: "localhost")

redis.set("a", 1)
# "OK"

redis.get("a")
# "1"

เจ็มนี้ทำงานได้ดีในการแมปเมธอด Ruby กับคำสั่ง Redis ดังนั้นหากคุณต้องการทราบว่ามีคำสั่งใดบ้าง คุณสามารถตรวจสอบเอกสาร Redis หรือคุณสามารถตรวจสอบเอกสารประกอบของ gem ได้

การทำงานกับเอกสาร

คุณสามารถพิมพ์ชื่อคำสั่งเฉพาะ หรือค้นหาตามโครงสร้างข้อมูล .

คลิก "กรองตามกลุ่ม" และเลือก "สตริง" จากนั้นเลือกคำสั่งใดคำสั่งหนึ่งเพื่อทดสอบ

ตัวอย่างเช่น คุณสามารถใช้ incr คำสั่ง:

redis.incr("a")
# "2"

หรือคุณสามารถตั้งค่าคีย์หมดอายุอัตโนมัติด้วย setex :

redis.setex("bacon", 10, 100)

โดยที่อาร์กิวเมนต์ที่ 2 คือวินาทีก่อนที่คีย์นี้จะหมดอายุ และอาร์กิวเมนต์สุดท้ายคือค่าสำหรับคีย์นี้

ตัวอย่าง :

redis.get("bacon")
# "100"

หลังจาก 10 วินาที…

redis.get("bacon")
# nil

ขอให้สนุกกับการสำรวจและลองใช้คำสั่งอื่นๆ!

วิธีใช้ชุดการเรียงลำดับใน Redis

Redis ไม่จำกัดเพียงการจัดเก็บคีย์/ค่าอย่างง่าย

มีโครงสร้างข้อมูลที่มีประสิทธิภาพ

เหมือนชุดที่เรียง

วิธีนี้ช่วยให้คุณสร้างรายการของรายการที่ไม่ซ้ำซึ่งจัดเรียงตามค่าที่กำหนด . ค่านี้เรียกว่า “คะแนน” ในเอกสารประกอบของ Redis

สามารถสอบถามเพื่อรับ N ไอเทมในเซ็ตนี้ได้

นี่จึงเหมาะสำหรับลีดเดอร์บอร์ด!

ตัวอย่าง :

redis.zadd("popular_fruit", 10, "apple")
# true
redis.zadd("popular_fruit", 20, "banana")
# true
redis.zadd("popular_fruit", 30, "orange")
# true

ตอนนี้เรามีชุดของเราแล้ว เราสามารถค้นหารายการยอดนิยมได้:

r.zrevrange("popular_fruit", 0, 0)
# ["orange"]

คำสั่งนี้กำลังบอกว่า :

“เริ่มจากอันดับสูงสุด (0) ให้ไอเทมอันดับต้นๆ กับฉัน”

ถ้าคุณต้องการทุกอย่างตามลำดับ :

r.zrevrange("popular_fruit", 0, -1)
# ["orange", "banana", "apple"]

สังเกตส่วน "rev" ใน "zrevrange" ซึ่งหมายถึงการย้อนกลับและจะให้รายการในเรียงลำดับจากมากไปน้อย .

หากคุณใช้ “zrange” คุณจะได้รับสินค้าในลำดับจากน้อยไปมาก .

ชุดที่จัดเรียงมีมากกว่ากระดานผู้นำ!

สิ่งที่คุณทำได้อีกอย่างคือสร้างเครื่องมือเติมข้อความอัตโนมัติที่รวดเร็ว ด้วย ZRANGEBYLEX คำสั่ง

โปรดอ่านเอกสารสำหรับการดำเนินการตั้งค่าเพิ่มเติม

ทำความเข้าใจคีย์ ค่า และเนมสเปซ

ไม่มีคอลัมน์ ไม่มีตาราง ทุกอย่างเป็นเนมสเปซธรรมดาเดียว

คุณจะจัดระเบียบข้อมูลของคุณได้อย่างไร

คุณสามารถใช้ชื่อคีย์ได้เอง

หลักการทั่วไปอย่างหนึ่งคือการใช้เครื่องหมายทวิภาค (: ) เพื่อแยกชื่อสามัญและส่วนเฉพาะของชื่อนั้นออก

นี่คือตัวอย่าง :

redis.set("fruit:1", "apple")
# OK
redis.set("fruit:2", "banana")
# OK

ไม่มีอะไรพิเศษเกี่ยวกับข้อตกลงนี้ เพราะ Redis (ซอฟต์แวร์) เป็นคีย์ที่มีเครื่องหมายทวิภาค ไม่ต่างจากกุญแจ ที่ไม่มีมัน แต่สำหรับคุณ (นักพัฒนา Ruby ที่เป็นมิตร) จะช่วยให้คุณจัดระเบียบข้อมูลได้

ความคงอยู่ของข้อมูลใน Redis

ตามค่าเริ่มต้น Redis จะไม่บันทึกทุกการดำเนินการที่คุณทำเหมือนฐานข้อมูลทั่วไป

โดยจะบันทึกข้อมูลลงดิสก์เมื่อคุณหยุดเซิร์ฟเวอร์เท่านั้น

หรือภายใต้เงื่อนไขเหล่านี้ :

  • หลังจาก 15 นาที หากมีการเปลี่ยนแปลงอย่างน้อย 1 คีย์
  • หลังจาก 5 นาที หากมีการเปลี่ยนแปลง 10 ปุ่มขึ้นไป
  • หลังจาก 1 นาที หากเปลี่ยน 10,000 คีย์ขึ้นไป

สิ่งนี้จะสร้าง dump.rdb ไฟล์ในไดเร็กทอรีปัจจุบัน

หากคุณต้องการให้การคงอยู่ของ Redis ทำงานเหมือนฐานข้อมูล SQL มากขึ้น คุณสามารถเปิดใช้งาน “โหมดต่อท้ายเท่านั้น” ซึ่งจะบันทึกการเปลี่ยนแปลงทุก ๆ วินาที

เปิดใช้งานโหมดนี้โดยเพิ่ม (หรือยกเลิกการใส่ความคิดเห็น) บรรทัดนี้ในการกำหนดค่า redis:

appendonly yes

การใช้ Redis เป็นแคช Rails

เนื่องจาก Rails 5.2 คุณสามารถใช้ Redis เป็นที่เก็บแคชได้

คุณต้องการเพียง redis อัญมณีและเซิร์ฟเวอร์

เพื่อเปิดใช้งานสิ่งนี้ :

# config/environments/production.rb

Rails.application.configure do
  config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
end

จากนั้น Rails จะใช้ Redis สำหรับทุกความต้องการในการแคช

คุณยังสามารถเก็บบางสิ่งไว้ในแคชได้ :

Rails.cache.write("a", 1)
# "OK"

Rails.cache.read("a")
# 1

Rails เก็บค่าที่มีลักษณะเช่นนี้ :

"\u0004\bo: ActiveSupport::Cache::Entry\t:\v@valuei\u0006:\r@version0:\u0010@created_atf\u00171555005228.7954454:\u0010@expires_in0"

ซึ่งหมายความว่าคุณสามารถเก็บวัตถุ Ruby ที่ทำให้เป็นอนุกรมได้ เช่น ผลลัพธ์ของ ActiveRecord สอบถามค่ะ

คำถามที่พบบ่อยเกี่ยวกับ Redis

“ฉันแสดงรายการคีย์ทั้งหมดในเซิร์ฟเวอร์ Redis ของฉันได้ไหม”

ใช่ ใช้ keys หรือ scan คำสั่ง แต่ไม่แนะนำเพราะมันช้ามาก โดยเฉพาะเมื่อฐานข้อมูลของคุณเติบโตขึ้น

“ฉันควรใช้ Redis เมื่อใด”

เฉพาะเมื่อเหมาะสมสำหรับกรณีการใช้งานของคุณเท่านั้น ซึ่งหมายความว่าคุณสามารถใช้ประโยชน์จากโครงสร้างข้อมูล Redis เพื่อทำให้โค้ดของคุณให้เหตุผลได้ง่ายขึ้น

คุณไม่ต้องการใช้ Redis เพียงเพราะมันเจ๋งหรือเป็นที่นิยม

ใช้เมื่อแก้ปัญหาได้ดีกว่าวิธีอื่นๆ

“ฉันจะทำให้ Redis เร็วขึ้นได้อย่างไร”

ติดตั้ง hiredis อัญมณีที่ด้านบนของ redis-rb เพื่อประสิทธิภาพสูงสุด

สรุป

คุณได้เรียนรู้เกี่ยวกับ Redis ซึ่งเป็นฐานข้อมูลในหน่วยความจำที่รวดเร็วซึ่งมีประโยชน์มากในสถานการณ์ที่เหมาะสม เช่น การแคช การนับ และการเข้าคิว

หากคุณพบว่าบทความนี้น่าสนใจ โปรดแชร์ให้คนอื่นได้สนุกไปกับมัน

ขอบคุณสำหรับการอ่าน!