.Net Core连接Redis的几种方法(库)


.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多。

CsRedis官方文档

4. 使用FreeRedis简单介绍。

FreeRedis是CsRedis的作者另外做的一个新的连接Redis的库。
新出,star数少,跟CsRedis用起来很像。

FreeRedis官方文档

小结

C#连接Redis主要就是这些库,想查看更多库,可以上redis官网查看C#的Redis Client。
写了些测试例子在github上,用于做缓存,简单使用。
本人例子


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM