RedisJSON
Giới thiệu
RedisJSON là một module của Redis hỗ trợ cấu trúc JSON. RedisJSON cho phép lưu trữ, cập nhật, truy xuất giá trị JSON trong cơ sơ dữ liệu Redis như bất gì kiểu dữ liệu khác trong Redis Dữ liệu được lưu trữ dưới dạng nhị phân trong cấu trúc cây, cho phép truy cập nhanh vào các phần tử con
Các trường hợp dùng
Thông thường bạn có thể lưu 1 cấu trúc JSON vào Redis bằng các chuyển nó thành string và lưu vào Redis Nhưng khi sư dụng RedisJSON thì nó sẽ có 1 số lợi thế:
- Truy cập/ truy xuất các giá trị con (subvalues) : Bạn có thể thêm, xoá, cập nhật, truy xuất 1 giá trị con của object JSON chứ ko phải là toàn bộ object
- Index và query : RedisJSON hoạt động cùng với RedisSearch, cho phép index và query dữ liệu JSON
Thực hành
Cài đặt môi trường
# Sử dụng image Docker redis stack để thực hành với RedisJSON
docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
# Truy cập vào stack server
docker exec redis-stack-server bash
# Bật redis cli lên. Nếu không tìm thấy redis-cli thì install redis vào: MAC-OS: brew install redis
redis-cli
Thực hiện
# Insert
JSON.SET vendor:1 . '{"name":"Nguyen Van A","phone":333789741,"menu":[{"name":"Torta","price":4.5}]}'
# -> OK
# Modify : thêm field mới vào Json Object
JSON.SET vendor:1 .location '{"address":"145 cach mang thang 8, quan tan binh, HCM ","coordinates":[10.495804986,10.57408548]}'
#Modify : Thay đổi giả trị của filed
JSON.SET vendor:1 .location.address "\"145 cach mang thang 8, phuong 5, quan tan binh, HCM \""
#Get: lấy lên toàn bộ json object
JSON.GET vendor:1
# -> "{\"name\":\"Nguyen Van A\",\"phone\":333789741,\"menu\":[{\"name\":\"Torta\",\"price\":4.5}],\"location\":{\"address\":\"145 cach mang thang 8, phuong 5, quan tan binh, HCM \",\"coordinates\":[10.495804986,10.57408548]}}"
#Get: lấy lên 1 giá trị của array
JSON.GET vendor:1 .menu[0]
#-> "{\"name\":\"Torta\",\"price\":4.5}"
JSON.GET vendor:1 .menu[0].price
# -> "4.5"
#Modify: Thêm một đối tượng vào array
JSON.ARRAPPEND vendor:1 .menu '{"name":"Burrito","price":11.5}'
# -> (integer) 2
Kết hợp với Redis Search
# Tạo schema để phục vụ tìm kiếm
FT.CREATE vendorIdx ON JSON PREFIX 1 vendor: SCHEMA $.name AS name TEXT $.location.address as address TEXT
# -> OK
# Tìm kiếm những vendor có tên lót là Van
FT.SEARCH vendorIdx '@name:%Van%'
# ->
#1) (integer) 1
#2) "vendor:1"
#3) 1) "$"
# 2) "{\"name\":\"Nguyen Van A\",\"phone\":333789741,\"menu\":[{\"name\":\"Torta\",\"price\":4.5}]}"
Tổng Kết
RedisJSON cung cấp cho chúng ta một cách thức mới để làm việc với JSON trong môi trường NoSQL. Ngoài ra nó dễ dàng kết hợp với RedisSearch để index, query và chức năng tìm kiếm fulltext mạnh mẽ giúp chúng ta có thêm nhiều lựa chọn trong việc tìm kiếm DB phù hợp với dự án của mình.
All rights reserved