使用 Redis 进行高效数据缓存的 C# 实践
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)
{
item = await SetAsync(redisKey, await getItem(), expiry);
}
return JsonSerializer.Deserialize<T>(item);
}
private async Task<RedisValue> SetAsync<T>(RedisKey redisKey, T value, TimeSpan expiry)
{
var json = JsonSerializer.Serialize(value);
return await _database.StringSetAsync(redisKey, json, expiry);
}
private RedisKey GetRedisKey(string key)
{
return new RedisKey($"{key}");
}
}
这个代码实例展示了如何使用StackExchange.Redis库来实现一个Redis缓存服务。GetOrSetAsync<T>
方法尝试从Redis缓存中获取数据,如果缓存未命中,则执行传入的getItem
函数获取数据,并将其存储到Redis缓存中,并设置过期时间。这里使用了异步的方式来处理数据,提高了系统的响应性。
评论已关闭