.Net Core连接redis主要有两个库:StackExchange.Redis和CsRedis。
1. ASP.NET Core 3.1使用StackExchange.Redis.Extensions.Core简单教程。
[参考文章]:(https://www.chengxulvtu.com/stackexchange-redis-in-aspnet-core-3-1/)
小结:依赖于StackExchange.Redis。可以通过注册服务,依赖注入IRedisCacheClient来访问Redis,进行操作。功能还算齐全,有各种数据类型的操作函数、也有发布订阅。
使用缓存查询的例子代码:
[HttpGet]
//使用缓存查询的例子
public async Task<ActionResult<List<Product>>> GetProduct()
{
//先读缓存
var list = await _redisClient.GetDbFromConfiguration().GetAsync<List<Product>>("products");
//redis没数据,则访问数据库,并写入缓存
if (list == null)
{
list = _service.Get();
await _redisClient.GetDbFromConfiguration().AddAsync("products", list, DateTimeOffset.Now.AddMinutes(5));
}
return list;
}
2. 使用StackExchange.Redis简单教程。
这是StackExchange出的Redis库,就是Stackoverflow,比较有名,star数也很多。
StackExchange.Redis的连接是多路复用的,且其操作redis的功能丰富。
例子里使用编写好的静态工具类,来操作Redis服务。其中Redis帮助类没有使用依赖注入,使用了单例模式。
帮助类例子代码:
/// <summary>
/// redis帮助类,简单封装string操作
/// </summary>
public class RedisHelper1
{
private static readonly object Locker = new object();
//连接多路复用器
private ConnectionMultiplexer _redisMultiplexer;
private IDatabase _db = null;
//单例模式
private static RedisHelper1 _instance = null;
public static RedisHelper1 Instance
{
get
{
if (_instance == null)
{
lock (Locker)
{
if (_instance == null)
{
_instance = new RedisHelper1();
}
}
}
return _instance;
}
}
public void InitConnect(IConfiguration configuration)
{
try
{
//连接redis服务器
string redisConnection = configuration.GetConnectionString("RedisConnectionString");
_redisMultiplexer = ConnectionMultiplexer.Connect(redisConnection);
_db = _redisMultiplexer.GetDatabase();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
_redisMultiplexer = null;
_db = null;
}
}
public RedisHelper1()
{
}
#region 通用key操作
/// <summary>
/// 判断键是否存在
/// </summary>
public bool ExistsKey(string key)
{
return _db.KeyExists(key);
}
/// <summary>
/// 删除键
/// </summary>
public bool DeleteKey(string key)
{
return _db.KeyDelete(key);
}
#endregion
#region string操作
/// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expiry">过期时间</param>
public bool SetStringKey(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{
return _db.StringSet(key, value, expiry);
}
/// <summary>
/// 获取单个key的值
/// </summary>
public RedisValue GetStringKey(string key)
{
return _db.StringGet(key);
}
/// <summary>
/// 保存一个对象
/// </summary>
/// <typeparam name="T">对象的类型</typeparam>
public bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
{
string json = JsonConvert.SerializeObject(obj);
return _db.StringSet(key, json, expiry);
}
/// <summary>
/// 获取一个key的对象
/// </summary>
/// <typeparam name="T">返回类型</typeparam>
public T GetStringKey<T>(string key)
{
RedisValue value = _db.StringGet(key);
if (value.IsNullOrEmpty)
{
return default;
}
return JsonConvert.DeserializeObject<T>(value);
}
#endregion
}
初始化的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
//初始化RedisHelper类
RedisHelper1.Instance.InitConnect(Configuration);
}
参考文章1
参考文章2
参考文章3
StackExchange.Redis官方文档
3. 使用CsRedis简单介绍。
印象中CsRedis是使用连接池的,与StackExchange.Redis不一样。
虽然是国人基于旧的csredis修改后的,感觉用的人不如StackExchange.Redis多。
4. 使用FreeRedis简单介绍。
FreeRedis是CsRedis的作者另外做的一个新的连接Redis的库。
新出,star数少,跟CsRedis用起来很像。
小结
C#连接Redis主要就是这些库,想查看更多库,可以上redis官网查看C#的Redis Client。
写了些测试例子在github上,用于做缓存,简单使用。
本人例子