3.6 KiB
3.6 KiB
Redis服务自动注入配置说明
概述
本项目已成功配置Redis服务的自动注入,可以通过依赖注入的方式在任意服务中使用Redis缓存功能。
配置内容
1. NuGet包依赖
已添加以下Redis相关包:
Microsoft.Extensions.Caching.StackExchangeRedis(8.0.0)StackExchange.Redis(2.7.20)
2. 配置文件 (appsettings.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
使用方法
在控制器中注入使用
public class YourController : ControllerBase
{
private readonly IRedisService _redisService;
public YourController(IRedisService redisService)
{
_redisService = redisService;
}
public async Task<IActionResult> 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<object>("user:1");
return Ok();
}
}
在服务类中注入使用
public class UserService : IUserService
{
private readonly IRedisService _redisService;
public UserService(IRedisService redisService)
{
_redisService = redisService;
}
public async Task<User> GetUserAsync(int userId)
{
var cacheKey = $"user:{userId}";
// 先尝试从缓存获取
var cachedUser = await _redisService.GetAsync<User>(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- 设置缓存过期时间
注意事项
- Redis服务器: 确保Redis服务器正在运行,默认连接地址为
localhost:6379 - 连接字符串: 可根据实际环境修改
appsettings.json中的Redis连接配置 - 序列化: 对象缓存使用JSON序列化,确保对象可序列化
- 异常处理: Redis服务包含完整的异常处理和日志记录
- 性能: Redis服务使用
InstancePerLifetimeScope生命周期,适合Web应用场景
扩展功能
如需更高级的Redis功能(如获取TTL、批量操作等),可以考虑:
- 直接使用
StackExchange.Redis的IDatabase接口 - 扩展
IRedisService接口添加更多方法 - 实现Redis分布式锁等功能