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

เชี่ยวชาญการแคชในหน่วยความจำด้วย Redis:การดึงข้อมูลที่รวดเร็วและเชื่อถือได้

เชี่ยวชาญการแคชในหน่วยความจำด้วย Redis:การดึงข้อมูลที่รวดเร็วและเชื่อถือได้

เมื่อคุณสร้างเว็บแอปหรือ API ที่ต้องตอบสนองอย่างรวดเร็ว การแคชมักจะเป็นความลับ

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

แต่เมื่อคุณจัดเก็บข้อมูลนั้นไว้ในหน่วยความจำ ข้อมูลเดียวกันจะแสดงได้ในหน่วยมิลลิวินาที นั่นคือจุดที่ Redis เข้ามา

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

ในบทความนี้ คุณจะได้เรียนรู้ว่าการแคชในหน่วยความจำทำงานอย่างไร และเหตุใด Redis จึงเป็นตัวเลือกสำหรับนักพัฒนาจำนวนมาก

สารบัญ

  • การแคชในหน่วยความจำคืออะไร

  • เรดิสคืออะไร?

  • วิธีทำงานกับ Redis

    • การติดตั้ง Redis

    • ประเภทข้อมูล Redis

    • Redis ด้วย Python

  • กรณีการใช้งานในชีวิตจริง

  • บทสรุป

การแคชในหน่วยความจำคืออะไร

การแคชในหน่วยความจำเป็นวิธีการจัดเก็บข้อมูลใน RAM ของระบบ แทนที่จะดึงข้อมูลจากฐานข้อมูลหรือแหล่งข้อมูลภายนอกทุกครั้งที่จำเป็น

เนื่องจาก RAM มีความรวดเร็วอย่างเหลือเชื่อเมื่อเทียบกับพื้นที่จัดเก็บข้อมูลบนดิสก์ คุณจึงสามารถเข้าถึงข้อมูลที่แคชไว้ได้เกือบจะในทันที วิธีนี้เหมาะสำหรับข้อมูลที่ไม่ได้เปลี่ยนแปลงบ่อยนัก เช่น การตอบกลับของ API โปรไฟล์ผู้ใช้ หรือหน้า HTML ที่แสดงผล

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

เทคนิคนี้จะช่วยลดภาระบนแบ็กเอนด์ของคุณ ปรับปรุงเวลาตอบสนอง และปรับปรุงประสิทธิภาพของแอปได้อย่างมากภายใต้การรับส่งข้อมูลจำนวนมาก

เรดิสคืออะไร

Redis เป็นที่เก็บข้อมูลในหน่วยความจำโอเพ่นซอร์สที่นักพัฒนาใช้เพื่อแคชและจัดการข้อมูลแบบเรียลไทม์

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

Redis ยังสามารถจัดการงานขั้นสูงเพิ่มเติม เช่น การส่งข้อความแบบ Pub/Sub สตรีม และการสืบค้นเชิงพื้นที่ แม้จะมีพลัง แต่ Redis ก็มีน้ำหนักเบาและเริ่มต้นได้ง่าย

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

วิธีการทำงานกับ Redis

การติดตั้ง Redis

การติดตั้งและใช้งาน Redis นั้นง่ายดายอย่างน่าประหลาดใจ คุณสามารถดูคำแนะนำในการติดตั้งตามระบบปฏิบัติการของคุณได้ในเอกสารประกอบ

เพื่อให้แน่ใจว่า Redis ทำงาน ให้รัน:

redis-cli ping
# Should respond with "PONG"

ประเภทข้อมูล Redis

Redis มีประเภทในตัวหลายประเภทที่ให้คุณจัดเก็บและจัดการข้อมูลด้วยวิธีที่ยืดหยุ่น

สตริง :คีย์ธรรมดา ↔ คู่ค่า

SET username "Emily"
GET username

รายการ :คอลเลกชันที่สั่งซื้อซึ่งเหมาะสำหรับคิวและไทม์ไลน์

LPUSH tasks "task1"
RPUSH tasks "task2"
LRANGE tasks 0 -1

แฮช :เช่นเดียวกับออบเจ็กต์ JSON เหมาะสำหรับโปรไฟล์ผู้ใช้

HSET user:1 name "Alice"
HSET user:1 email "alice@example.com"
HGETALL user:1

ชุด :คอลเลกชันที่ไม่ได้เรียงลำดับ เหมาะสำหรับแท็กหรือรายการที่ไม่ซ้ำ

SADD tags "python"
SADD tags "redis"
SMEMBERS tags

ชุดที่เรียงลำดับ :ชุดที่มีคะแนน – มีประโยชน์สำหรับกระดานผู้นำ

ZADD leaderboard 100 "Bob"
ZADD leaderboard 200 "Carol"
ZRANGE leaderboard 0 -1 WITHSCORES

