Redis là gì?
Redis (REmote DIctionary Server) là một mã nguồn mở được dùng để lưu trữ dữ liệu có cấu trúc, có thể sử dụng như một database, bộ nhớ cache hay một message broker. Nó là hệ thống lưu trữ dữ liệu với dạng KEY-VALUE rất mạnh mẽ và phổ biến hiện nay. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản như:hash, list, set, sorted set, string… Tất cả dữ liệu được ghi và lưu trên ram, do đó tốc độ đọc ghi dữ liệu rất là nhanh.Các ứng dụng của Redis
Redis ngoài tính năng lưu trữ KEY-VALUE trên RAM thì Redis còn hỗ trợ tính năng xắp xếp, query, backup dữ liệu trên đĩa cứng cho phép bạn có thể phục hồi dữ liệu khi hệ thống gặp sự cố…và có thể nhân bản (Chạy nhiều Server Redis cùng lúc).
Caching: Sử dụng làm bộ nhớ đệm. Chính tốc độ đọc ghi nhanh mà Redis có thể làm bộ nhớ đệm, nơi chia sẻ dữ liệu giữa các ứng dụng hoặc làm database tạm thời. Ngoài ra Redis có thể sử dụng để làm Full Page Cache cho website. Cũng vì tính nhất quán của Redis, cho dù restart Redis thì người dùng cũng không có cảm nhận chậm khi tải trang.
Counter: Sử dụng làm bộ đếm. Với thuộc tính tăng giảm thông số rất nhanh trong khi dữ liệu được lưu trên RAM, sets và sorted sets được sử dụng thực hiện đếm lượt view của một website, các bảng xếp hạng trong game chẳng hạng. Redis hỗ trợ thread safe do đó nó có thể đồng bộ dữ liệu giữa các request.
Publish/Suscribe (Pub/Sub): Tạo kênh chia sẻ dữ liệu. Redis hỗ trợ tạo các channel để trao đổi dữ liệu giữa publisher và subscriber giống như channel trong Socket Cluster hay topic trong Apache Kafka. Ví dụ: Pub/Sub được sử dụng theo dõi các kết nối trong mạng xã hội hoặc các hệ thống chat.
Queues: Tạo hàng đợi để xử lý lần lượt các request. Redis cho phép lưu trữ theo list và cung cấp rất nhiều thao tác với các phần tử trong list, vì vậy nó còn được sử dụng như một message queue.
Các kiểu dữ liệu trong Redis
Khác với RDMS như MySQL, hay PostgreSQL, Redis không có table (bảng). Redis lưu trữ data dưới dạng key-value. Dưới đây là sơ lược về các kiểu dữ liệu Redis dùng để lưu value.
String: string, integer hoặc float. Redis có thể làm việc với cả string, từng phần của string, cũng như tăng/giảm giá trị của integer, float.
List: List là một danh sách của strings, sắp xếp theo thứ tự insert. Redis có thể thêm một phần tử vào đầu hoặc cuối list. List phù hợp cho các bài toán cần thao tác với các phần tử gần đầu và cuối vì việc truy xuất này là cực nhanh, cho dù insert cả triệu phần tử. Tuy nhiên nhược điểm là việc truy cập vào các phần tử ở giữa list rất chậm.
Set: Tập hợp các string (không được sắp xếp). Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference.
Hash: Lưu trữ hash table của các cặp key-value, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả. Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị.
Sorted Set: Là 1 danh sách, trong đó mỗi phần tử là map của 1 string (member) và 1 floating-point number (score), danh sách được sắp xếp theo score này. Các phần tử của zset được sắp xếp theo thứ tự từ score nhỏ tới lớn.
Ngoài ra, Redis còn hỗ trợ các data types khác như: Bit arrays, HyperLogLogs, Streams.
Một cái khác có chức năng tương tự Redis nhưng ít được sử dụng hơn đó là Memcached
Các bạn tham khảo đọc thêm tài liệu về Redis trên trang chủ nhé.
Cài đặt Redis cho ASP .NET Core
Yêu cầuVisual Studio or Visual Studio Code
.NET Core SDK
Các bạn có thể tham khảo và tải về code mẫu ở đây.
Các bước thực hiện
Khởi tạo một project ASP .NET Core
dotnet new webapi RedisTest
Cài đặt các packages cần thiết
Để cài đặt Redis tôi khuyên khích các bạn sử dụng Docker. Tham khảo bài viết về cài đặt các công cụ sử dụng Docker ở đây.
docker run -d --name redis -p 6379:6379 redis
Cài đặt các thư viện cần thiết
https://www.nuget.org/packages/Microsoft.Extensions.Caching.StackExchangeRedis
cd RedisTest
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis
Tạo file RedisController.cs để tiến hành sử dụng Redis
Cấu hình Startup.cs như dưới đây
Chạy và kiểm tra kết quả
dotnet run
Đi đến đường dẫn dưới đây
http://localhost:5000/api/redis
Tiến hành refresh lại trang liên tục sẽ thấy thời gian hiện tại và thời gian cached là khác nhau
Thử chờ sau 5s và refresh, giá trị cache sẽ được nạp lại theo thời gian hiện tại mới nhất
Trên đây là ví dụ hết sức đơn giản để làm quen với Redis. Để có thể hiểu thêm về Redis các bạn vui lòng tham khảo tìm thêm các tài liệu trên mạng.
Để kết nối tới Redis server từ các ứng dụng .NET khác (Chằng hạn Console App) bạn có thể sử dụng thư viện dưới đây
https://www.nuget.org/packages/StackExchange.Redis
Tham khảo thêm
https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed
https://redis.io