背景故事

最近因项目需要在C#使用redis,在网上随意找一下看到挺多C#中使用ServiceStack.Redis 文章同时好像也是redis推介的C#客户端,就在没在仔细了解的情况下就直接使用了ServiceStack.Redis。

产生的问题

在使用的过程中发现ServiceStack.Redis在频繁的读写后或运行一段时间后报错,后来在网上翻资料发现它已商业化,免费版每小时只能访问redis6000次。

给出的解决方案有2个:

  1. 使用v4.0以前的版本;
  2. 使用其它redis客户端开发;

解决方法

1. 方法直接在nuget中安装4.0以前的版本,比如3.9.71版;
2. 我使用StackExchange.Redis。

StackExchange.Redis 使用方法及注意事项

我使用当前StackExchange.Redis 2.6.45版本进行开发,该客户端直接在nuget中进行安装就可以了。

在StackExchange.Redis 的基础上进行一些简单的封装做成一个工具类,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;

namespace Utils.Redis
{
    public class RedisUtil
	{
        readonly IDatabase client = null;
        public RedisUtil(string ip,int port,int db)
     	{
            //设定连接
            ConnectionMultiplexer connection = ConnectionMultiplexer.Connect($"{ip}:{port}");
            //打开redis中db的数据库
            client = connection.GetDatabase(db);
        }
        //Hash获取
        public Dictionary<string,string> getHashEntity(string hashName)
        {
            return client.HashGetAll(hashName).ToStringDictionary();
        }
 		//Hash设定
        public void SetEntryInHash(string hashName, string keyName, string value)
        {
            client.HashSet(hashName, keyName, value);
           
        }
		 //Hash删除
        public void RemoveEntryInHash(string hashName, string keyName)
        {
            client.HashDelete(hashName, keyName);           
        }
        
}

项目主要使用hash来完成工作,就没在完成key、String、List、Set等的封装,需要使用的话也是在IDataBase中有相关的方法直接调用。

StackExchange.Redis注意问题

使用的时候会经常有

StackExchange.Redis.RedisTimeoutException: Timeout performing HGETALL (5000ms) 的超时错误

这个在网上比较随意查一下资料发现是个比较常见的问题,大多数解决建议也是换redis客户端。

我这次项目逻辑不在意少数几个超时异常,我就没有深究问题,后续如果有好的解决方法再来和大家一起分享

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