Redis ยังรองรับบิตแมป ไฮเปอร์ล็อกล็อก สตรีม ดัชนีภูมิสารสนเทศ และขยายการรองรับโครงสร้างข้อมูลอย่างต่อเนื่อง

Redis ด้วย Python

หากคุณทำงานใน Python การใช้ Redis ก็เป็นเรื่องง่ายเช่นกัน หลังจากติดตั้ง redis ไลบรารี Python โดยใช้ pip install redis คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ Redis ของคุณและเริ่มตั้งค่าและรับคีย์ได้ทันที

ต่อไปนี้เป็นโค้ด Python ง่ายๆ บางส่วนที่ใช้งานได้กับ Redis:

import redis
# Connect to the local Redis server on default port 6379 and use database 0
r = redis.Redis(host='localhost', port=6379, db=0)
# --- Basic String Example ---
# Set a key called 'welcome' with a string value
r.set('welcome', 'Hello, Redis!')
# Get the value of the key 'welcome'
# Output will be a byte string: b'Hello, Redis!'
print(r.get('welcome'))
# --- Hash Example (like a Python dict) ---
# Create a Redis hash under the key 'user:1'
# This hash stores fields 'name' and 'email' for a user
r.hset('user:1', mapping={
 'name': 'Alice',
 'email': 'alice@example.com'
})
# Get all fields and values in the hash as a dictionary of byte strings
# Output: {b'name': b'Alice', b'email': b'alice@example.com'}
print(r.hgetall('user:1'))
# --- List Example (acts like a queue or stack) ---
# Push 'Task A' to the left of the list 'tasks'
r.lpush('tasks', 'Task A')
# Push 'Task B' to the left of the list 'tasks' (it becomes the first item)
r.lpush('tasks', 'Task B')
# Retrieve all elements from the list 'tasks' (from index 0 to -1, meaning the full list)
# Output: [b'Task B', b'Task A']
print(r.lrange('tasks', 0, -1))

คุณอาจจัดเก็บข้อมูลเซสชั่นของผู้ใช้ งานคิวพื้นหลัง หรือแม้แต่แคชเพจ HTML ที่แสดงผล คำสั่ง Redis ทำงานรวดเร็วและไม่ซับซ้อน ซึ่งหมายความว่าคุณไม่ต้องกังวลกับการชนกันของข้อมูลหรือความไม่สอดคล้องกันในสภาพแวดล้อมที่มีการรับส่งข้อมูลสูง

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

คุณสามารถตั้งเวลาในการใช้งาน (TTL) บนคีย์ได้ ดังนั้น Redis จึงลบคีย์เหล่านั้นโดยอัตโนมัติ

SET session:1234 "some data" EX 3600 # Expires in 1 hour

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

Redis ไม่ได้จำกัดอยู่เพียงแอปขนาดเล็กเท่านั้น ปรับขนาดได้อย่างง่ายดายผ่านการจำลองแบบ การจัดกลุ่ม และ Sentinel

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

กรณีการใช้งานในชีวิตจริง

หนึ่งในการใช้งานที่พบบ่อยที่สุดสำหรับ Redis คือการแคชการตอบสนองของ API

สมมติว่าคุณมีแอปที่แสดงข้อมูลสภาพอากาศ แทนที่จะเรียก API สภาพอากาศทุกครั้งที่ผู้ใช้โหลดเพจ คุณสามารถแคชการตอบสนองสำหรับแต่ละเมืองใน Redis เป็นเวลา 5 หรือ 10 นาที ด้วยวิธีนี้ คุณจะดึงข้อมูลใหม่เป็นครั้งคราวเท่านั้น และแอปของคุณจะทำงานได้เร็วและถูกกว่ามาก

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

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

บทสรุป

การแคชในหน่วยความจำเป็นหนึ่งในวิธีที่ง่ายและมีประสิทธิภาพมากที่สุดในการเร่งความเร็วแอปของคุณ และ Redis ทำให้การปรับใช้เป็นเรื่องง่ายอย่างเหลือเชื่อ ไม่ใช่แค่แคชเท่านั้น แต่ยังเป็นชุดเครื่องมือสำหรับการสร้างระบบแบบเรียลไทม์ที่รวดเร็วและปรับขนาดได้ คุณสามารถเริ่มต้นเล็กๆ ได้ด้วยการแคชเพจสองสามหน้าหรือการตอบกลับของ API และเมื่อความต้องการของคุณเพิ่มขึ้น Redis ก็จะเติบโตไปพร้อมกับคุณ

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

ชอบบทความนี้ไหม? เชื่อมต่อกับฉันบน Linkedin พบกันใหม่หัวข้ออื่นเร็วๆ นี้

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น