ไม่ Redis เป็นมากกว่าแคช
เช่นเดียวกับแคช Redis เก็บคู่ key = value แต่ต่างจากแคช Redis ให้คุณทำงานกับค่าต่างๆ มี 5 ชนิดข้อมูลใน Redis - Strings, Set, Hash, รายการและชุด Sorted ประเภทข้อมูลแต่ละประเภทมีการทำงานที่หลากหลาย
วิธีที่ดีที่สุดที่จะเข้าใจ Redis คือการสร้างแบบจำลองแอปพลิเคชั่นโดยไม่คิดว่าคุณจะเก็บมันไว้ในฐานข้อมูลอย่างไร
ช่วยบอกว่าเราต้องการสร้าง StackOverflow.com เพื่อให้ง่ายเราต้องมีคำถามคำตอบแท็กและผู้ใช้
แบบจำลองคำถามผู้ใช้และคำตอบ
แต่ละวัตถุสามารถสร้างแบบจำลองเป็นแผนที่ ตัวอย่างเช่นคำถามคือแผนที่ที่มีฟิลด์ {id, ชื่อ, date_asked, คะแนนเสียง, Ask_by, สถานะ} ในทำนองเดียวกันคำตอบคือแผนที่ที่มีฟิลด์ {id, question_id, answer_text, answer_by, โหวต, สถานะ} ในทำนองเดียวกันเราสามารถสร้างแบบจำลองวัตถุผู้ใช้
แต่ละวัตถุเหล่านี้สามารถจัดเก็บโดยตรงใน Redis เป็น Hash ในการสร้างรหัสเฉพาะคุณสามารถใช้คำสั่ง atomic increment บางสิ่งเช่นนี้ -
$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK
$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK
การจัดการโหวต
ตอนนี้ทุกครั้งที่มีคนโหวตคำถามหรือคำตอบคุณแค่ต้องทำสิ่งนี้
$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2
รายการคำถามสำหรับโฮมเพจ
ต่อไปเราต้องการจัดเก็บคำถามล่าสุดเพื่อแสดงในหน้าแรก หากคุณเขียนโปรแกรม. NET หรือ Java คุณจะต้องเก็บคำถามไว้ในรายการ ปรากฎว่าเป็นวิธีที่ดีที่สุดในการจัดเก็บใน Redis เช่นกัน
ทุกครั้งที่มีคนถามคำถามเราจะเพิ่มรหัสลงในรายการ
$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1
ตอนนี้เมื่อคุณต้องการแสดงหน้าแรกของคุณคุณถาม Redis สำหรับคำถาม 25 ข้อล่าสุด
$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"
เมื่อคุณมีรหัสแล้วให้ดึงรายการจาก Redis โดยใช้ pipelining และแสดงให้ผู้ใช้เห็น
คำถามตามแท็ก, เรียงลำดับตามโหวต
ต่อไปเราต้องการดึงคำถามสำหรับแต่ละแท็ก แต่ SO ช่วยให้คุณเห็นคำถามที่มีคะแนนสูงสุดคำถามใหม่หรือคำถามที่ยังไม่ได้ตอบภายใต้แต่ละแท็ก
ในการสร้างแบบจำลองนี้เราใช้คุณลักษณะการเรียงชุด Redis ชุดการเรียงลำดับช่วยให้คุณสามารถเชื่อมโยงคะแนนกับแต่ละองค์ประกอบ จากนั้นคุณสามารถดึงองค์ประกอบตามคะแนนของพวกเขา
ให้ไปข้างหน้าและทำสิ่งนี้กับแท็ก Redis
$ zadd questions_by_votes_tagged:redis 2 question:1
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5
1) "question:2"
2) "question:613"
3) "question:1"
เราทำอะไรที่นี่ เราได้เพิ่มคำถามในชุดเรียงลำดับและเชื่อมโยงคะแนน (จำนวนโหวต) กับแต่ละคำถาม ทุกครั้งที่มีการตอบคำถามเราจะเพิ่มคะแนนของคำถาม และเมื่อผู้ใช้คลิก "คำถามที่ติดแท็ก Redis เรียงตามคะแนน" เราจะทำzrevrange
และกลับไปที่คำถามยอดนิยม
คำถามเรียลไทม์โดยไม่ต้องรีเฟรชหน้า
และในที่สุดคุณสมบัติโบนัส หากคุณเปิดหน้าคำถามไว้ดังนั้นจะแจ้งให้คุณทราบเมื่อมีการเพิ่มคำถามใหม่ Redis ช่วยได้อย่างไรที่นี่?
Redis มีรูปแบบ pub-sub คุณสามารถสร้างช่องได้เช่น "channel_questions_tagged_redis" จากนั้นคุณsubscribe
ผู้ใช้ไปยังช่องทางเฉพาะ เมื่อมีการเพิ่มคำถามใหม่คุณจะpublish
ส่งข้อความไปที่ช่อง ผู้ใช้ทั้งหมดจะได้รับข้อความ คุณจะต้องใช้เทคโนโลยีเว็บเช่นซ็อกเก็ตเว็บหรือดาวหางเพื่อส่งข้อความไปยังเบราว์เซอร์ แต่ Redis ช่วยให้คุณใช้งานระบบประปาทั้งหมดที่ฝั่งเซิร์ฟเวอร์
ความคงทนความน่าเชื่อถือเป็นต้น
Redis จะเก็บข้อมูลไว้ในฮาร์ดดิสก์ซึ่งแตกต่างจาก Cache คุณสามารถตั้งค่า master-slave เพื่อให้ความน่าเชื่อถือที่ดีขึ้น หากต้องการเรียนรู้เพิ่มเติมไปที่หัวข้อการคงอยู่และการจำลองแบบที่นี่ - http://redis.io/documentation