使用ConnectionMultiplexer访问Redis
appsettins.json 中的 Redis 连接字符串
"ConnectionStrings": { "DefaultConnection": "Server=DESKTOP-DABHN6U\\MSSQLSERVER2014;uid=sa;pwd=Lz38275292;database=NewAps;MultipleActiveResultSets=true;", "RedisConnection": "127.0.0.1:6379" }
Projram.cs 中注册
string redisConnection = builder.Configuration.GetConnectionString("RedisConnection"); builder.Services.AddSingleton<IConnectionMultiplexer>(opt => ConnectionMultiplexer.Connect(redisConnection));
在存储库中消费
namespace Microsoft.eShopOnContainers.Services.Basket.API.Infrastructure.Repositories; public class RedisBasketRepository : IBasketRepository { private readonly ILogger<RedisBasketRepository> _logger; private readonly ConnectionMultiplexer _redis; private readonly IDatabase _database; public RedisBasketRepository(ILoggerFactory loggerFactory, ConnectionMultiplexer redis) { _logger = loggerFactory.CreateLogger<RedisBasketRepository>(); _redis = redis; _database = redis.GetDatabase(); } public async Task<bool> DeleteBasketAsync(string id) { return await _database.KeyDeleteAsync(id); } public IEnumerable<string> GetUsers() { var server = GetServer(); var data = server.Keys(); return data?.Select(k => k.ToString()); } public async Task<CustomerBasket> GetBasketAsync(string customerId) { var data = await _database.StringGetAsync(customerId); if (data.IsNullOrEmpty) { return null; } return JsonSerializer.Deserialize<CustomerBasket>(data, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket basket) { var created = await _database.StringSetAsync(basket.BuyerId, JsonSerializer.Serialize(basket)); if (!created) { _logger.LogInformation("Problem occur persisting the item."); return null; } _logger.LogInformation("Basket item persisted succesfully."); return await GetBasketAsync(basket.BuyerId); } private IServer GetServer() { var endpoint = _redis.GetEndPoints(); return _redis.GetServer(endpoint.First()); } }