java通過代理使用redis,redis自動關閉連線,釋放資源
java使用redis一般都是通過redis.clients.jedis.Jedis來連線redis伺服器,通過redis.clients.jedis.Jedis提供的方法使用redis
但是每次執行完jedis裡面的方法之後必須關閉連結,釋放資源,否則連結一旦用完下次再使用redis程式會堵塞,但是手動關閉連結或出現很多的重複程式碼,並且有些時候也會忘記關閉
解決方法就是使用代理模式來解決這一問題
代理有兩種:java的Proxy類和Spring的Enhancer
區別就是前者只能代理基於介面的類,也就是說代理的類必須是介面,否則無法代理
後者是Spring的代理類,彌補java的Proxy只能代理介面的缺陷
Enhancer使用非常簡單,只要使用了Spring就會有,全類目是org.springframework.cglib.proxy.Enhancer
package com.xiaogang.report.proxy; import com.xiaogang.report.handler.JedisHandler; import org.springframework.cglib.proxy.Callback; import org.springframework.cglib.proxy.Enhancer; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** * jedis代理,自動關閉jedis連線 */ public class JedisProxy { private JedisPool jedisPool; public JedisProxy(JedisPool jedisPool) { this.jedisPool = jedisPool; } public Jedis createProxy() throws Exception{ Enhancer enhancer = new Enhancer(); //設定代理的父類,就設定需要代理的類 enhancer.setSuperclass(Jedis.class); //設定自定義的代理方法 Callback callback = new JedisHandler(jedisPool); enhancer.setCallback(callback); Object o = enhancer.create(); Jedis jedis = null; if (o instanceof Jedis){ jedis = (Jedis) o; } return jedis; } }
package com.xiaogang.report.handler; import org.springframework.cglib.proxy.InvocationHandler; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.lang.reflect.Method; /** * jedis代理,自動關閉資源 */ public class JedisHandler implements InvocationHandler { private JedisPool jedisPool; public JedisHandler(JedisPool jedisPool){ this.jedisPool = jedisPool; } /** * 當使用jedis方法的時候,實際呼叫的這裡的方法 * @param proxy * @param method * @param args * @return * @throws Throwable */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("JedisHandler.invoke -----start"); Jedis jedis = null; try { jedis = jedisPool.getResource(); Object invoke = method.invoke(jedis, args); System.out.println("代理方法獲得的結果:"+invoke); return invoke; }finally { if (jedis != null) { jedis.close(); System.out.println("關閉jedis連線"); } System.out.println("JedisHandler.invoke -----end"); } } }
以後獲取Jedis物件通過new JedisProxy().createProxy(),使用jedis的方法都會自動關閉連線了
執行結果
JedisHandler.invoke -----start
代理方法獲得的結果:[email protected]
關閉jedis連線
JedisHandler.invoke -----end
相關推薦
java通過代理使用redis,redis自動關閉連線,釋放資源
java使用redis一般都是通過redis.clients.jedis.Jedis來連線redis伺服器,通過redis.clients.jedis.Jedis提供的方法使用redis 但是每次執行完jedis裡面的方法之後必須關閉連結,釋放資源,否則連結一旦用完下次
內網中,JAVA通過代理方式,訪問URL
1)前言:企業實際開發中,會遇到這樣的情況,在瀏覽器中可以訪問域名地址(如:www.baidu.com),但是實際在命令列中,通過ping命令是ping不通的。 2)原因: 2.1)首先我們的電腦能連線到外網,在通過域名訪問地址時,正常的訪問流程是,先到最近的域名
WPF彈出一個視窗,並自動關閉
最近用WPF做了一個小的demo,由於對於WPF不是很熟悉,在這個過程中遇到不少問題,這篇文章便是針對某個小需求的整理,這個需求便是:在WPF中,如何彈出一個視窗,並讓它定時自動關閉。 我記得我最早的思路是在主視窗中開啟一個執行緒,這個執行緒每隔1s休眠一次,用這個執行緒來
簡單演示螢幕視窗截圖的兩種方法(MessageBox截圖,並自動關閉)
程式碼中提供了視窗截圖的兩種方法,但是在ScreenCapture.cs檔案中提供了多種螢幕截圖的方法 1、擷取button_click後彈出的視窗; 2、獲取指定標題的MessageBox,截圖,並在一秒鐘後自動關閉。 不貼程式碼了,直接上VS2008的工程了
在陽光下關閉自動調節功能後,背光很亮,開啟自動調節亮度,背光很暗[FAQ12718][AAL] 開啟MTK_AAL_SUPPORT 後,自動亮度調節速度變慢
[DESCRIPTION] 在陽光下關閉自動調節功能後,背光很亮,開啟自動調節亮度,背光很暗 在設定MTK_AAL_SUPPORT =yes後,選擇自動背光,環境變化後,背光亮度調節比較慢 [SOLUTION] 有兩個地方可以加快AAL 對背光PW
Java通過key直接擷取json字串的value,json無需轉換
例如想擷取scoreClass 這是json資料 "extra_info": { "fm_info": { "riskService": { "reason_code": "0
vue富文本編輯,編輯自動預覽,單個圖片上傳不能預覽的問題解決:
pac themes indexof conf html_ sta spa load this //預覽<div class="htmlViewBox"> <p v-html="activity_html_defaultMsg" v-show="html
給mysql表,加上自動時間戳,以及解決"Incorrect string value: '\\xF0\\x9F\\x93\\x9D\\xC2\\xA0...' for column 'con的錯誤
建立表時CURRENT_TIMESTAMP,一定要設定預設的值 "Incorrect string value: '\\xF0\\x9F\\x93\\x9D\\xC2\\xA0...' for column 'con 報錯是因為utf8不能容納超過3個位元組的emoji
localStorage使用例項-進入顯示廣告,點選關閉之後,重新整理網頁不再出現
仿一下京東官網頂部的廣告關閉,效果為第一次進入官網會出現廣告,然後點選關閉,重新整理網頁不會再顯示廣告,但是當清除localStorage存入的資料,重新整理網頁會再顯示廣告。 html程式碼 <div class="header"> <div class="
IOS微信6.7.4輸入框失去焦點,軟鍵盤關閉後,被撐起的頁面無法回退到原來正常的位置
IOS微信6.7.4輸入框失去焦點,軟鍵盤關閉後,被撐起的頁面無法回退到原來正常的位置 近期在開發微信H5頁面時碰到這個問題,如圖,軟鍵盤彈起後,若原輸入框被遮擋,頁面整體將會上移,然而當輸入框失焦,軟鍵盤收起後,頁面未恢復,這也是ios的微信版本更新6.7.4之後才
用兩個函式基本上解決此世紀難題——PB實現網路重新恢復後,系統自動重新連線資料庫
//==================================================================== // 函式: of_ReConnectDB() //-----------------------------------------------------
Apache配置.htaccess檔案 ,http自動轉https,隱藏index.php
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{
客戶端一段時間不訪問,第一次訪問資料庫自動斷開連線,重新整理可以正常連線
資料庫應用開發過程中,我們可能會遇到一個問題:應用使用了資料庫連線池,每經過指定時間後,發出到資料庫伺服器的任何請求都會失敗,而且有且僅有一次失敗,之後的正常訪問都沒有問題。尤其是在Web應用中,如果晚上時段沒有訪問,而第二天第一個訪客的經歷就是碰到一個數據庫訪問錯誤,如果開發系統的程式設計師沒有注意這個問
伺服器端主動關閉連線, 產生的TIME_WAIT狀態為什麼會佔用服務端大量埠?
1. 理解認為accep() 返回的socket_new, 其源埠和目的埠與 listen() 的socket 是一置的,accept() 返回並未佔用伺服器新的埠。 2. 如果伺服器端主動關閉 socket_new, 產生的TIME_WAIT狀態為什麼會在伺服器端佔用除監聽埠以外的其餘埠,還是其實並沒有佔
C#關閉窗體前釋放資源
在form_closing事件中加入以下程式碼: System.Environment.Exit(System.Environment.ExitCode); this.Dispose(); this.Close();
剛才看別人總結的,JDBC各種資料庫連線,汗顏啊。老是抄襲別人的。哎。不要重複發明輪子。。
1、Oracle8/8i/9i資料庫(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:o
hadoop啟動後,9000埠無法連線,netstat -tpnl中找不到該埠
已解決: 需要重新格式化hdfs。 1、停止hdfs; 2、刪除hdfs的相關檔案目錄(hdfs-site.xml中配置的存放檔案的目錄)。 3、啟動journalnode:sbin/hadoop-daemon.sh start journalnode; 4、格式化namenode:hdfs nam
基於Android硬體裝置跟微信伺服器通訊的專案心得,以UDP Byte通訊為例,建立無向連線,0530手札
這段時間挺忙的,微信企業號等微信系列的教程全部停滯了,原因是我手頭上抓著幾個專案,加班就不說了,今天剛剛把新接手的專案整到大概%80的樣 子吧,準備明天整整,星期一過來直接對接測試,很多朋友跑過來問問題,我是真沒時間,請見諒! 今天就分享下這個專案的總結,原始碼就不貼上了
SQL語句的並集UNION,交集JOIN(內連線,外連線),交叉連線(CROSS JOIN笛卡爾積),差集(NOT IN)
1.a. 並集UNIONSELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2b. 交集JOINSELECT * FROM table1 AS a JOIN table2 b ON
winform 窗體關閉但不釋放資源
重寫OnClosing方法,就可以實現此功能 protected override void OnClosing(CancelEventArgs e) { e.Cancel = true; thi