Chuỗi kết nối Redis #
Chuỗi Redis Connection đã được mở rộng để hỗ trợ định dạng URI linh hoạt hơn, hiện có thể nắm bắt hầu hết các cài đặt Redis Client trong một chuỗi kết nối duy nhất (tương tự như chuỗi DB Connection).
Chuỗi kết nối Redis hỗ trợ nhiều định dạng giống URI, từ một tên máy chủ đơn giản hoặc Địa chỉ IP và cổng ghép nối với URI đủ điều kiện với nhiều tùy chọn được chỉ định trên QueryString.
Một số ví dụ về các định dạng được hỗ trợ:
localhost
127.0.0.1:6379
redis://localhost:6379
password@localhost:6379
clientid:password@localhost:6379
redis://clientid:password@localhost:6380?ssl=true&db=1
THÔNG TIN
Có thể xem thêm các ví dụ trong ConfigTests.cs
Bất kỳ cấu hình bổ sung nào cũng có thể được chỉ định dưới dạng tham số QueryString. Danh sách đầy đủ các tùy chọn có thể được chỉ định bao gồm:
Ssl | bool | Nếu đây là kết nối SSL |
Db | int | Redis DB kết nối này phải được đặt thành |
Khách hàng | chuỗi | Một bí danh văn bản để chỉ định cho kết nối này cho mục đích phân tích |
Mật khẩu | chuỗi | Phiên bản mật khẩu được mã hóa Url cho kết nối này |
ConnectTimeout | int | Thời gian chờ tính bằng mili giây để tạo kết nối TCP Socket |
SendTimeout | int | Thời gian chờ tính bằng mili giây để thực hiện Gửi qua cổng TCP đồng bộ |
Thời gian chờ nhận được | int | Thời gian chờ tính bằng mili giây để đợi nhận được đồng bộ TCP Socket |
IdleTimeOutSecs | int | Thời gian chờ tính bằng Giây để kết nối Không hoạt động được coi là hoạt động |
NamespacePrefix | chuỗi | Sử dụng tiền tố tùy chỉnh cho các bộ sưu tập chỉ mục nội bộ của ServiceStack.Redis |
ServiceStack.Redis Hỗ trợ SSL #
ServiceStack.Redis hỗ trợ kết nối SSL làm cho nó phù hợp để truy cập các phiên bản máy chủ Redis từ xa qua kết nối SSL an toàn .
Chỉ định Giao thức SSL #
Hỗ trợ thay đổi Giao thức Ssl được sử dụng cho các kết nối SSL được mã hóa có thể được đặt trên chuỗi kết nối bằng cách sử dụng sslprotocols
bổ ngữ, ví dụ:
var connString = $"redis://{Host}?ssl=true&sslprotocols=Tls12&password={Password.UrlEncode()}";
var redisManager = new RedisManagerPool(connString);
using var client = redisManager.GetClient();
//...
Đang kết nối với Azure Redis #
Vì kết nối với Azure Redis Cache qua SSL là trường hợp sử dụng chính cho tính năng này, chúng tôi đã thêm tính năng Bắt đầu kết nối với Azure Redis qua SSL mới để giúp bạn bắt đầu.
Redis GEO #
Việc phát hành Redis 3.2.0 mang đến cho nó các khả năng GEO mới thú vị cho phép bạn lưu trữ các tọa độ Vĩ độ / Dài trong Redis và truy vấn các vị trí trong một bán kính được chỉ định. Để chứng minh chức năng này, chúng tôi đã tạo Bản trình diễn trực tiếp Redis GEO mới cho phép bạn nhấp vào bất kỳ nơi nào ở Hoa Kỳ để tìm danh sách các thành phố gần nhất trong bán kính nhất định, Bản trình diễn trực tiếp tại:https://redis.netcore.io
Redis Client Managers #
Cách được đề xuất để truy cập RedisClient
các trường hợp là sử dụng một trong những Trình quản lý khách hàng an toàn theo chuỗi có sẵn bên dưới. Người quản lý khách hàng là nhà máy kết nối nên được đăng ký dưới dạng Singleton trong IOC hoặc lớp tĩnh của bạn.
RedisManagerPool #
Với Chuỗi kết nối Redis URI nâng cao, chúng tôi có thể đơn giản hóa và hợp lý hóa PooledRedisClientManager
hiện có triển khai và đã trích xuất nó vào một trình quản lý khách hàng mới có tên là RedisManagerPool
.
Ngoài việc xóa tất cả các tùy chọn trên trên chính Trình quản lý khách hàng, các chuỗi kết nối chỉ đọc cũng đã bị xóa để cấu hình trở nên đơn giản hơn nhiều và phù hợp hơn với trường hợp sử dụng phổ biến:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Hành vi tổng hợp
Mọi kết nối được yêu cầu sau khi đạt đến kích thước Hồ bơi tối đa sẽ được tạo và xử lý bên ngoài Hồ bơi. Bằng cách không bị giới hạn ở kích thước nhóm tối đa, hành vi gộp trong RedisManagerPool
có thể duy trì kích thước nhóm kết nối nhỏ hơn với chi phí có thể có số lượng kết nối đóng / mở cao hơn.
PooledRedisClientManager #
Nếu bạn thích xác định các tùy chọn trên chính Trình quản lý khách hàng hoặc bạn muốn cung cấp các máy chủ redis Read / Write và ReadOnly (tức là Master và Replica) riêng biệt, hãy sử dụng PooledRedisClientManager
thay vào đó:
container.Register<IRedisClientsManager>(c =>
new PooledRedisClientManager(redisReadWriteHosts, redisReadOnlyHosts) {
ConnectTimeout = 100,
//...
});
Hành vi tổng hợp
PooledRedisClientManager
áp đặt giới hạn kết nối tối đa và khi kích thước nhóm tối đa đã đạt đến thay vào đó sẽ chặn mọi yêu cầu kết nối mới cho đến RedisClient
tiếp theo được thả trở lại hồ bơi. Nếu không có ứng dụng khách nào khả dụng trong PoolTimeout
, một nhóm TimeoutException
sẽ được ném.
Khách hàng Chỉ Đọc #
Theo mặc định giải quyết RedisClient bằng GetRedisClient()
hoặc GetRedisClientAsync()
sẽ trả về một máy khách được kết nối với máy chủ chính (chính) đã định cấu hình, nếu bạn cũng đã định cấu hình các máy chủ bản sao (máy chủ), bạn có thể truy cập nó bằng GetReadOnlyClient()
hoặc GetReadOnlyClientAsync()
API, ví dụ:
using var redisReadOnly = clientsManager.GetReadOnlyClient();
BasicRedisClientManager #
Nếu không muốn sử dụng tính năng tổng hợp kết nối (tức là bạn đang truy cập phiên bản máy chủ redis cục bộ), bạn có thể sử dụng Trình quản lý khách hàng cơ bản (không gộp chung) để tạo một RedisClient
mới ví dụ mỗi lần:
container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager(redisConnectionString));
Truy cập Redis Client #
Sau khi đăng ký, việc truy cập RedisClient giống nhau ở tất cả các Quản lý khách hàng, ví dụ:
var clientsManager = container.Resolve<IRedisClientsManager>();
using var redis = clientsManager.GetClient();
redis.IncrementValue("counter");
List<string> days = redis.GetAllItemsFromList("days");
//Access Typed API
var redisTodos = redis.As<Todo>();
redisTodos.Store(new Todo {
Id = redisTodos.GetNextSequence(),
Content = "Learn Redis",
});
var todo = redisTodos.GetById(1);
//Access Native Client
var redisNative = (IRedisNativeClient)redis;
redisNative.Incr("counter");
List<string> days = redisNative.LRange("days", 0, -1);
Bạn có thể xem danh sách chi tiết hơn về các API RedisClient được sử dụng trong ví dụ trong giao diện C # bên dưới:
- IRedisClientsManager
- IRedisClient
- IRedisNativeClient
- IRedisSubscription
Pipeline &API giao dịch #
- IRedisTransaction
- IRedisPipelineShared
- IRedisQueurableOperation
- IRedisQueueCompletableOperation
Generic Client APIs #
- IRedisTypedClient
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
- IRedisTypedQueurableOperation
API Thu thập Máy chủ #
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
Async Redis #
Hỗ trợ không đồng bộ trong ServiceStack.Redis được thiết kế để đạt hiệu quả tối ưu và sử dụng ValueTask
&các API không đồng bộ hiện đại khác chỉ có trong .NET Standard 2.0 và .NET Framework v4.7.2 + các dự án trong đó có các tương đương API không đồng bộ cho hầu hết các API đồng bộ hóa như được chứa trong các giao diện Async Redis bên dưới:
- IRedisClientsManagerAsync
- IRedisClientAsync
- IRedisNativeClientAsync
- IRedisSubscriptionAsync
Đường ống không đồng bộ &API giao dịch #
- IRedisTransactionAsync
- IRedisPipelineSharedAsync
- IRedisQueurableOperationAsync
- IRedisQueueCompletableOperationAsync
Async Generic Client APIs #
- IRedisTypedClientAsync
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync
- IRedisTypedTransactionAsync
- IRedisTypedQueuableOperationAsync
API thu thập máy chủ không đồng bộ #
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync