C# ServiceStack.Redis和StackExchange.Redis 使用心得
最近因项目需要在C#使用redis,在网上随意找一下看到挺多C#中使用ServiceStack.Redis 文章同时好像也是redis推介的C#客户端,就在没在仔细了解的情况下就直接使用了ServiceStack.Redis。在使用的过程中发现ServiceStack.Redis在频繁的读写后或运行一段时间后报错,后来在网上翻资料发现它已商业化,免费版每小时只能访问redis6000次。给出的解决
背景故事
最近因项目需要在C#使用redis,在网上随意找一下看到挺多C#中使用ServiceStack.Redis 文章同时好像也是redis推介的C#客户端,就在没在仔细了解的情况下就直接使用了ServiceStack.Redis。
产生的问题
在使用的过程中发现ServiceStack.Redis在频繁的读写后或运行一段时间后报错,后来在网上翻资料发现它已商业化,免费版每小时只能访问redis6000次。
给出的解决方案有2个:
- 使用v4.0以前的版本;
- 使用其它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客户端。
我这次项目逻辑不在意少数几个超时异常,我就没有深究问题,后续如果有好的解决方法再来和大家一起分享
更多推荐
所有评论(0)