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

เริ่มต้นใช้งาน Redis

เริ่มต้นใช้งาน Redis

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

  • สตริง
  • แฮช
  • รายการ
  • ชุด
  • ชุดเรียง

โครงสร้างแต่ละประเภทมีคำสั่งที่ใช้ร่วมกันเช่นเดียวกับคำสั่งบางคำสั่งที่เฉพาะเจาะจงสำหรับประเภทโครงสร้างเฉพาะ

บทนำนี้จะครอบคลุมพื้นฐานของวิธีใช้ Redis และภาพรวมของโครงสร้างข้อมูลต่างๆ เราจะครอบคลุมคำสั่งพื้นฐานบางส่วน แม้ว่าโปรดทราบว่า Redis มีมากกว่า 160 ในขณะที่เขียน และคุณสามารถค้นหาเอกสารที่ยอดเยี่ยมได้ที่ redis.io/commands

เริ่ม Redis

ใช้อินสแตนซ์ของ ObjectRocket สำหรับ Redis หรือติดตั้ง Redis ในเครื่อง

หากต้องการติดตั้งในเครื่อง ให้ดาวน์โหลด แตกไฟล์ และคอมไพล์โค้ด:

$ wget https://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

เริ่มอินสแตนซ์ในเครื่อง:

$ src/redis-server

การใช้ Redis

ตอนนี้คุณพร้อมที่จะโต้ตอบกับ Redis โดยใช้ไคลเอนต์ในตัวแล้ว สำหรับอินสแตนซ์ ObjectRocket for Redis ให้เริ่ม redis-cli ด้วยชื่อโฮสต์ พอร์ต และรหัสผ่าน:

$ redis-cli -h my-host -p 1234 -a mypassword

หากคุณกำลังใช้อินสแตนซ์ภายในเครื่อง โฮสต์คือ localhost พอร์ตดีฟอลต์คือ 6379 และไม่มีรหัสผ่านตามค่าเริ่มต้น

$ redis-cli

GET และ SET

ในระดับที่ง่ายที่สุด Redis สามารถอธิบายได้ว่าเป็นที่เก็บคีย์-ค่า โดยการออกคำสั่ง SET foo bar คุณตั้งค่าของ foo เป็น bar ตัวอย่างเช่น ออกคำสั่งต่อไปนี้จาก redis-cli ที่คุณเพิ่งเริ่มต้น:

redis> SET foo bar
OK

ตอนนี้อ่านค่าของ foo ด้วยคำสั่ง GET

redis> GET foo
"bar"

หมดอายุและ TTL

คุณสามารถตั้งค่าคีย์ให้หมดอายุในระยะเวลาที่กำหนดโดยใช้คำสั่ง EXPIRE TTL จะรายงานเวลาที่เหลือก่อนที่คีย์จะหมดอายุ

redis> SET foo bar
OK
redis> EXPIRE foo 120
(integer) 1
redis> TTL foo
(integer) 113

รายการ

คุณลักษณะเด่นประการหนึ่งของ Redis คือค่าของคีย์อาจเป็นโครงสร้างข้อมูล ไม่ใช่แค่ค่าเท่านั้น

ในการสร้างรายการให้ใช้ LPUSH หรือ RPUSH หากมีรายการอยู่แล้ว LPUSH จะเพิ่มค่าที่กำหนดที่จุดเริ่มต้นของรายการและ RPUSH จะเพิ่มไปที่จุดสิ้นสุด

redis> LPUSH cities "San Francisco"
(integer) 1
redis> RPUSH cities "Austin"
(integer) 2
redis> LRANGE cities 0 -1
1. "San Francisco"
2. "Austin"
redis> SORT cities alpha
1. "Austin"
2. "San Francisco"
redis> LPOP cities
"San Francisco"
redis> LRANGE cities 0 -1
1. "Austin"

คำสั่ง SORT เรียงลำดับรายการ lexicographically ตามลำดับจากน้อยไปมากด้วยอาร์กิวเมนต์ ALPHA หากต้องการเรียงลำดับจากมากไปหาน้อย ให้ผนวกอาร์กิวเมนต์ DESC ต่อท้ายคำสั่ง SORT

คำสั่ง RPOP จะแสดงองค์ประกอบจากจุดสิ้นสุดของรายการ LPOP แสดงองค์ประกอบตั้งแต่เริ่มต้นของรายการ

ชุด

