จัดการ Redis ผ่าน GUI ด้วย RedisInsight
RedisInsight คือเครื่องมือที่ช่วยจัดการ Redis database ผ่านทางหน้า GUI โดยไม่ต้องใช้ Command Line เราสามารถเลือกติดตั้ง RedisInsight ด้วยวิธีต่างๆดังนี้
Install RedisInsight
เราสามารถเลือก Install RedisInsight ได้จากทางเลือกต่างๆดังนี้
Download RedisInsight
เราสามารถเลือก Download Installer ตาม Operating System ต่างๆได้จากที่นี่ แต่เราต้องกรอก E-mail และรายละเอียดลงไปก่อนการ Download ดังรูป
ถ้าอยากให้ติดตั้งได้ง่ายขึ้นแนะนำให้ติดตั้งผ่าน Window Store หรือ App Store จะง่ายกว่ามาก
Install Radis บน Docker
อีกทางเลือกนึงคือการติดตั้ง Redis โดยใช้ Docker ซึ่งจะสามารถใช้ได้ทุก platform โดยมีขั้นตอนต่างๆ ดังนี้
-
เริ่มจากการ Pull image ลงมาก่อน
1
$ docker pull redis/redisinsight
Image นี้จะมีเฉพาะ RedisInsight เท่านั้น เราต้องมี Redis Server ที่ทำงานอยู่แล้ว หรือถ้าอยากติดตั้ง RedisInsight ที่มี Redis Server มาด้วยให้เปลี่ยนไปใช้ Image ของ Redis Stack(redis/redis-stack:latest) ในบทความนี้เราจะใช้ Container ที่มีเฉพาะ RedisInsight เท่านั้น
-
สร้าง Redisinsight Container ด้วยคำสั่ง
1 2
$ docker run -d --name redisinsight \ -p 5540:5540 redis/redisinsight:latest
RedisInsight จะใช้ port 5540 เป็น default port
-
ถ้าต้องการเก็บข้อมูลการใช้งาน RedisInsight ไว้เราต้อง Mount Volume ออกมาด้วยคำสั่ง
1 2 3
$ docker run -d --name redisinsight \ -p 5540:5540 redis/redisinsight:latest \ -v redisinsight:/data
ใน docker command นี้จะใส่ parameter
-v
เข้าไปเพื่อสร้าง volume ชื่อ redisinsight สำหรับเก็บข้อมูลการใช้งาน RedisInsight -
เข้าไปหน้าแรกของ RedisInsight ได้ที่ http://localhost:5540
วิธีการใช้งาน RedisInsight
-
Accept License เมื่อเข้ามาในหน้าแรกของ RedisInsight ที่ http://localhost:5540 เราต้องยอมรับข้อกำหนดและเงื่อนไขการใช้งานเสียก่อน โดยเลือก I have read and understood the Terms แล้วกดปุ่ม Submit
-
Connect Database โดยวิธีการ Connect ไปยัง Redis จะมีอยู่ 2 ทางเลือกคือ
- Add Database แบบ Manual(ระบุทุกอย่างเองทั้งหมด)
- Autodiscovery Database สำหรับผู้ใช้งาน Redis Cloud, Redis Enterprise หรือ Redis Sentinel
เนื่องจากเราเป็น Docker Container ที่มีแค่ RedisInsight เราเลยต้องสร้าง Connection โดยเลือก Add connection details manually
จากนั้นกรอกข้อมูลตามรูป ซึ่ง Redis Server ผมใช้เป็น Contaienr เหมือนกันเลยจะต้องใส่ URL เป็น host.docker.internal และใช้ Default Port ที่ 6379
-
Home เราจะพบกับหน้าการใช้งาน Database
โดยที่ด้านซ้าย จะแสดง List ของ Keys ที่เราได้สร้างขึ้น และที่ด้านขวาจะเป็น Value(data) ที่อยุ่ใน Key นั้น ซึ่งตอนนี้เราเพิ่งจะเริ่มสร้าง Database ขึ้นมาดังนั้นเราจึงยังไม่มี Keys ใดๆ ในตอนนี้
ถ้าเรา Add Key เข้าไปแล้วแต่ยังไม่ขึ้น(Redis Insight ไม่ได้แสดงผลแบบ Realtime) เราสามารถกดปุ่ม Refresh ที่มุมขวาบนได้ ดังรูป
Refresh Key ตรงนี้ -
Add Key ในการเพิ่ม Key ใหม่ เราต้องกดปุ่ม + Key ที่มุมขวาบนดังรูป
ใน Redis เราสามารถเลือกประเภท(Data types)ของ Key ได้ โดยจะมีทางเลือกต่างๆ ดังนี้
ซึ่งสามารถอ่านคำอธิบายของแต่ละ Datatype ได้ที่บทความเรื่อง Redis คืออะไร?
ในลำดับต่อไปเราไปดูวิธีการสร้าง Key ใน Datatypes ต่างๆ
String
Key แรกที่เราจะสร้างคือ String ซึ่งเราจะใช้เก็บข้อมูลที่เป็นข้อความหรือตัวเลขก็ได้ ซึ่งสิ่งที่เราต้องกำหนดมีดังนี้
- Key Type ในตัวอย่างนี้เราจะเลือกเป็น String
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Key name ชื่อของ Key
ตัวอย่างการเพิ่ม Key ที่เป็น String
ทดสอบการทำงานผ่าน Redis CLI
เราสามารถ run Redis Command ผ่านทาง CLI ได้ด้วยการกดเลือก Tab CLI ที่มุมซ้ายล่าง ดังรูป
- SET เพื่อเพิ่มหรือแก้ไข Key ถ้ามี Key อยู่แล้วจะเป็นการแก้ไข
- GET เพื่อดึงข้อมูล Key ออกมาใช้งาน
- DEL เพื่อลบ Key
Hash
Hash เป็น Datatype ที่จะเก็บข้อมูลเป็น Object ให้นึกถึง Dictionary ใน Programming Language ทั่วไป หรือ Json ใน Javascript เราต้องมีชื่อ Field และ Value ของ Field นั้น
สิ่งที่เราต้องกำหนดในหน้า New Key คือ
- Key Type ในตัวอย่างนี้เราจะเลือกเป็น Hash
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Key name เราจะตั้งชื่อของ Key เป็น Demo-Hash หลังจากนั้นก็ระบุ
- Field และ Value เหมือนกับ Key และ Value ใน JSON และ Dictionary ใน Programming Language อื่นๆ แค่เปลี่ยนจากคำว่า Key เป็น Field เพราะเราใช้คำว่า Key ไปแล้วใน Redis
หลังจากนั้นกดปุ่ม Add Key
ในตัวอย่างนี้เราจะสร้าง Object ชื่อ Demo-Hash ซึ่งประกอบไปด้วย Field ชื่อ name, lastName, Age และ job ตามลำดับ
หลังจากเพิ่ม Key เข้ามาแล้ว ถ้าเราต้องการแก้ไขหรือลบ Field เราสามารถกดปุ่ม Edit(รูปดินสอ) หรือ Delete(รูปถังขยะ) ที่อยู่ในแต่ละ Field ได้เลย
ทดสอบดึงข้อมูลผ่าน Redis CLI
เข้าไปที่ Redis CLI ตามตัวอย่างก่อนหน้านี้ แล้วลอง run Redis Commands เหล่านี้
-
HGETALL ดึงข้อมูลจาก Hash Key ที่สร้างขึ้น
> HGETALL Demo-Hash 1) "name" 2) "John" 3) "lastName" 4) "Doe" 5) "Age" 6) "45" 7) "job" 8) "Software Engineer"
-
HGET ดึงข้อมูลใน Field ที่ต้องการออกมา
> HGET Demo-Hash name "John"
-
HSET แก้ไข Field หรือเพิ่ม Field ใหม่ทำได้โดยใช้คำสั่ง HSET เช่น ทำการแก้ไขค่าของ Job จาก “Software Engineer” เป็น “Software Tester”
> HSET Demo-Hash job "Software Tester" (integer) 0 > HGET Demo-Hash job "Software Tester"
-
HDEL หากต้องการลบ Field ใน Hash หรือ Key เราจะใช้คำสั่ง HDEL เช่น ถ้าต้องการลบ Field job ออก
> HDEL Demo-Hash job (integer) 1 > HGETALL Demo-Hash 1) "name" 2) "John" 3) "lastName" 4) "Doe" 5) "Age" 6) "45"
จะเห็นว่า Field job ของเราหายไปเรียบร้อยแล้ว
List
List เป็นการเก็บข้อมูลลงใน Array ซึ่งการเก็บจะเป็นการเก็บข้อมูลแบบมีลำดับในการเข้า
สิ่งที่เราต้องใส่ในหน้า New Key มีดังนี้
- Key Type ในตัวอย่างนี้เราจะเลือกเป็น List
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Key name ตั้งชื่อของ Key ในตัวอย่างนีั้จะใช้ชื่อว่า Demo-List
- Element เป็น Element แรกของ List ในการทำงานกับ List เราต้องระบุสมาชิกตัวแรกเข้าไปก่อนหลังจากนั้นค่อยเข้าไปเพิ่มสมาชิกที่เหลือทีหลัง
หลังจากนั้นจะเราจะเช้าไปเพิ่ม Element อื่นๆในหน้า Edit ดังรูป ถ้าต้องการเพิ่ม Element ใหม่ เราสามารถปุ่ม + ที่มุมด้านขวาบนได้
- Push to tail จะต่อท้ายเข้าไปเป็นสมาชิกตัวหลังสุด
- Push to head จะเพิ่มเข้าไปแทนที่สมาชิกตัวแรก
การทำงานของ List ใน Redis จะแตกต่างจาก Array หรือ List อื่นๆตรงที่เราจะเพิ่มสมาชิกเข้าไปเป็นตัวแรกหรือตัวสุดท้ายก็ได้
ทดสอบดึงข้อมูลผ่าน Redis CLI
ตัวอย่างการเรียกข้อมูล List ออกมาแสดงผล มีดังนี้
- LRANGE เป็นการดึงสมาชิกของ List ในตำแหน่งที่ต้องการออกมา โดยที่เราต้องระบุตำแหน่งเริ่มต้น(start) และตำแหน่งสุดท้าย(stop)เข้าไปด้วย
ในตัวอย่างนี้เป็นการดึงสมาชิกทุกตัวใน List ออกมาเพราะว่า> LRANGE Demo-List 0 -1 1) "One" 2) "Two" 3) "Three"
- Start เริ่มต้นที่ index 0(สมาชิกตัวแรก)
- Stop จนถึงสมาชิกตัวสุดท้าย(-1) ถ้านับจากข้างหลังจะเริ่มจาก -1
Set
การเก็บข้อมูลแบบ Set จะเป็นข้อมูลที่เหมือน Array แต่จะมีลักษณะที่แตกต่างจาก Array ดังนี้
- ข้อมูลจะไม่มีลำดับ ไม่มีการเรียงก่อนหรือหลัง
- ข้อมูลจะต้องไม่ซ้ำกัน(unique) ถ้าซ้ำกันถือว่าเป็นตัวเดียวกัน
สิ่งที่เราต้องระบุในตอนสร้าง Key มีดังนี้
- Key name ตั้งชื่อของ Key
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Members สมาชิกใน Set ซึ่งในตัวอย่างนี้เราจะสร้าง Set ที่มีสมาชิก 3 คนคือ John, Devid และ Emma
ทดสอบดึงข้อมูลผ่าน Redis CLI
- SMEMBERS แสดงรายการสมาชิกทั้งหมดของ Set
> SMEMBERS Demo-Set 1) "John" 2) "Devid" 3) "Emma"
- SISMEMBER เป็นการถามว่า Value นี้เป็นสมาชิกใน Set นี้หรือไม่
SISMEMBER จะ return 1 ถ้าพบว่าค่าที่ระบุเป็นสมาชิกใน Set แต่ถ้าหาไม่พบจะ return 0> SISMEMBER Demo-Set "john" (integer) 1 > SISMEMBER Demo-Set "jenny" (integer) 0
- SMISMEMBER จะเหมือนกับ SISMEMBER แต่จะเป็นการค้นหาหลายๆค่าพร้อมๆกัน
> SISMEMBER Demo-Set "john" "jenny" 1) "1" 2) "0" > SMISMEMBER test john devid 1) "1" 2) "1"
Sorted Set
เนื่องจากการไม่มีลำดับของ Set ทำให้เราไม่สามารถเรียงลำดับของข้อมูลที่อยู่ใน Set ได้ดังนั้น Redis จึงมี Sorted Set เพื่อให้เราใส่ Score เพิ่มเข้าไปได้ แล้ว Redis จะนำ Score นี้ไปจัดเรียงสมาชิกใน Set ให้เรา
สิ่งที่เราต้องระบุในตอนสร้าง Key มีดังนี้
- Key name ตั้งชื่อของ Key
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Member สมาชิกใน Sorted Set ซึ่งจะเหมือนกับ Set เลยแต่นอกจากสมาชิกที่จะเพิ่มเข้าไปแล้ว เรายังต้องระบุคะแนน(Score) ที่จะนำไปใช้ในการเรียงลำดับ(Sorted)
ทดสอบดึงข้อมูลผ่าน Redis CLI
-
ZRANGE เพื่อแสดงรายการสมาชิกตามช่วงที่เรากำหนด คล้ายๆกับ LRANGE ที่เราใช้ใน List
> ZRANGE Demo-Sorted-Set 0 -1 1) "John" 2) "Devid" 3) "Emma"
ในตัวอย่างนี้เราใช้ตำแหน่งเป็นตัวระบุจุดเริ่มต้นและจุดสิ้นสุดเหมือนกับ LRANGE ในตัวอย่างก่อนหน้านี้
> ZRANGE Demo-Sorted-Set 35 50 BYSCORE 1) "John" 2) "Devid" 3) "Emma"
ถ้าเราต้องการดึงข้อมูลโดยเรียงลำดับตาม Score ที่เราใส่เข้าไป เราจะใช้ BYSCORE ต่อท้ายเพื่อบอกให้ Redis เรียงตามคะแนนที่เราระบุเข้าไป
> ZRANGE Demo-Sorted-Set (35 50 BYSCORE 1) "Devid" 2) "Emma"
ถ้าเราต้องการ Exclude หรือไม่รวมค่าเริ่มต้น(ในตัวอย่างนี้จะไม่รวม 100) เราจะใส่วงเล็บเปิดไว้ข้างหน้า
-
ZREVRANGE เป็นการเรียงจากมากไปน้อย(ตรงข้ามกับ ZRANGE)
> ZREVRANGE Demo-Sorted-Set 0 -1 1) "Emma" 2) "Devid" 3) "John"
JSON
เป็นการเก็บ JSON เข้าไปใน Database ซึ่งถ้าจะใช้ Datatype ประเภทนี้เราต้องมี Module ชื่อว่า RedisJson ติดตั้งเข้ามาในเครื่อง หรืออาจใช้ container ชื่อ redislabs/rejson หรือ redis/redis-stack-server แทน redis ธรรมดา
สิ่งที่เราต้องระบุในตอนสร้าง Key มีดังนี้
- Key name ตั้งชื่อของ Key
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Value ซึ่งเป็น Textfield ที่เราสามารถพิมพิ์ JSON เข้าไปได้เลย ยกตัวอย่างเช่น ถ้าเราต้องการ JSON ที่มี key ชื่อ Name และ Job เราจะใส่ข้อมูลเข้าไปดังรูป
หลังจากสร้าง Key ขึ้นมาแล้วเราสามารถเข้ามาเพิ่มหรือลด Fields ผ่านทาง UI ได้ดังรูป เช่น ถ้าเราต้องการเพิ่มข้อมูลให้กด + ที่บรรทัดล่างสุด
ทดสอบดึงข้อมูลผ่าน Redis CLI
-
JSON.GET เพื่อดึงข้อมูลจาก JSON Object ออกมาแสดงโดยใช้ JSONPath ซึ่งจะคล้ายๆกับการใช้งาน XPATH ใน XML
> JSON.GET Demo-Json $.name "\"John\""
เครื่องหมาย $ จะหมายถึง root และถ้ามีข้อมูลที่เป็น array ก็สามารถระบุ index ของ array เข้าไปได้เลย
> JSON.GET Demo-Json $.skills[0] "\"react\""
ลองดู syntax ของ JSONPath เพิ่มเติมได้ที่นี่
-
JSON.MGET เราสามารถดึงข้อมูลได้จากหลายๆ Key พร้อมๆกัน
> JSON.MGET Demo-Json Demo-Json2 $.name 1) "[\"John\"]" 2) "[\"Jenny\"]"
Stream
Stream เป็น Datatypes ที่เหมือนกับ Log คือเราสามารถเพิ่มข้อมูล(Append)เข้าไปใน Field เดียวกันไปเรื่อยๆได้ โดยใช้ Timestamp หรือตัวเลข เป็น Primary key
สิ่งที่เราต้องระบุในตอนสร้าง Key มีดังนี้
- Key name ตั้งชื่อของ Key
- TTL คือการกำหนดอายุของ Key ซึ่งการเว้นว่างหมายความว่าจะไม่มีวันหมดอายุ
- Entry ID คือ Primary key ที่ต้องเป็น timestamp หรือตัวเลขที่ต้องมีค่าเพิ่มขึ้นเรื่อยๆ ซึ่งถ้าเราใส่เป็น * Redis จะใส่ Timestamp ของเวลาที่ข้อมูลเข้าไปใน Database ให้
จากนั้นเพิ่มค่า Value ตามที่ต้องการ และกด Submit
เราสามารถเพิ่มข้อมูลเช้าไปได้โดยการกด + ตรงบรรทัดล่างสุด
ทดสอบดึงข้อมูลผ่าน Redis CLI
-
XRANGE แสดงรายการทั้งหมดที่ตรงกับช่วงของ IDs โดยที่เราจะต้องระบุ ID เริ่มต้นและ ID สิ้นสุด
> XRANGE Demo-Stream - + 1) 1) "1719132468319-0" 2) 1) "Status" 2) "offline" 2) 1) "1719132518177-0" 2) 1) "Status" 2) "online"
- เครื่องหมาย - จะหมายถึง Minimum ID ค่าที่เกิดมานานสุด
- เครื่องหมาย + จะหมายถึง Maximum ID ค่าที่เกิดมาหลังสุด
ในตัวอย่างนี้จะเป็นการดึงข้อมูลออกมาจาก Field ชื่อว่า Status ที่อยู่ใน Key ชื่อว่า Demo-Stream ซึ่งจะเห็นว่าในแต่ละครั้งที่เพิ่มข้อมูลเข้าไปใน Stream จะมี Timestamp เป็น Key เนื่องจากเรากำหนด Entry ID เป็น *