Hệ thống kiến thức Database này dành cho việc học backend, thực hành kỹ thuật và ôn tập phỏng vấn. Các bài viết về Database trên website được sắp xếp theo thứ tự “kiến thức cơ bản về Database -> SQL -> MySQL -> Redis -> NoSQL và công cụ tìm kiếm”.
Hệ thống kiến thức Database này dành cho việc học backend, thực hành kỹ thuật và ôn tập phỏng vấn. Các bài viết về Database trên website được sắp xếp theo thứ tự “kiến thức cơ bản về Database -> SQL -> MySQL -> Redis -> NoSQL và công cụ tìm kiếm”.
NoSQL (viết tắt của Not Only SQL) là tên gọi chung cho các cơ sở dữ liệu non-relational, chủ yếu hướng đến việc lưu trữ dữ liệu dạng key-value, document và graph. Cơ sở dữ liệu NoSQL vốn hỗ trợ các đặc tính như mô hình distributed, data redundancy và data sharding, nhằm cung cấp giải pháp lưu trữ dữ liệu có khả năng mở rộng, tính sẵn sàng cao và hiệu năng cao.
Tôi thấy nhiều bạn ghi trong CV rằng mình thành thạo sử dụng cache, nhưng khi được hỏi về 3 chiến lược đọc ghi cache thường dùng thì lại ngơ ngác.
Theo tôi, nguyên nhân của vấn đề này là khi học Redis, có thể chúng ta chỉ viết một vài Demo đơn giản mà chưa chú ý đến chiến lược đọc ghi cache, hoặc hoàn toàn không biết đến vấn đề này.
Redis là một trong những hệ thống cache và in-memory data store hiệu năng cao phổ biến nhất trong backend. Khi học Redis, không nên chỉ dừng ở command và data type, mà còn phải hiểu các vấn đề kỹ thuật như chiến lược đọc/ghi cache, data structure tầng dưới, persistence, nguyên nhân blocking, quản lý memory, replication và cluster.
Câu hỏi phỏng vấn liên quan:
- Vì sao cần dùng cache?
- Nên triển khai local cache như thế nào?
- Vì sao cần distributed cache? / Vì sao không dùng local cache trực tiếp?
- Vì sao cần multi-level cache?
- Multi-level cache phù hợp với những trường hợp sử dụng nào?
Các câu hỏi phỏng vấn về Redis cluster là nội dung độc quyền dành cho Knowledge Planet của tôi (nhấp vào liên kết để xem giới thiệu chi tiết và cách tham gia), đồng thời đã được tổng hợp vào Cẩm nang phỏng vấn Java.
Bài viết được biên soạn và hoàn thiện dựa trên: https://mp.weixin.qq.com/s/0Nqfq_eQrUb12QH6eBbHXA, tác giả: A Q nói code
Bài viết tổng hợp chi tiết những trường hợp có thể khiến Redis bị blocking. Đây cũng là các yếu tố quan trọng ảnh hưởng đến performance của Redis, vì vậy bạn cần đặc biệt lưu ý khi sử dụng Redis!
Redis có tổng cộng 5 kiểu dữ liệu cơ bản: String (chuỗi), List (danh sách), Set (tập hợp), Hash (bảng băm), Zset (tập hợp có thứ tự).
5 kiểu dữ liệu này được cung cấp trực tiếp cho người dùng, là dạng lưu trữ dữ liệu. Cơ chế triển khai tầng dưới chủ yếu dựa trên 8 cấu trúc dữ liệu sau: chuỗi động đơn giản (SDS), LinkedList (linked list hai chiều), Dict (hash table/từ điển), SkipList (skip list), Intset (tập hợp số nguyên), ZipList (ziplist), QuickList (danh sách nhanh).
Ngoài 5 kiểu dữ liệu cơ bản, Redis còn hỗ trợ 3 kiểu dữ liệu đặc biệt: Bitmap, HyperLogLog và GEO.
Theo giới thiệu trên trang web chính thức:
Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type which is treated like a bit vector. Since strings are binary safe blobs and their maximum length is 512 MB, they are suitable to set up to 2^32 different bits.
Bitmap không phải là một kiểu dữ liệu thực tế trong Redis, mà là một tập hợp các thao tác hướng bit được định nghĩa trên kiểu String và được xem như một vector bit. Vì String là các blob binary-safe, có độ dài tối đa 512 MB, chúng phù hợp để thiết lập tối đa 2^32 bit khác nhau.
Redis chỉ có hai phương án chính để triển khai delayed task:
Khi phỏng vấn, trước tiên bạn có thể nói rằng mình đã cân nhắc hai phương án này, nhưng cuối cùng nhận thấy phương án lắng nghe event hết hạn của Redis có nhiều vấn đề, nên chọn DelayedQueue tích hợp sẵn của Redisson.