Trong hệ sinh thái .NET, có một số thư viện phổ biến để làm việc với Redis như ServiceStack.Redis và StackExchange.Redis, tuy nhiên mỗi thư viện đều tồn tại những hạn chế nhất định. ServiceStack.Redis là phiên bản thương mại, bản miễn phí bị giới hạn nhiều tính năng; trong khi StackExchange.Redis miễn phí nhưng từng gặp lỗi Timeout và yêu cầu sử dụng hoàn toàn bất đồng bộ để khắc phục.
Chính vì vậy, hiện tại CSRedisCore là lựa chọn được ưa chuộng hơn cả nhờ nhiều ưu điểm vượt trội:
- Tên phương thức của CSRedisClient và RedisHelper hoàn toàn tương thích với câu lệnh redis-cli
- Hỗ trợ lệnh kiểu geo (yêu cầu redis-server từ phiên bản 3.2 trở lên)
- Hỗ trợ Redis cluster thông qua redis-trib.rb
- Hỗ trợ Redis Sentinel và cấu trúc master-slave
- Hỗ trợ lệnh kiểu stream (yêu cầu redis-server từ phiên bản 5.0 trở lên)
- Cho phép deserialize đối tượng trực tiếp, ví dụ:
Get<byte[]>,HGet<byte[]>. Tất cả phương thức lấy dữ liệu đều có overload với kiểu, mặc định vẫn trả về string - Tích hợp SafeObjectPool để quản lý kết nối hiệu quả
Hiện tại, nhóm phát triển chính thức cung cấp hai thư viện:
CSRedisCore: Thư viện chính, đảm nhận toàn bộ tương tác với RedisCaching.CSRedis: Triển khaiMicrosoft.Extensions.Cachingdựa trên CSRedisCore, dùng cho distributed caching
Dưới đây là hướng dẫn chi tiết cách tích hợp CSRedisCore vào dự án .NET WebApi.
Cài đặt gói NuGet:
Install-Package CSRedisCore
Hai cách sử dụng phổ biến
Cách 1: Khởi tạo đối tượng CSRedisClient
var redisClient = new CSRedis.CSRedisClient("127.0.0.1:6379,password=YourPassword");
services.AddSingleton(redisClient); // Đăng ký singleton toàn ứng dụng
Cách 2: Sử dụng lớp tiện ích RedisHelper (tĩnh)
var redisClient = new CSRedis.CSRedisClient("127.0.0.1:6379,password=YourPassword"); // Nếu không có mật khẩu, chỉ cần "127.0.0.1:6379"
RedisHelper.Initialization(redisClient);
Tham số trong chuỗi kết nối
| Tham số | Giá trị mặc định | Mô tả |
|---|---|---|
| password | <rỗng> | Mật khẩu kết nối |
| defaultDatabase | 0 | Database mặc định |
| poolsize | 50 | Kích thước pool kết nối |
| connectTimeout | 5000 | Thời gian chờ kết nối (ms) |
| syncTimeout | 10000 | Thời gian chờ gửi/nhận (ms) |
| idleTimeout | 0 | Thời gian rảnh tối đa của kết nối trong pool (ms), hữu ích cho Redis từ xa |
| preheat | true | Làm nóng kết nối trước |
| ssl | false | Bật mã hóa SSL |
| writeBuffer | 10240 | Kích thước buffer ghi cho phương thức bất đồng bộ (bytes) |
| tryit | 0 | Số lần thử lại khi lệnh thất bại |
| name | <rỗng> | Tên kết nối, có thể xem qua lệnh Client List |
| prefix | <rỗng> | Tiền tố key, mọi key sẽ tự động được thêm tiền tố này. Ví dụ: csredis.Set(prefix + "key", 111); |
Cá nhân tôi thường dùng cách thứ hai (RedisHelper tĩnh) vì tiện lợi, có thể gọi ở bất cứ đâu. Dưới đây là các thao tác cơ bản thường dùng:
Thao tác ghi/đọc
// Ghi dữ liệu với thời gian sống 60 giây
RedisHelper.Set("test1", "123123", 60);
// Đọc dữ liệu
var value = RedisHelper.Get("test1");
Pub/Sub (Xuất bản/Đăng ký)
// Xuất bản
RedisHelper.Publish("chan1", "123123123");
// Đăng ký lắng nghe
RedisHelper.Subscribe(
("chan1", msg => Console.WriteLine(msg.Body)),
("chan2", msg => Console.WriteLine(msg.Body))
);
Trên đây là hai nhóm thao tác phổ biến nhất. Các tính năng nâng cao sẽ được cập nhật trong các bài viết tiếp theo.