Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Quản lý kết nối

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 .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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ai đó có thể giải thích lệnh redis setbit?

  2. Sự cố với Redis install cc:Không tìm thấy lệnh

  3. Có lệnh nào trong Redis cho cấu trúc dữ liệu HASH tương tự như MGET không?

  4. Tạo và quản lý nhiều kết nối trong Redis Python

  5. Đăng ký Flask-SocketIO