背景故事
最近因项目需要在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客户端。
我这次项目逻辑不在意少数几个超时异常,我就没有深究问题,后续如果有好的解决方法再来和大家一起分享
————————————————
版权声明:本文为CSDN博主「reinforceI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/reinforceI/article/details/125309916