ฉันจะใช้ redis กับ Django ได้อย่างไร?


96

ฉันเคยได้ยินเกี่ยวกับ redis-cache แต่มันทำงานอย่างไร? มันถูกใช้เป็นเลเยอร์ระหว่าง django และ rdbms ของฉันโดยการแคชแบบสอบถาม rdbms หรือไม่?

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

คำตอบ:


74

โมดูล Python สำหรับ Redis นี้มีตัวอย่างการใช้งานที่ชัดเจนใน readme: http://github.com/andymccurdy/redis-py

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


แต่คุณจะตรวจสอบได้อย่างไรว่าแคชบน redis จำเป็นต้องอัปเดต? คุณเปรียบเทียบจำนวนบันทึกหรือมีวิธีที่ดีกว่านี้?
Marconi

7
นี้มักจะทำโดยการตั้งค่า TTL สำหรับคีย์นี้: redis.io/commands/ttl หากคีย์หมดอายุคุณต้องไปที่ฐานข้อมูล ดังนั้นหากคีย์อยู่ใน redis แสดงว่าคุณใช้มัน โปรดทราบว่าการใช้งานอย่างง่ายนี้ทำให้เกิดปัญหา: เมื่อคีย์ยอดนิยมหมดอายุคุณมีen.wikipedia.org/wiki/Thundering_herd_problemคุณต้องการใช้en.wikipedia.org/wiki/Negative_cacheและ DB ของคุณต้องการen.wikipedia org / wiki / Admission_control
Spike Gronim

4
อืมอืมก) Redis ได้รับการออกแบบให้เป็นมากกว่าแคช RAM - มันคงอยู่ (แต่รวมถึงคุณสมบัติสำหรับแคช) b) เป็นมากกว่าที่เก็บคีย์ - ค่าธรรมดา - มีรายการแฮชเซ็ตและอื่น ๆ พร้อมการปรับแต่งในตัว
Olli

8
การแคชโมเดล / อ็อบเจ็กต์การตอบกลับโดยสุจริตไม่ได้อยู่ภายใต้การปรับให้เหมาะสมก่อน เว้นแต่คุณจะถูกเรียกเก็บเงินให้ทำเช่นนั้น (เช่นใน heroku) การแคชไม่ได้รับผลกระทบแม้แต่กับแอปขนาดเล็ก
vikki

1
ไม่เกี่ยวกับความเร็ว แต่เกี่ยวกับทรัพยากร ตารางในแคชจะมีราคาไม่แพง
dman

60

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

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

อย่างไรก็ตามประเด็นยังคงอยู่ใช่ Redis สามารถใช้เป็นฐานข้อมูลได้


3
สำหรับ บริษัท ของฉันเราใช้ Redis เพื่อจัดเก็บข้อมูลสรุปและผลิตภัณฑ์ที่สร้างจาก Cassandra & Postgres ปริมาณของผลิตภัณฑ์เหล่านี้ (หลายพันล้าน) จำเป็นต้องเปลี่ยนบ่อยเพียงใดและเราไม่เคยรู้มาก่อนว่าอะไรคือสิ่งที่จำเป็นในช่วงเวลาใดทำให้ผลิตภัณฑ์เหล่านี้เหมาะอย่างยิ่งสำหรับ redis นอกจากนี้เมื่อคุณดำเนินการมากกว่าหนึ่งล้านแถวใน SQL db แล้ว redis อาจเป็นแหล่งข้อมูลฟรีที่ดีเยี่ยมสำหรับการทดสอบการเป็นสมาชิก (เช่นเอนทิตีเหล่านี้อยู่ในโดเมนนี้หรือไม่)
เดวิด

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

22

Redis เป็นร้าน KV 'ในความทรงจำ' ที่มีระฆังและนกหวีดมากมาย มีความยืดหยุ่นสูง คุณสามารถใช้เป็นที่เก็บชั่วคราวเช่นแคชหรือที่เก็บถาวรเช่นฐานข้อมูล (โดยมีคำเตือนตามที่กล่าวไว้ในคำตอบอื่น ๆ )

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

มีแบ็กเอนด์ที่นี่https://github.com/sebleier/django-redis-cache/และเอกสารที่ยอดเยี่ยมในเอกสาร Django นี่: https://docs.djangoproject.com/en/1.3/topics/cache/

ฉันเพิ่งเริ่มใช้https://github.com/erussell/django-redis-statusเพื่อตรวจสอบแคชของฉัน - ใช้งานได้ดี (กำหนดค่า maxmemory บน redis หรือผลลัพธ์ไม่มีประโยชน์มากนัก)



2

Redis เป็นฐานข้อมูลหลัก

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

  1. รายการ
  2. ชุด
  3. ชุดเรียง
  4. แฮช
  5. บิตแมป
  6. Hyperloglogs

Redis Data types เอกสารทางการ

Redis อยู่ในที่เก็บคีย์ - ค่าหน่วยความจำดังนั้นคุณต้องระวังหากเซิร์ฟเวอร์ Redis เกิดความล้มเหลวข้อมูลของคุณจะสูญหาย

Redis ยังสามารถตรวจสอบข้อมูลอย่างเป็นทางการได้อีกด้วย

เอกสารทางการ Redis Persistence


Redis เป็นแคช

ใช่ Redis อยู่ระหว่างใน Django และ RDBMS

มันทำงานอย่างไร

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

กรอบแคชของ Django เอกสารอย่างเป็นทางการ


จะใช้ Redis กับ Django ได้อย่างไร

เราสามารถใช้ redis python client redis-pyสำหรับแอปพลิเคชัน Django

ไคลเอนต์ Redis python redis-py Github

เราสามารถใช้Django-redisสำหรับ django cache backend

Django-redisสร้างบนredis-pyและเพิ่มคุณสมบัติพิเศษที่เกี่ยวข้องกับแอปพลิเคชัน django

Django-redis doc Github

ห้องสมุดอื่น ๆ ก็มีเช่นกัน


Redis ใช้กรณีและประเภทข้อมูล

บางกรณีการใช้งาน

  • แคชเซสชัน
  • การวิเคราะห์ตามเวลาจริง
  • การแคชเว็บ
  • ลีดเดอร์บอร์ด

กรณีการใช้งาน Redis ยอดนิยมตามประเภทโครงสร้างข้อมูลหลัก


บริษัท เทคโนโลยีขนาดใหญ่ที่ใช้ Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.