Redis断线重连编码注意事项

应用在Redis重启、网络闪断并恢复正常后,应用必须能够自恢复,下面以Java语言的jedis客户端为例说明:

1、作为发布者

Jedis对象不能作为单例,网络闪断后该Jedis对象无法自恢复。应该每次发布消息时,从JedisPool中取Jedis对象,再调用set方法。

2、作为订阅者

当网络闪断后psubscribe()方法不再阻塞并抛出异常,所以可以使用while循环,在循环内部处理异常,代码如下:

while(true){

            Jedis redis = this.jedisPool.getResource();

            try{

                redis.psubscribe(this, channelArray);

            }catch(JedisConnectionException e){

                logger.warn("Exception :", e);

                logger.warn("Exit redis psubscribe, retry after 1 second");

            }catch(Exception e){

                logger.error("Exception:", e);

            }

            try{

                Thread.sleep(1000);

            }catch(Exception unused){

            }

            try{

                if(redis != null){

                    redis.close();

                }

            }catch(Exception unused){

            }

        }
时间: 2024-07-28 12:37:32

Redis断线重连编码注意事项的相关文章

socket 断线重连

send发送数据时,发送失败,进行如下重连处理: if(send(sockfd, serbuf, readlen, 0) < 0)//serbuf中有数据可以发送才会执行这条语句 { printf("serial to tcp send msg error: %s(errno: %d)\n", strerror(errno), errno);//服务端断掉,则发送失败. //exit(0); //断线重连 sleep(3); close(sockfd); sockfd = soc

关于socket tcp 断线重连

这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关闭程序时,客户端调用send函数发送失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接) (2)客户端已经连接,当客户端关闭程序时,服务端调用recv函数接收失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接) ,这时对

【c#源码】基于TCP通信的客户端断线重连

源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接 本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本) 先看一下效果 初始状态: 当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息 然后,我们设定为每隔5秒重连一次,可以自定义设置重连的次数,比如说重连50次,如果还没有重连成功,则放弃重连 然后我们重新启动服务器端

房卡麻将分析系列之&quot;断线重连&quot;

"房卡"麻将研发技巧,尽在"红孩儿的游戏开发之路",欢迎关注公众号! 房卡麻将分析系列之"断线重连" 大家好,我是红孩儿,"房卡"麻将分析系列继续进行中. 在进行游戏的过程中,人们往往会遇到"断线"情况,比如坐公车,地铁下班路上玩一局,下车转站时往往先关机,过一会儿再上线继续完,如果没有自动"断线重连",则对于牌局的体验感影响会非常大,在"房卡"麻将中加入"

nodejs使用MYSQL连接池,断线重连

两种方式解决1.你可以配置mysql的连接池 var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'nodejs', password: 'nodejs', database: 'nodejs', port: 3306 }); var selectSQL = 'select * from t_user limit 10'; pool.getConnection(function

基于TCP通信的客户端断线重连

转载:http://www.cnblogs.com/networkcomms/p/4304362.html 源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接 本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本) 先看一下效果 初始状态: 当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息 然后,我们设定为每隔5秒重

UniDAC 断线重连方法

KBM服务端的 UniConnection 要实现断线重连(连接 MSSQLServer), 需要以下几个步骤: 一.修改单元文件:kbmMWUniDAC.pas procedure TkbmMWUNIDACConnection.InternalOpenConnection(ConnectionPool:TkbmMWCustomConnectionPool); begin // Create new database connection using template. with TkbmMWU

通过任务计划程序实现上网卡断线重拨

由于工作中需要做一些服务器维护,为方便维护,在服务器上安装了一个4G无线上网卡.但是由于网络不稳定,经常在使用一两天后就断开,无法远程连接,甚是苦恼.在网上找了挺久也没有发现什么好的解决办法. 正好今天网络搜索发现了一个帖子<待机唤醒后自动连接宽带>,和我要解决的问题有异曲同工的感觉,于是便试了一试,果然好用,赶紧分享给大家. 1.首先新建文本文件,写入以下vbs代码,并保存为vbs文件: createobject("wscript.shell").run"ras

Mina.Net实现的断线重连

using Mina.Filter.Codec; using Mina.Filter.Codec.TextLine; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using Mina.Core.Session; using System.Threading; namespace MinaDemo { class TCPMessageD