เรารู้จัก Redis กันเถอะ ( ภาค 1 )

Sinsombat Jintavanich
King Power Click
Published in
3 min readJun 4, 2019

พูดถึงเรื่อง Redis เราจะอยากรู้อะไรบ้างนะ

Redis คืออะไร

เราจะใช้ Redis ทำอะไร

ขอดู sample ซักหน่อยเพื่อความเห็นภาพ

บทความนี้เราจะโฟกัสกันเท่านี้ก่อนครับ

ไปต่ออย่างไว

Redis คืออะไร

Redis คือ open source (BSD licensed) เพื่อทำ ฐานข้อมูลที่มีโครงสร้างแบบ key-value ที่เป็น multi-structure และเป็น nosql ( ก็คือไม่มี schema column name ไว้ join กันน่ะ ) ลงใน memory โดยนิยมใช้เก็บข้อมูลที่เรียกดูแบบด่วนๆและบ่อยๆ

โดย Redis สามารถจัดกลุ่มของข้อมูลได้หลายชนิด

strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams

พอเดาๆจากชื่อว่าเกี่ยวกับอะไรก็ดูจะนำไปประยุกต์ใช้ได้หลายด้าน แต่ว่าสำหรับงานเล็ก งานใหญ่ทั่วๆไป น่าจะได้จับต้องกันในส่วนที่ ตัวหนา ไว้นั่นหละครับท่านผู้ชม

ประโยชน์ของ Redis

ว่ากันถึงประโยชน์ที่เราจะได้ใช้งานกัน Redis ใช้เก็บข้อมูลที่เราต้องการในระบบ เหมือนกับ MS Access, MySQL, Postgresql, MogoDB, Memcached ที่น่าคุ้นๆตา และอื่นๆอีกมากมาย

โดยแต่ละเจ้าก็มีจุดขายในความสามารถของตัวเองต่างกันไป โดยจุดขาย Radis จะใกล้เคียงกับ Memcached สุด คือเป็นฐานข้อมูล in-memory แบบ key-value และนิยมมาใช้ทำ ตัว cache ข้อมูล ดังนั้นเพื่อความไม่ทับไลน์จนสับสน เราจึงไม่เห็นทั้ง Redis และ Memcached ทำงานร่วมกันในระบบหนึ่งๆ

ทำไมต้อง เก็บข้อมูลไว้ที่ memory กันล่ะ เพราะมันทำให้เราเข้าถึงได้อย่างรวดเร็วทั้งการเก็บค่าและเรียกดู โดยในเว็บของ redis เองก็มีผล benchmark กับหลากหลาย environment -> How fast is Redis? แต่นั่นก็แลกกับการเสียพื้นที่ใน memory ที่ราคาสูงกว่า harddisk แบบหลายเท่าตัว เราจึงไม่แนะนำให้เก็บข้อมูลที่มีขนาดใหญ่และหรือต้องการเก็บยาวๆก็ทำได้เช่นกัน

พูดเกี่ยวกับ key-value ซักนิดพอเห็นภาพ เช่น

home={“owner”: “me”, “person1”: “sister”, “person1”: “brother”}

Key คือ home และ Value คือ Object ทั้งหมด

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

สุดท้าย…

มาลองใช้ Redis คำสั่งพื้นฐานกันครับ

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

เริ่มจากแรกเราก็ต้องมี redis ก่อน ผมแนะนำให้ใช้ docker ไปก่อนครับ เนื่องจากสะดวกและรวดเร็ว

เมื่อติดตั้ง docker แล้ว เปิด command tool ขึ้นมาพิมพ์ตามผมไปเลย อันนี้เป็นเรื่องของ docker ไม่ใช่ redis

run และ access redis ด้วยคำสั่งตามลำดับ

docker run --name myredis -d redis:5.0.3

เมื่อสำเร็จ docker จะ run redis version 5.0.3 ชื่อ container ว่า myredis สามารถ check ได้ด้วยคำสั่ง

docker ps

จากนั้นให้เราเข้าไปใน container myredis ด้วยคำสั่ง

docker exec -it myredis redis-cli

เมื่อเข้ามาสำเร็จจะสามารถใช้ redis-cli ได้

ทดสอบ ตอบ PONG คือใช้ได้

> PING
PONG
  • SET ใช้กำหนดค่าหรือแก้ไขค่าใน key ที่กำหนดไว้แล้ว
    ดู parameter ทั้งหมดได้ตามนี้ https://redis.io/commands/set
    ต้องการเก็บค่า location1 = emmanuelle , location2 = ramaresort
    OK คือ return ซึ่งจะมีหลายๆแบบ ขึ้นกับเจตนาของคำสั่งนั้นๆ
> SET location1 emmanuelle
OK
  • GET เรียกดุค่าด้วย key ที่กำหนดไว้ โดยในตัวอย่างคือ name ดู parameter ทั้งหมดได้ตามนี้ https://redis.io/commands/get
    return เป็น value ของ name
> GET location1
"emmanuelle"
> SET jan 1
OK
> INCR jan
(integer) 2
> GET jan
"2"
> DECR jan
(integer) 1
> GET jan
"1"
  • DEL ลบค่าด้วย key จะ return 1 คือลบไป 1 ตัว เนื่องจากคำสั้งนี้สามารถใส่ key ต่อไปเพื่อลบพร้อมกันได้ดังตัวอย่าง https://redis.io/commands/del
> DEL jan
(integer) 1
> GET jan
(nil)
> SET jan 1
OK
> SET feb 2
OK
> DEL jan feb
(integer) 2
> SETEX say 10 yep
OK
> GET say
“yep”

… 10 วิจาก SETEX เจ้า say ก็สลายไป

> GET say
(nil)
> SET say yep
OK
> TTL say
(integer) -1

return -1 แปลว่าไม่ได้กำหนดอายุขัย

> SETEX say 10 yap
OK
> TTL say
(integer) 9
> TTL say
(integer) 8

… 10 วิจาก SETEX เจ้า say ก็สลายไปและเมื่อลอง TTL return -2 คือไม่มี say แล้ว

> TTL say
(integer) -2
> SETEX say 10 yap
OK
> TTL say
(integer) 9

รีบ PERSIST ก่อน

> PERSIST say
(integer) 1
> TTL say
(integer) -1

แต่ถ้า PERSIST ไม่ทันล่ะก็

> PERSIST say
(integer) 0

return 0 หมายความว่า ไม่มีค่าอยู่แล้วหรือค่านั้นๆไม่มีการกำหนดอายุขัย

เท่านี้ก็พอจะรู้จักกับ redis และพอประยุกต์ ใช้กับงานด้วยคำสั่งพื้นฐาน

และภาคต่อไปเราจะมาแนะนำการใช้งานที่เกี่ยวกับจัดการ sessions ในระบบ จอ บอ จ้า

--

--