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

ค้นหาซ้ำในการดำเนินการ

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

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

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

โดยเฉพาะคุณจะได้เรียนรู้วิธีการ: 

  • ทำงานกับดัชนี RediSearch 
  • ใช้ประเภทข้อมูล RediSearch ที่แตกต่างกัน เช่น TEXT, NUMERIC, TAG และอื่นๆ 
  • วิธีสร้างแอปพลิเคชันเพื่อแสดงความสามารถของ RediSearch 
  • วิธีปรับใช้องค์ประกอบบริการกับ Azure ด้วยคำสั่งเพียงไม่กี่คำ 
  • วิเคราะห์ข้อมูลทวีตโดยค้นหา RediSearch 

ภาพรวมแอปพลิเคชัน 

ดังที่กล่าวไว้ บริการตัวอย่างช่วยให้คุณใช้ทวีตแบบเรียลไทม์และทำให้สามารถสืบค้นผ่าน RediSearch ได้

ค้นหาซ้ำในการดำเนินการ

มีองค์ประกอบ 2 ส่วน: 

  1. ผู้บริโภค/ดัชนี: อ่านจาก Twitter Streaming API สร้างดัชนี และเพิ่มข้อมูลทวีตอย่างต่อเนื่อง (ใน Redis HASHes) เมื่อมาถึง
  2. บริการค้นหา: REST API ที่ช่วยให้คุณสามารถค้นหาทวีตโดยใช้ไวยากรณ์การสืบค้น RediSearch

ณ จุดนี้ ฉันจะลงลึกถึงวิธีเริ่มต้นและใช้งานโซลูชันเพื่อให้คุณเห็นการทำงานจริง อย่างไรก็ตาม หากคุณสนใจที่จะเข้าใจวิธีการทำงานของส่วนประกอบแต่ละส่วน โปรดดูส่วนแนะนำโค้ดด้านล่างและ GitHub repo สำหรับบล็อกนี้:https://github.com/abhirockzz/redisearch-tweet-analysis

ข้อกำหนดเบื้องต้น

  1. เริ่มต้นด้วย คุณจะต้องมีบัญชี MicrosoftAzure:รับฟรีที่นี่!
  2. ส่วนประกอบบริการที่ระบุไว้ข้างต้นจะถูกปรับใช้กับ Azure Container Instances โดยใช้คำสั่ง Docker CLI ดั้งเดิม ความสามารถนี้เปิดใช้งานโดยการรวมระหว่าง Docker และ Azure
  3. คุณจะต้องใช้ Docker Desktop เวอร์ชัน 2.3.0.5 หรือใหม่กว่า สำหรับ Windows, macOS หรือติดตั้ง Docker ACI Integration CLI สำหรับ Linux หากต้องการใช้ Twitter Streaming API คุณจะต้องมีบัญชีนักพัฒนา Twitter ด้วย หากคุณยังไม่มี โปรดปฏิบัติตามคำแนะนำเหล่านี้ RediSearch ใช้งานได้จริง!

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

ค้นหาซ้ำในการดำเนินการ

ทั้งสององค์ประกอบของบริการของเรามีอยู่ในคอนเทนเนอร์ Docker:บริการจัดทำดัชนีทวีตและบริการ Search API (หากคุณต้องการสร้างอิมเมจ Docker ของคุณเอง โปรดใช้ Dockerfile ที่มีอยู่ใน repo GitHub) 

ตอนนี้คุณจะเห็นว่าสะดวกเพียงใดในการปรับใช้สิ่งเหล่านี้กับ Azure Container Instances ซึ่งช่วยให้คุณเรียกใช้คอนเทนเนอร์ Docker ได้ตามต้องการในสภาพแวดล้อม Azure ที่ไม่มีเซิร์ฟเวอร์ที่มีการจัดการ

ปรับใช้กับ Azure 

docker-compose.yml file กำหนดองค์ประกอบแต่ละรายการ (tweets-search และ ตัวสร้างดัชนีทวีต ). สิ่งที่คุณต้องทำคืออัปเดตเพื่อแทนที่ค่าสำหรับอินสแตนซ์ Azure Redis ของคุณ ตลอดจนข้อมูลประจำตัวของบัญชีนักพัฒนา Twitter ของคุณ นี่คือไฟล์ทั้งหมด: 

สร้างบริบท Azure: 

โคลน repo GitHub: 

ปรับใช้คอมโพเนนต์บริการทั้งสองโดยเป็นส่วนหนึ่งของกลุ่มคอนเทนเนอร์: 

