1. 程式人生 > >redis 斷線重連線

redis 斷線重連線

使用多執行緒做到斷線重連線

圖形參考tomcat接受請求,處理http頭模型

code:

public class RedisUtils implements Runnable {

    public static boolean RedisState = true;

    public static RedisUtils redisUtils = new RedisUtils();

    static{

       new Thread(redisUtils).start();

    }

    @Override

    public void run() {

        while (true) {

            synchronized (redisUtils) {

                while (!RedisState) {

                   try {

                       Jedis jedis = new Jedis("10.0.0.4");

                       jedis.auth("xiaoxiao");

                       String ping = jedis.ping();

                       if (ping.equals("PONG")) {

                           RedisState = true;

                           System.out.println("redis連線成功,停止當前執行緒");

                           synchronized (redisUtils){

                               redisUtils.wait();

                           }

                       }

                   }catch (Exception e){

                       System.out.println("redis連線失敗 10s繼續嘗試連線");

                       try {

                           Thread.sleep(10000);

                       } catch (InterruptedException e1) {

                           e1.printStackTrace();

                       }

                   }

                }

                try {

                    redisUtils.wait();

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

Code:

String cache_name = cache.value();

    Object resule = null;

    if (RedisUtils.RedisState) {

        try {

            Object caches = redisTemplate.opsForHash().get(cache_name, joinPoint.getArgs()[0]);

            System.out.println(caches);

            if (caches != null) {

                logger.info("Redis 取值");

                return caches;

            }

        } catch (Exception e) {

            logger.error(e.toString());

            RedisUtils.RedisState = false;

            synchronized (RedisUtils.redisUtils) {

                RedisUtils.redisUtils.notify();

            }

        }

    }

    try {

        resule = joinPoint.proceed();

        logger.info("資料庫取值");

        if (RedisUtils.RedisState) {

            redisTemplate.opsForHash().put(cache_name, joinPoint.getArgs()[0], resule);

        }

    } catch (Throwable throwable) {

        throwable.printStackTrace();

    }

    return resule;

}

相關推薦

redis 連線

使用多執行緒做到斷線重連線 圖形參考tomcat接受請求,處理http頭模型 code: public class RedisUtils implements Runnable {     public static boolean RedisState = true

Node.js連線RabbitMQ,連,動態繫結routing key

RabbitMQ官方提供的教程https://www.rabbitmq.com/tuto...,是基於回撥的。 下面將給出基於Promise式的寫法。並且實現動態的佇列繫結 初始化配置 const amqp = require('amqplib') // rabbitMQ地址 const {amqpA

連線 、短連線、心跳機制與連(轉載) Socket的長連線和短連線

概述 可承遇到,不知什麼原因,一個夜晚,機房中,大片的遠端呼叫連線斷開。 第二天早上,使用者訪問高峰,大部分伺服器都在獲取連線,造成大片網路阻塞。 服務崩潰,慘不忍睹的景象。 本文將從長連線和短連線的概念切入,再到長連線與短連線的區別,以及應用場景,引出心跳機制和斷線重連,給出程式碼實現。 從原

Android Socket連線(模擬心跳包,連,傳送資料等)

這兩天做了一個專案是app通過socket連線自動炒菜機,給炒菜機發指令,炒菜機接收到指令會執行相應的操作。(程式雖然做的差不多了,然而我連炒菜機長什麼樣都沒見過) 其實作為一個會做飯的程式猿,我堅信還是自己動手做的飯菜比較好吃,畢竟做飯還是很有趣的。 閒話不

Apache mina 入門(四) —— 客戶端長連線方式實現連監聽

通過前面 Apache Mina 入門 (二)—— 非同步通訊機制 我們可以實現一個長連線的客戶端。但會發現一個問題,就是當網路、伺服器、應用程式出現問題而導致連線斷開後,我們的客戶端不能自動重連伺服器。導致客戶端程式癱瘓,不能使用。這個時候,通過增加一

nodejs中mysql

調試 狀態 pan var 參考 ble prot nec clas 之前寫了個小程序Node News,用到了MySQL數據庫,在本地測試均沒神馬問題。放上服務器運行一段時間後,偶然發現打開頁面的時候頁面一直處於等待狀態,直到Nginx返回超時錯誤。於是上服務器檢查了遍,

android 實現mqtt訊息推送,以及不停連的問題解決

前段時間專案用到mqtt的訊息推送,整理一下程式碼,程式碼的原型是網上找的,具體哪個地址已經忘記了。 程式碼的實現是新建了一個MyMqttService,全部功能都在裡面實現,包括連伺服器,斷線重連,訂閱訊息,處理訊息,釋出訊息等基本操作。 首先新增依賴: dependencies { &

django的資料庫

django每次查詢都會被把連線關閉,想保持長連線方法如下: from django.core import signals from django.db import close_connection # 取消訊號關聯,實現資料庫長連線 signals.request

【UE4】 第12講 FSocket

(版權宣告,禁止轉載) 【第03講】 實現了FSocket的連網基礎功能,這一講實現一下 斷線重連 <如果資深前輩發現有理解錯誤,還請不吝指正> <1> 建立Socket,設定阻塞模式(預設創建出來的就是阻塞模式,不用設定)  

teamtalk socket連問題的查詢

之前從teamtalk的核心庫裡面剝離出一個跨平臺網路庫,一開始用的好好的,可是在某些地方使用的時候總是出怪問題,有時候斷線重連就一直連不上,導致應用失聯,在實際使用場景中一直出問題,好不尷尬。 經過連三天的苦思冥想,除錯程式碼看輸出終於有些眉目了。 我是從以下幾個方面著手解決的,特此記錄一

ActiveMQ的連機制

primary active 節點 語法 無限 機制 新的 bubuko 獲取 斷線重連機制是ActiveMQ的高可用性具體體現之一。ActiveMQ提供failover機制去實現斷線重連的高可用性,可以使得連接斷開之後,不斷的重試連接到一個或多個brokerURL。 默認

關於資料庫連的一點點思考

最近在寫資料庫連結池,一個不可逃避的問題就是資料庫斷線重連。 查了很多資料,因為公司有很多專案用了 TP5 於是也去看了它的原始碼。 tp5的實現其實很簡單,配置了一些資料庫連線相關的錯誤資訊關鍵詞(句),然後在執行語句時 catch 異常資訊進行比對: // 伺服器斷線標識字元 p

Yii2實現mysql連[轉載]

最近遇到“Yii2實現mysql斷線重連”問題,找了好久資料,最後找到這篇文件是說明了該情況的,感謝這位作者的分享,記錄下來,必備以後查閱。 原文連結:https://www.yiichina.com/topic/7296 Yii2實現資料庫斷線重連 一、前話 在工作中,有時候一

netty4.0 心跳檢測與連操作

因為最近專案最近要用netty,服務端放在雲端,客戶端發在內網。那如何實現netty長連線和斷線重連呢(網路故障或者其他原因,客戶端要無限取重連服務端)。接下來我們看一下如何實現這個兩個功能呢。 服務端程式碼如下: package com.example.nettydem

mqtt協議 springboot2.0.4 mqttv3 釋出訂閱程式碼呼叫,mqtt

mqttv3 釋出訂閱程式碼呼叫 我用的是springboot2.0.4 直接上程式碼: pom.xml <dependency> <groupId>org.eclipse.paho</groupId>

iOS MQTT使用案例 (連)

iOS MQTT使用案例 (斷線重連) 參考了 iOS MQTT—-MQTTClient實戰-看這篇的就夠了 大神寫的這篇 git: MQTT-Client-Framework 介紹啥的看百度,上面大神寫的就行了,直接上乾貨。 安裝: pod 'MQTTClient'

WebSocket在服務端和客戶端通訊demo,支援心跳檢測+

一、為什麼需要 WebSocket? 初次接觸 WebSocket 的人,都會問同樣的問題:我們已經有了 HTTP 協議,為什麼還需要另一個協議?它能帶來什麼好處? 答案很簡單,因為 HTTP 協議有一個缺陷:通訊只能由客戶端發起。 舉例來說,我們想了解今天的天氣,只能是客戶端向伺服器發出

長連接 、短連接、心跳機制與連(轉載)

http ase 地址 出現異常 好處 失效 能力 shutdown 根據 概述 可承遇到,不知什麽原因,一個夜晚,機房中,大片的遠程調用連接斷開。 第二天早上,用戶訪問高峰,大部分服務器都在獲取連接,造成大片網絡阻塞。 服務崩潰,慘不忍睹的景象。 本文將從長連接和短連接

Windows C語言 Socket程式設計 client端(客戶端)--連版

瞭解了最基礎的C語言客戶端的編寫流程,稍稍加以改動即可實現斷線重連。 當伺服器掉線時,客戶端會以固定的頻率不停的重連。 #include <stdio.h> #include <winsock2.h> #pragma comme

MQTT

MQTT客戶端:org.eclipse.paho.client.mqttv3 MQTT伺服器:EMQ MQTT伺服器官網:http://emqtt.com/ 如果第一次看MQTT,可以參考:htt