需求:  对数据库中的不断抓取的文章进行缓存,因此需要定时访问数据,写入缓存中

在捕获到的异常日志发现错误:Unable to Connect: sPort: 0

使用的访问方式是线程池的方式:PooledRedisClientManager

经过测试发现在并发访问redis服务的情况下出现该异常的概率比较高,

解决方法

第一点:要使用using(据说访问效率在高并发的时候会有影响,简单的测试过了确实是这样,不过现在的业务达不到高并发量,速度还是很快滴)

using (IRedisClient redisClient = Instance.GetClient())
{
T t = redisClient.Get<T>(key);
if (t == null && func != null)
{
t = func();
redisClient.Set<T>(key, t, DateTime.Now.AddSeconds(seconds));
}
return t;
}  

第二点:设置ConnectTimeout属性(猜测单位应该是毫秒),要设置一个比较大的值,我设置为:1000 * 60 * 20  ,没错是20分钟,我发现设置小了还是不管用

做好这两点,经测试发现每秒钟200个并发量 毫无压力

附上封装的一个帮助类:

/// <summary>
/// 数据缓存
/// </summary>
public class RedisHelper
{
public static PooledRedisClientManager instance; static RedisHelper()
{
}
public static PooledRedisClientManager Instance
{
get
{
return instance;
}
}public static void InitClient(string redis_ip, int redis_port, string redis_pass)
{
instance = new PooledRedisClientManager(10000,
10,
new string[] { string.Format("{0}@{1}:{2}", redis_pass, redis_ip, redis_port) })
{
ConnectTimeout = 1000 * 60 * 20
};
} public static T Get<T>(string key, int seconds, Func<T> func)
{
using (IRedisClient redisClient = Instance.GetClient())
{
T t = redisClient.Get<T>(key);
if (t == null && func != null)
{
t = func();
redisClient.Set<T>(key, t, DateTime.Now.AddSeconds(seconds));
}
return t;
} }
public static T Get<T>(string key)
{
using (IRedisClient redisClient = Instance.GetReadOnlyClient())
{
T t = redisClient.Get<T>(key);
return t;
} }
public static Boolean Set<T>(string key, int seconds, T t)
{
using (IRedisClient redisClient = Instance.GetClient())
{
return redisClient.Set<T>(key, t, DateTime.Now.AddSeconds(seconds));
}
} public static void ClearKey(string key)
{
using (IRedisClient redisClient = Instance.GetClient())
{
IEnumerable<string> keys = redisClient.GetAllKeys(); ;
foreach (var item in keys)
{
if (item.Contains(key))
{
redisClient.Remove(item);
}
}
} }
}

Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis的更多相关文章

  1. Redis的Unable to connect to Redis和java.io.IOException: 远程主机强迫关闭了一个现有的连接问题的解决

      学习项目xhr系统用到springboot + vue(https://github.com/lenve/vhr),文档中要求使用到RabbitMQ,但是从我搭建开发环境来看,是否配置Rabbit ...

  2. Selenium2学习-038-firefox、webdriver版本不对称问题解决:org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055

    今天有个朋友在群里问,为何脚本运行不通过,其脚本操作步骤简单描述如下: 1.启动火狐浏览器 2.打开百度 3.查询框输入关键字 4.点击按钮[百度一下] 脚本挺简单的,其给出的应用报错信息如下所示: ...

  3. 解决org.openqa.selenium.WebDriverException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms org.springframework.beans.BeanInstantiation

    解决方法为将selenium-server-standalone-2.37.0.jar升级至selenium-server-standalone-2.41.0.jar即可. 下载地址:http://s ...

  4. WebDriver:org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms

    今天尝试最新的webDriver与fireFox搭配: 运行代码时出现如下的问题,但是浏览器却可以打开: org.openqa.selenium.firefox.NotConnectedExcepti ...

  5. [RabbitMQ]Error: unable to connect to node rabbit@compute1: nodedown(CentOS7.0)

    今天在搭建OpenStack的时候需要安装RabbitMQ,可是使用yum install rabbitmq-server安装之后,按照OpenStack官方提供的文档修改guest用户密码的时候却出 ...

  6. selenium 运行之后错误提示Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output

    错误提示: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port ...

  7. 解决loadrunner录制时 Request Connection: Remote Server @ 0.0.0.0:80 (Service=?) NOT PROXIED! (REASON: Unable to connect to remote server: rc = -1 , le = 0)问题

    环境为win7+ie8+loadrunner11,录制脚本回放查看Recoding log 出现如下错误:[Net An. Error    ( 7f8:1340)] Request Connecti ...

  8. 【spring cloud】spring cloud2.X spring boot2.0.4调用feign配置Hystrix Dashboard 和 集成Turbine 【解决:Hystrix仪表盘Unable to connect to Command Metric Stream】【解决:Hystrix仪表盘Loading...】

    环境: <java.version>1.8</java.version><spring-boot.version>2.0.4.RELEASE</spring- ...

  9. selenium 问题:Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms

    问题:Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms 原因: selenium-server-standalone-x. ...

  10. 【err】VIDEOIO ERROR: V4L: index 0 is not correct!Unable to connect to camera

    前言 新到手一块板子,程序编译成功之后,运行出现错误,不能连接到摄像头. 问题 VIDEOIO ERROR: V4L: index is not correct! Unable to connect ...

随机推荐

  1. 渗透测试-前端加密分析之RSA响应加密

    本文是高级前端加解密与验签实战的第7篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过请求包和响应包加密来爆破登录界面. 分析 这里的公私钥同上文一样是通过服务端获取 ...

  2. Docker非root用户修改/etc/hosts文件

    本文会讲解在Docker容器环境下,非root用户如何编辑修改/etc/hosts文件. 1.背景和需求描述 环境:Docker 运行用户:非root用户,如普通用户1001 需求:应用运行在容器内, ...

  3. Qt编写物联网管理平台48-特色功能设计

    一.前言 在物联网管理平台的实际现场应用过程中,遇到过大大小小几十个改进的需求点,这些需求点都是实际用户提出来的,一方面为了方便用户使用提高用户体验,一方面为了提升整体的整个系统的完整性,甚至有些需求 ...

  4. 即时通讯技术文集(第31期):IM开发综合技术合集(Part4) [共13篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第31 期. ​[- 1 -] IM消息ID技术专题(一):微信的海量IM聊天消息序列号生成实践 ...

  5. kubernetes系列(五) - kubernetes网络原理

    目录 前言 1. kubernetes网络模型 2. kubernetes的组件之间如何通讯 2.1 同一个pod内的多容器之间 2.2 各个pod直接的通讯 2.2.1 同一个节点上的pod互相通讯 ...

  6. Linux 检查磁盘空间命令合集

    1. DF df 是检查Linux安装程序上可用分区空间的最常用的命令之一.可以使用"df -TH"以直观易读的格式打印分区类型和分区大小.此命令将显示每个部分的总可用空间.已用空 ...

  7. Kubernetes GPU 虚拟化方案

    主流架构 Device Plugin:K8s制定设备插件接口规范,定义异构资源的上报和分配,设备厂商只需要实现相应的API接口,无需修改kubelet源码即可实现对其他硬件设备的支持. Extende ...

  8. 还不会 Cert Manager 自动签发证书?一文掌握

    相信很多小伙伴对于 Cert Manager 不陌生,Cert Manager 是 Kubernetes 上的证书管理工具,基于 ACME 协议与 Let's Encrypt 签发免费证书并为证书自动 ...

  9. KeyDB-键值存储

    KeyDB项目是从redis fork出来的分支.众所周知redis是一个单线程的kv内存存储系统,而KeyDB在100%兼容redis API的情况下将redis改造成多线程. 多线程架构 线程模型 ...

  10. Tinyfox 发生重大改版

    于2015年6月首次公开发布.为配合Tinyfox的实际应用,在Tinyfox发布后相继推出了 Tinyfox.FastWebApi 和Tinyfox.WebSocket 两个关键的应用框架,构成了相 ...