# Redis服务自动注入配置说明 ## 概述 本项目已成功配置Redis服务的自动注入,可以通过依赖注入的方式在任意服务中使用Redis缓存功能。 ## 配置内容 ### 1. NuGet包依赖 已添加以下Redis相关包: - `Microsoft.Extensions.Caching.StackExchangeRedis` (8.0.0) - `StackExchange.Redis` (2.7.20) ### 2. 配置文件 (appsettings.json) ```json { "ConnectionStrings": { "Redis": "localhost:6379" }, "Redis": { "Configuration": "localhost:6379", "InstanceName": "LiveForum" } } ``` ### 3. 服务注册 (Program.cs) - 使用`AddStackExchangeRedisCache`注册Redis缓存服务 - 在Autofac容器中注册`IRedisService`接口和`RedisService`实现 ### 4. 服务接口和实现 - **接口**: `LiveForum.IService.IRedisService` - **实现**: `LiveForum.Service.RedisService` ## 使用方法 ### 在控制器中注入使用 ```csharp public class YourController : ControllerBase { private readonly IRedisService _redisService; public YourController(IRedisService redisService) { _redisService = redisService; } public async Task SomeAction() { // 设置缓存 await _redisService.SetAsync("key", "value", TimeSpan.FromMinutes(30)); // 获取缓存 var value = await _redisService.GetAsync("key"); // 设置对象缓存 var user = new { Id = 1, Name = "张三" }; await _redisService.SetAsync("user:1", user, TimeSpan.FromHours(1)); // 获取对象缓存 var cachedUser = await _redisService.GetAsync("user:1"); return Ok(); } } ``` ### 在服务类中注入使用 ```csharp public class UserService : IUserService { private readonly IRedisService _redisService; public UserService(IRedisService redisService) { _redisService = redisService; } public async Task GetUserAsync(int userId) { var cacheKey = $"user:{userId}"; // 先尝试从缓存获取 var cachedUser = await _redisService.GetAsync(cacheKey); if (cachedUser != null) { return cachedUser; } // 缓存未命中,从数据库获取 var user = await GetUserFromDatabase(userId); // 存入缓存 await _redisService.SetAsync(cacheKey, user, TimeSpan.FromMinutes(30)); return user; } } ``` ## API测试接口 项目已包含`RedisTestController`控制器,提供以下测试接口: - `POST /api/RedisTest/set-string` - 设置字符串缓存 - `GET /api/RedisTest/get-string/{key}` - 获取字符串缓存 - `POST /api/RedisTest/set-object` - 设置对象缓存 - `GET /api/RedisTest/get-object/{key}` - 获取对象缓存 - `DELETE /api/RedisTest/remove/{key}` - 删除缓存 - `GET /api/RedisTest/exists/{key}` - 检查缓存是否存在 - `PUT /api/RedisTest/set-expiration` - 设置缓存过期时间 ## 注意事项 1. **Redis服务器**: 确保Redis服务器正在运行,默认连接地址为`localhost:6379` 2. **连接字符串**: 可根据实际环境修改`appsettings.json`中的Redis连接配置 3. **序列化**: 对象缓存使用JSON序列化,确保对象可序列化 4. **异常处理**: Redis服务包含完整的异常处理和日志记录 5. **性能**: Redis服务使用`InstancePerLifetimeScope`生命周期,适合Web应用场景 ## 扩展功能 如需更高级的Redis功能(如获取TTL、批量操作等),可以考虑: 1. 直接使用`StackExchange.Redis`的`IDatabase`接口 2. 扩展`IRedisService`接口添加更多方法 3. 实现Redis分布式锁等功能