(โปรดทราบว่าคำสั่ง Docker Compose ในปัจจุบันมีอยู่ในบริบท ACI เริ่มต้นด้วย docker compose . นั่นคือ ไม่ เหมือนกับ docker-compose ด้วยยัติภังค์ )

คุณจะเห็นผลลัพธ์ที่คล้ายกับสิ่งนี้: 

รอให้บริการเริ่มทำงาน คุณสามารถตรวจสอบพอร์ทัล Azure ได้ เมื่อทั้งสองบริการเริ่มทำงานแล้ว คุณสามารถตรวจสอบบันทึกที่เกี่ยวข้องได้: 

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

ช่วงเวลาแห่งความจริง!

ถึงเวลาค้นหาข้อมูลทวีต ในการดำเนินการดังกล่าว คุณสามารถเข้าถึง REST API ใน Azure Container Instances ด้วยที่อยู่ IP และชื่อโดเมนแบบเต็ม (FQDN) (อ่านเพิ่มเติมในการเข้าถึงคอนเทนเนอร์) หากต้องการค้นหา IP ให้เรียกใช้ docker ps และทำเครื่องหมายที่ PORTS ส่วนในผลลัพธ์ (ดังแสดงด้านล่าง):

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

(หมายเหตุ ฉันใช้ curl ในตัวอย่างด้านล่าง แต่ขอแนะนำ “REST Client” สำหรับ VS Code เป็นอย่างยิ่ง) 

ตั้งค่า URL พื้นฐานสำหรับ API บริการค้นหา: 

เริ่มอย่างง่ายและสืบค้นเอกสารทั้งหมด (โดยใช้ * ):

คุณจะเห็นผลลัพธ์ที่คล้ายกับสิ่งนี้: 

สังเกตส่วนหัว Page-Size และ ค้นหา-ฮิต :นี่คือส่วนหัวที่กำหนดเองที่ถูกส่งผ่านจากแอปพลิเคชัน ส่วนใหญ่เพื่อแสดงการแบ่งหน้าและขีดจำกัด ในการตอบคำถาม "ขอเอกสารทั้งหมดให้ฉัน" เราพบผลลัพธ์ 12 รายการใน Redis แต่เนื้อหา JSON ส่งคืน 10 รายการ เนื่องจากพฤติกรรมเริ่มต้นของ RediSearch Go API ซึ่งคุณเปลี่ยนได้โดยใช้พารามิเตอร์การค้นหาอื่น เช่น:

หรือตัวอย่างเช่น ค้นหาทวีตที่ส่งจาก iPhone:

คุณอาจไม่ต้องการแอตทริบิวต์ทั้งหมดในผลการค้นหาเสมอไป ตัวอย่างเช่น นี่คือวิธีเรียกผู้ใช้กลับ (ชื่อหน้าจอ Twitter) และข้อความทวีต:

คำถามเกี่ยวกับชื่อผู้ใช้ (เช่น เริ่มต้นด้วย jo):

คุณยังสามารถใช้แอตทริบิวต์ร่วมกันในการสืบค้น:

แล้วเราจะมองหาทวีตที่มีแฮชแท็กเฉพาะล่ะ? เป็นไปได้ไหมที่จะใช้แฮชแท็กหลายอัน (คั่นด้วย |)?

ต้องการทราบจำนวนทวีตที่มี biden แฮชแท็กถูกสร้างขึ้นเมื่อเร็ว ๆ นี้? ใช้แบบสอบถามช่วง:

หากคุณโชคดีที่ได้ข้อมูลพิกัดบนทวีต คุณสามารถลองดึงข้อมูลเหล่านั้นแล้วค้นหาใน พิกัด แอตทริบิวต์:

นี่เป็นเพียงตัวอย่างบางส่วน อย่าลังเลที่จะทดลองเพิ่มเติมและลองใช้คำค้นหาอื่นๆ ส่วนนี้ในเอกสาร RediSearch อาจมีประโยชน์!

สำคัญ: หลังจากที่คุณทำเสร็จแล้ว อย่าลืมหยุดบริการและคอนเทนเนอร์ที่เกี่ยวข้องใน Azure Container Instances: 

ใช้พอร์ทัล Azure เพื่อลบอินสแตนซ์ Azure Redis ที่คุณสร้างขึ้น

โค้ดแนะนำ