ชุดจะคล้ายกับรายการ ยกเว้นแต่ละองค์ประกอบสามารถเกิดขึ้นได้เพียงครั้งเดียว ในตัวอย่างด้านล่าง เราสร้างกลุ่มประเทศสหรัฐอเมริกาขนาดเล็ก คำสั่ง SADD เพิ่มรายการลงในชุด ยกเว้นว่ามีรายการอยู่ในชุดแล้ว หากไม่มีรายการอยู่ จะเพิ่มและส่งคืน 1 รายการ มิฉะนั้น 0 จะถูกส่งกลับ SMEMBERS คืนสินค้าทั้งหมดในชุด SCARD คืนค่าจำนวนขององค์ประกอบของชุด SREM ลบรายการออกจากรายการ

redis> SADD states "Vermont"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
redis> SADD states "Texas"
(integer) 1
redis> SCARD states
(integer) 2
redis> SADD states "Vermont"
(integer) 0
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
redis> SADD states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
3. "California"
redis> SREM states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"

แฮช

เมื่อใช้แฮช คุณสามารถกำหนดและจับคู่ค่าสตริงกับฟิลด์ในแต่ละคีย์ได้ แฮชที่มีฟิลด์ไม่กี่ฟิลด์จะถูกจัดเก็บในลักษณะที่ใช้พื้นที่น้อยมาก ดังนั้นคุณสามารถจัดเก็บอ็อบเจ็กต์นับล้านในอินสแตนซ์ Redis ขนาดเล็กได้ ในตัวอย่างด้านล่าง ชื่อผู้ใช้:1 ถูกตั้งค่าเป็น “john racker” โดยใช้ HSET สั่งการ. คำสั่ง HGET ใช้เพื่อรับค่าชื่อของผู้ใช้ HGETALL ส่งคืนคีย์และค่าทั้งหมดที่เกี่ยวข้องกับคีย์ที่ระบุ

redis> HSET user:1 name "john racker"
(integer) 1
redis> HGET user:1 name
"joe racker"
redis> HSET user:1 company "objectrocket"
(integer) 1
redis> HGET user:1 company
"ObjectRocket"
redis> HSET user:1 city "austin"
(integer) 1
redis> HGET user:1 city
"austin"
redis> HGETALL user:1
1. "name"
2. "john racker"
3. "company"
4. "objectrocket"
5. "city"
6. "austin"

ชุดเรียง

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

ในตัวอย่างนี้ เราจะเพิ่มคะแนนรวมของทีม 5 อันดับแรกในพรีเมียร์ลีกอังกฤษ ณ วันที่ 23/10/2014:

redis> ZADD EPL 22 "chelsea"
(integer) 1
redis> ZADD EPL 17 "man city"
(integer) 1
redis> ZADD EPL 16 "southampton"
(integer) 1
redis> ZADD EPL 13 "liverpool"
(integer) 1
redis> ZADD EPL 13 "west ham"
(integer) 1
redis> ZRANK EPL "chelsea"
(integer) 3
redis> ZRANK EPL "liverpool"
(integer) 0
redis> ZRANK EPL "arsenal"
(nil)

ต่อไป เราจะจัดอันดับทีมตามคะแนนรวมโดยใช้ ZRANGE:

redis> ZRANGE EPL 0 -1
1) "liverpool"
2) "west ham"
3) "southampton"
4) "man city"
5) "chelsea"
redis> ZRANGE EPL 2 3
1) "southampton"
2) "man city"

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

redis> ZREVRANGE EPL 0 -1
1) "chelsea"
2) "man city"
3) "southampton"
4) "west ham"
5) "liverpool"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "man city"
4) "17"
5) "southampton"
6) "16"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"

ถัดมา เซาแธมป์ตัน ลงเล่น ชนะ 3 แต้ม เราใช้ ZINCRBY เพื่อเพิ่มคะแนน และ ZREVRANGE เพื่อดูว่าเซาแธมป์ตันขยับขึ้นเป็นอันดับสองในลีกได้อย่างไร เรายังสามารถใช้ ZREVRANK เพื่อดูอันดับของ Southampton ได้อีกด้วย หมายเหตุ:อันดับเป็น 0 ซึ่งหมายความว่าสมาชิกที่มีคะแนนสูงสุด (เชลซี) มีอันดับ 0

redis> ZINCRBY EPL 3 "southampton"
"19"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "southampton"
4) "19"
5) "man city"
6) "17"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"
redis> ZREVRANK EPL "southampton"
(integer) 1
redis> ZREVRANGEBYSCORE EPL 25 (15
1) "chelsea"
2) "southampton"
3) "man city"

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