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 ซึ่งเป็นฐานข้อมูลในหน่วยความจำที่รวดเร็วซึ่งมีประโยชน์มากในสถานการณ์ที่เหมาะสม เช่น การแคช การนับ และการเข้าคิว
หากคุณพบว่าบทความนี้น่าสนใจ โปรดแชร์ให้คนอื่นได้สนุกไปกับมัน
ขอบคุณสำหรับการอ่าน!