Store data in redis/memcache
Giả sử domain Product trong SQL có reference tới table Seller và giờ em đang muốn sử dụng cache để lưu 1 chi tiết Product lại, nếu flatten 1 product ra như 1 json document thì sẽ lợi khi về dung lượng lưu trữ và tốc độ get tuy nhiên em đang không biết invalidate cache như thế nào khi Seller bị update, không biết có cách nào để tổ chức cache hợp lí cho việc invalidate và get data không ạ.
Remain: 5
2 Answers

monkey
Beginner
monkey
Beginner
- Thường khi sử dụng cache là em sẽ lưu vào cache, đọc từ cache và đồng bộ dữ liệu từ cache vào db hơn, nên anh nghĩ em có thể update lại service của em theo hướng này.
- Tuy nhiên nêu service của em đã chạy lâu rồi và không dễ để thay đổi, em có thể tạo 1 job liên tục đọc vào db xem có update gì không thì đồng bộ lên cache, đó cũng là 1 cách không tệ.
Không biết anh có đang hiểu đúng câu hỏi của em không nhỉ?
-
0

monkey
Beginner
monkey
Beginner
Anh sẽ gọi:
A. Là Author
B. Là Book
C. Là BookAndAuthor.
- Như vậy thì anh đang hình dùng là em sẽ lưu 1 map là:
authorAndBookMap[{authorId, bookId}, C]
- Xóa A thì sẽ cần xóa hết các key có liên quan đến A từ bookAndAuthorMap, sẽ có 2 cách:
a. Lưu trong redis 1 map bookIdsByAuthorId[authorId, List[bookId]] và khi xóa A thì chỉ cần lấy list bookId từ map ra xóa là được: Cách này thì có ưu điểm là list mà ít thì ok, nhưng nhược điểm là khi list mà nhiều thì sẽ chậm và tốn bộ nhớ.
b. Khi có update thì truy vấn từ DB các bookId có liên quan đến A và gọi xóa khỏi cache, sẽ lấy từ từ ví dụ 100 bản ghi ra xóa sẽ đỡ tốn bộ nhớ. Nhược điểm là việc xóa có thể bị chậm. Nhưng anh nghĩ cách này phù hợp hơn vì nó áp dụng được cho mọi bài toán từ nhỏ đến lớn.
-
0