- vừa được xem lúc

Redis Stack: Có gì hay?

0 0 24

Người đăng: Tùng

Theo Viblo Asia

Tản mạn

Dạo gần đây mình tình cờ được nghe về "Redis Stack", tính mình hay tò mò nên mình cũng tìm hiểu thử.

Như tên gọi thì nó là ngăn xếp Redis, hiểu đơn giản thì ngăn xếp này sẽ chứa các modules nhằm phục vụ 1 mục đích riêng biệt như RedisJSON, RediSearch, RedisGraph, RedisTimeSeries và RedisBloom.

Chắc hẳn các bạn làm các ứng dụng web cũng đã sử dụng qua Redis để làm tầng cache giúp tăng tốc cho ứng dụng của mình.

Dưới đây là 1 mô hình điển hình về việc thiết lặp cache trong Redis:

Giải thích ngắn gọn cho mô hình trên là chúng ta sẽ ưu tiên lấy dữ liệu từ cache, nếu cache data không tồn tại thì chúng ta sẽ lấy dữ liệu từ database và sau đó cập nhật lại vào cache.

Tuy nhiên khi làm việc với cache, đôi khi chúng ta cần lưu trữ dữ liệu JSON. Với các kiểu dữ liệu hiện có trong Redis chỉ bao gồm strings, hashes, lists, sets, bitmaps, sorted sets, hyper logs và geospatial indexes. Như cách thông thường thì chúng ta sẽ phải serialize JSON data thành string để lưu.

Việc lưu trữ dữ liệu JSON dưới dạng string có thể gây khó khăn cho ứng dụng.

Bởi vì để lưu trữ dữ liệu đó dưới dạng chuỗi, chúng ta phải serialize dữ liệu trước khi lưu. Ngoài ra, khi chúng tôi cần lấy thông tin 1 trường trong phần dữ liệu, chúng ta buộc phải get toàn bộ dữ liệu, sau đó deserialize nó để lấy đối tượng JSON ban đầu, cập nhật lại và serialize lại trước khi lưu trữ.

Khá phức tạp phải không nào? Chưa dừng lại ở đó. Khi một trường duy nhất trong đối tượng cần được cập nhật, quá trình trên được lặp lại.

Giải pháp

Để tránh những nhược điểm này và cải thiện trải nghiệm cho anh em developer khi làm việc với cache, Redis stack đã offer cho ta 1 module là RedisJSON - module này cho phép chúng ta truy xuất và lưu trữ dữ liệu JSON thay vì string như truyền thống.

Nghe thật hoàn hảo đúng không nhỉ ? 😄

Nhưng cuộc đời thì làm gì có gì hoàn hảo, RedisJSON cũng vậy 😄. Chúng ta sẽ phải trả giá nếu chúng ta lạm dụng nó.

Cùng tham khảo 2 hình sau để nhận thấy sự khác biệt:

  • Về performance: Ưu điểm là việc cập nhật các sub-elements của một document sẽ nhanh hơn thao tác với một chuỗi chứa đối tượng JSON được serialize. Nhưng việc truy xuất và lưu toàn bộ document sẽ tốn kém chi phí hơn so với string.

  • Về maintainability: Sử dụng một số kiểu dữ liệu gốc trong Redis cho đối tượng JSON của bạn có thể thực sự hiệu quả, nhưng code sẽ phức tạp hơn để bảo trì. Có thể có thêm công việc migrate/refactor khi cấu trúc của document bị thay đổi.

Thực chiến

Tiếp theo chúng ta cùng nhau trải nghiệm thực tế RedisJSON nhé.

# sử dụng image Docker redis-stack-server để chạy RedisJSON với Docker
$ docker run -d --name redis-stack -p 6379:6379 –p 8001:8001 redis/redis-stack:latest # Truy cập vào container đó thôi
$ docker exec redis-stack bash # bật redis-cli lên nào
$ redis-cli

Chúng ta sẽ thử các thao tác GET/SET/DEL

127.0.0.1:6379> JSON.SET example $ '[ true, { "answer": 42 }, null ]'
OK
127.0.0.1:6379> JSON.GET example $
"[[true,{\"answer\":42},null]]"
127.0.0.1:6379> JSON.GET example $[1].answer
"[42]"
127.0.0.1:6379> JSON.DEL example $[-1]
(integer) 1
127.0.0.1:6379> JSON.GET example $
"[[true,{\"answer\":42}]]"

Rất đơn giản phải không!


Bài viết cũng khá dài rồi nên mình xin phép kết thúc tại đây. Bài tiếp theo mình sẽ giới thiệu tiếp về full-text search trong Redis.

Cùng chờ mình nhé. 😄

Tài liệu tham khảo:

https://redis.io/docs/stack/

https://redis.io/docs/stack/json/performance/#comparison-vs-server-side-lua-scripting

Bình luận

Bài viết tương tự

- vừa được xem lúc

Caching đại pháp 2: Cache thế nào cho hợp lý?

Caching rất dễ. Mình không nói đùa đâu, caching rất là dễ. Ai cũng có thể làm được chỉ sau 10 phút đọc tutorial. Nó cũng giống như việc đứa trẻ lên 3 đã có thể cầm bút để vẽ vậy.

0 0 126

- vừa được xem lúc

Caching đại pháp 1: Nấc thang lên level của developer

Bí quyết thành công trong việc đáp ứng hệ thống triệu user của những công ty lớn (và cả công ty nhỏ). Tại sao caching lại là kỹ thuật tối quan trọng để phù phép ứng dụng rùa bò của chúng ta thành siêu phẩm vạn người mê.

0 0 82

- vừa được xem lúc

Cache dữ liệu Nodejs với Redis

Một tí gọi là lý thuyết để anh em tham khảo. Cache là gì. Lợi ích của việc cache data. .

0 0 111

- vừa được xem lúc

Nguyên tắc hoạt động của redis server

Sự ra đời của Redis. . Câu chuyện bắt đầu khi tác giả của Redis, Salvatore Sanfilippo. (nickname: antirez), cố gắng làm những công việc gần như là không.

0 0 97

- vừa được xem lúc

Viết ứng dụng chat realtime với Laravel, VueJS, Redis và Socket.IO, Laravel Echo

Xin chào tất cả các bạn, đây là một trong những bài post đầu tiên của mình. Sau bao năm toàn đi đọc các blog tích luỹ được chút kiến thức của các cao nhân trên mạng.

0 0 918

- vừa được xem lúc

Tìm hiểu tổng quan về Redis

1. Lời mở đầu.

0 0 368