ส่วนนี้ให้ภาพรวมระดับสูงของโค้ดสำหรับแต่ละส่วนประกอบ วิธีนี้จะช่วยให้นำทางซอร์สโค้ดใน GitHub repo ได้ง่ายขึ้น

ทวีตผู้บริโภค/ตัวสร้างดัชนี:

มีการใช้ไลบรารี go-twitter เพื่อโต้ตอบกับ Twitter

มันตรวจสอบความถูกต้องของ Twitter Streaming API:

และฟังสตรีมทวีตใน goroutine แยก:

สังเกตว่า index.AddData(tweetToMap(tweet))— นี่คือที่ที่ส่วนประกอบการจัดทำดัชนีถูกเรียกใช้ มันเชื่อมต่อกับ Azure Cache สำหรับ Redis:

จากนั้นจะลดดัชนี (และเอกสารที่มีอยู่ด้วย) ก่อนสร้างใหม่:

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

ข้อมูลสำหรับทวีตแต่ละรายการจะถูกเก็บไว้ใน HASH (ชื่อ ทวีต:<ทวีต ID> ) โดยใช้ HSET การดำเนินการ: 

การค้นหาทวีตเปิดเผย REST API เพื่อสอบถาม RediSearch ตัวเลือกทั้งหมด (รวมถึงข้อความค้นหา ฯลฯ) จะถูกส่งต่อในรูปแบบของพารามิเตอร์การสืบค้น ตัวอย่างเช่น https://localhost:8080/search?q=@source:iphone . มันแยกพารามิเตอร์แบบสอบถามที่จำเป็น:

q พารามิเตอร์บังคับ อย่างไรก็ตาม คุณสามารถใช้พารามิเตอร์ต่อไปนี้ในการค้นหาได้: 

  • ฟิลด์ :เพื่อระบุแอตทริบิวต์ที่คุณต้องการส่งคืนในผลลัพธ์ และ 
  • offset_limit :หากคุณต้องการระบุออฟเซ็ตจากตำแหน่งที่คุณต้องการค้นหาและจำนวนเอกสารที่คุณต้องการรวมไว้ในผลลัพธ์ (โดยค่าเริ่มต้น ออฟเซ็ตคือ 0 และขีดจำกัดคือ 10 – ตามไคลเอ็นต์ RediSearch Go)

ตัวอย่างเช่น:

สุดท้าย ผลลัพธ์จะถูกทำซ้ำและส่งกลับเป็น JSON (อาร์เรย์ของเอกสาร):

นั่นคือทั้งหมดสำหรับส่วนนี้!

ระดับ Redis Enterprise บน Azure Cache สำหรับ Redis

Redis Enterprise พร้อมใช้งานเป็นบริการดั้งเดิมบน Azure ในรูปแบบของสองระดับใหม่สำหรับ Azure Cache สำหรับ Redis ซึ่งดำเนินการและสนับสนุนโดย Microsoft และ Redis บริการนี้ช่วยให้นักพัฒนาสามารถเข้าถึงชุดคุณลักษณะ Redis Enterprise ที่หลากหลาย รวมถึงโมดูลต่างๆ เช่น RediSearch สำหรับข้อมูลเพิ่มเติม โปรดดูแหล่งข้อมูลเหล่านี้: 

  • Azure Cache สำหรับ Redis ขณะนี้ระดับองค์กรพร้อมใช้งานแล้ว
  • กระชับความร่วมมือกับ Microsoft เพื่อขยาย Redis Enterprise ในระบบคลาวด์ 
  • Microsoft และ Redis ร่วมมือกันเพื่อมอบความสามารถใหม่ให้กับ Azure Cache สำหรับ Redis 
  • ฟีเจอร์ Redis Enterprise บน Azure Cache สำหรับ Redis 

บทสรุป

แอปพลิเคชั่นแบบ end-to-end นี้สาธิตวิธีการทำงานกับดัชนี นำเข้าข้อมูลแบบเรียลไทม์เพื่อสร้างเอกสาร (ข้อมูลทวีต) ซึ่งจัดทำดัชนีโดยกลไก RediSearch จากนั้นใช้ไวยากรณ์การสืบค้นที่หลากหลายเพื่อดึงข้อมูลเชิงลึกเกี่ยวกับทวีตเหล่านั้น

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

หากคุณยังเริ่มต้นอยู่ ให้ไปที่หน้า RediSearch Quick Start

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับความสามารถขององค์กรใน Azure Cache for Redis คุณสามารถดูแหล่งข้อมูลต่อไปนี้: 

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