net6使用StackExchangeRedis实现分布式缓存
using StackExchange.Redis;
using System;
using System.Threading.Tasks;
public class RedisCacheService
{
private readonly ConnectionMultiplexer _redisConnection;
private readonly IDatabase _database;
public RedisCacheService(string configuration)
{
_redisConnection = ConnectionMultiplexer.Connect(configuration);
_database = _redisConnection.GetDatabase();
}
public async Task<T> GetOrSetAsync<T>(string key, Func<Task<T>> getItem, TimeSpan expiry)
{
var redisKey = GetRedisKey(key);
var item = await _database.StringGetAsync(redisKey);
if (item.IsNullOrEmpty)
{
var value = await getItem();
await _database.StringSetAsync(redisKey, JsonConvert.SerializeObject(value), expiry);
return value;
}
return JsonConvert.DeserializeObject<T>(item);
}
private RedisKey GetRedisKey(string key)
{
return new RedisKey($"{typeof(T).Name}:{key}");
}
}
这个代码实例展示了如何使用StackExchange.Redis库在.NET 6中实现一个简单的分布式缓存服务。GetOrSetAsync<T>
方法尝试从Redis缓存中获取数据。如果缓存未命中,它会执行传入的getItem
函数来获取数据,并将结果存储在Redis中,并设置指定的过期时间。这里使用了JsonConvert.SerializeObject
和JsonConvert.DeserializeObject<T>
来序列化和反序列化对象,需要添加对Newtonsoft.Json的引用。
评论已关闭