日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jedis 读写效率测试 hgetAll hmset

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jedis 读写效率测试 hgetAll hmset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

測試結果:

1.redis使用三種方式

1)單 Jedis 讀寫1條命令,讀寫玩即close()

2) 單Jedis讀寫多條命令,此種情況嘗試不釋放Jedis連接,由于Jedis本質是tcp長連接,需要做異常判斷?

3)Pipeline方式讀寫,此種方式效率最高,但是由于將多條命令緩存與Outpustream并在syn()方法時一次性flush(),若本次出現異常,會影響全部命令執行。

2.測試代碼

package com.nari.server.Redis.test;import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set;import org.apache.log4j.Logger;import com.nari.server.Redis.RedisFactory;import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Pipeline; import redis.clients.jedis.Response;import java.lang.Class; public class Main {public static Logger loger = Logger.getLogger(Main.class); public static JedisPool jedisPool =null;public static void Maintest() {// TODO Auto-generated constructor stubtry(Jedis jedis = jedisPool.getResource()) { // try {HashMap<String,String> map = new HashMap<String,String>();map.put("addr","1" );jedis.hmset("test", map);System.out.println("---");} catch (Exception e) {System.out.println("jedis set error:" );e.printStackTrace();}}private static void hmset(final String key, final Map<String,String> hash) { try( Jedis jedis =RedisFactory.getJedisPool().getResource() ) {jedis.hmset(key, hash);}catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {RedisFactory.initRedis(true);Map<String,String> hash =new HashMap<String,String>();Jedis jedis =RedisFactory.getJedisPool().getResource();long time1 = System.currentTimeMillis();for(int i=0;i<100000;i++) {hash.clear();hash.put("k_1" + i, "v_" );hmset("key_1" + i, hash);}long time2 = System.currentTimeMillis();long res1 = time2-time1;loger.info("Jedis直接hmset寫單鍵值MAP(100000條)用時"+res1);//使用pipeline hmsetPipeline p = jedis.pipelined();long start = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {hash.clear();hash.put("k_1" + i, "v_" );p.hmset("key_1" + i, hash);}p.sync();long end = System.currentTimeMillis();long res2 = end-start;loger.info("pipeline方式hmset寫單鍵值MAP(100000條)用時:"+res2);long time3 =System.currentTimeMillis();//HMGETSet<String> keys0 = jedis.keys("*");Set<String> keys00 = new HashSet<String>();;for(String key : keys0) {if(key.contains("key_1")) {keys00.add(key);}}Map<String,Map<String,String>> result = new HashMap<String,Map<String,String>>();Set<String> keys = RedisFactory.getJedisPool().getResource().keys("*");Map<String,Response<Map<String,String>>> responses = new HashMap<String,Response<Map<String,String>>>(keys.size());for(String key : keys00) {responses.put(key, p.hgetAll(key));}p.sync();long time4 =System.currentTimeMillis();long res3 = time4-time3;loger.info("pipeline 方式 hgetAll 讀取read("+responses.size()+")條用時:"+res3);//-------------------------------------------------Set<String> keys01 = jedis.keys("*");Set<String> keys001 = new HashSet<String>();;for(String key : keys01) {if(key.contains("key_1")) {keys001.add(key);}}//直接使用Jedis hgetalllong startr = System.currentTimeMillis();Map<String,Map<String,String>> result01 = new HashMap<String,Map<String,String>>();for(String key : keys001) {result01.put(key, jedis.hgetAll(key));}long endr = System.currentTimeMillis();long timer = endr-startr;loger.info("hgetAll without pipeline used"+"讀取read("+result01.size()+")條用時:" + timer);MsgBean msg =null;List<Device> devicesList;List<Data> dataList;Device device;Data data;for(int i = 0; i < 1; i++) { //消息數目msg = new MsgBean();devicesList = new ArrayList<>();for(int j=0; j < 1; j++){ //設備數目device = new Device();device.setDeviceId("12");device.setServiceId("analog");dataList = new ArrayList<>();for(int d =0; d <1; d++){ //設備中data數目data = new Data();data.setPhVAr_phsA1(220);data.setPhV_phsB(1.3);data.setPhV_phsC(1.1);data.setPhV_neut(0.001);data.setA_phsA(0.01);data.setA_phsB(0.01);data.setA_phsC(0.01);data.setHz(50);data.setTotW(1.4);data.setTotVAr(0);data.setTotPF(1);data.setPhW_phsA(0.1);data.setPhW_phsB(0.1);data.setPhW_phsC(0.1);data.setPhVAr_phsA(0.01);data.setPhVAr_phsB(0.01);data.setPhVAr_phsC(0.01);dataList.add(data);}device.setData(dataList);device.setEventTime();devicesList.add(device);}msg.setDevices(devicesList);}{long time5 = System.currentTimeMillis();for(int i=0;i<100000;i++) {hmset("key_1" + i, RedisFactory.BeanToMap(msg));}long time6 = System.currentTimeMillis();long res6 = time6-time5;System.out.println("簡單Jedis hmset寫物模型實例(100000條)用時:"+res6);//使用pipeline hmsetPipeline p7 = jedis.pipelined();long start7 = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {p7.hmset("key_1" + i,RedisFactory.BeanToMap(msg));}p7.sync();long end7 = System.currentTimeMillis();long res7 = end7-start7;loger.info("pipeline方式hmset寫物模型實例(100000條)用時:"+res7);}} }

RedisFactory本質制作了JedisPool的初始化,可以簡化此類,去除無用內容

package com.nari.server.Redis;import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.Map; import org.apache.log4j.Logger; import com.google.gson.Gson; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisPubSub; import java.util.HashMap;public class RedisFactory {private static Logger loger = Logger.getLogger(RedisFactory.class);private static JedisPool jedisPool = null;private static Jedis _Publisher = null;private static Jedis _Realinker = null;private static Jedis _PublisherAlarm = null;private static Jedis _Listener = null;private static final Gson _Jsoner = new Gson();public static final void initRedis( Boolean sub) {if (jedisPool == null) {try {JedisPoolConfig config = new JedisPoolConfig();// 連接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認trueconfig.setBlockWhenExhausted(true);// 設置的逐出策略類名, 默認DefaultEvictionPolicy(當連接超過最大空閑時間,或連接數超過最大空閑連接數)config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");// 是否啟用pool的jmx管理功能, 默認trueconfig.setJmxEnabled(true);// MBean ObjectName = new// ObjectName("org.apache.commons.pool2:type=GenericObjectPool,name="// + "pool" + i); 默認為"pool", JMX不熟,具體不知道是干啥的...默認就好.config.setJmxNamePrefix("pool");// 是否啟用后進先出, 默認trueconfig.setLifo(true);// 最大空閑連接數, 默認8個config.setMaxIdle(8);// 最大連接數, 默認8個config.setMaxTotal(8);// 獲取連接時的最大等待毫秒數(如果設置為阻塞時BlockWhenExhausted),如果超時就拋異常,// 小于零:阻塞不確定的時間,// 默認-1config.setMinIdle(8);config.setMaxWaitMillis(-1);// 逐出連接的最小空閑時間 默認1800000毫秒(30分鐘)config.setMinEvictableIdleTimeMillis(1800000);// 最小空閑連接數, 默認0config.setMinIdle(0);// 每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 默認3config.setNumTestsPerEvictionRun(3);// 對象空閑多久后逐出, 當空閑時間>該值 且 空閑連接>最大空閑數// 時直接逐出,不再根據MinEvictableIdleTimeMillis判斷 (默認逐出策略)config.setSoftMinEvictableIdleTimeMillis(1800000);//檢驗返回有效性 // config.setTestOnReturn(true);// 在獲取連接的時候檢查有效性, 默認falseconfig.setTestOnBorrow(false);// 在空閑時檢查有效性, 默認falseconfig.setTestWhileIdle(true);// 逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認-1config.setTimeBetweenEvictionRunsMillis(-1);jedisPool = new JedisPool(config, "localhost", 6379);loger.info("Redis database initialized");if(sub) {doSubscribeNew("listener", new Listener());}else {//重啟redis之后 subscribe需要重新設置Listener listerner = new Listener();doSubscribeNew("listener", listerner);}} catch (Exception e) {loger.error(e);} // jedisPool = new JedisPool("127.0.0.1");}}private static final void doSubscribeNew(String channel, JedisPubSub sub) {new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){try(Jedis jedis = RedisFactory.jedisPool.getResource()){jedis.subscribe(sub, channel); }catch(Exception e) {e.printStackTrace();} }}}).start();}public static final Jedis getInstance() {return jedisPool.getResource();}public static synchronized final Jedis getPublisher() {if(jedisPool.isClosed()) {return null;}if(_Publisher==null) {_Publisher = getInstance();} return _Publisher;}protected static synchronized final Jedis getListener() {if(jedisPool.isClosed()) {return null;}if(_Listener==null) {_Listener = getInstance();} return _Listener;}protected static synchronized final Jedis getPublisherAlarm() {if(jedisPool.isClosed()) {return null;}if(_PublisherAlarm==null) {_PublisherAlarm = getInstance();} return _PublisherAlarm;}public Jedis getJedis() {return jedisPool.getResource();}protected static synchronized final Jedis getRealinker() {if(jedisPool.isClosed()) {return null;}if(_Realinker==null) {_Realinker = getInstance();} return _Realinker;}public static JedisPool getJedisPool() {return jedisPool;}public static void setJedisPool(JedisPool jedisPool) {RedisFactory.jedisPool = jedisPool;}public static void releaseJedisSource() {if(_Listener!=null) {_Listener.close();}if (null != jedisPool) {jedisPool.close();jedisPool=null;}}public static Map<String, String> BeanToMap(Object bean) {Map<String, String> beanMap = new HashMap<String, String>();try {PropertyDescriptor[] PDS = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors();for (PropertyDescriptor pd : PDS) {String propertyName = pd.getName();if (propertyName != null && !propertyName.equals("class")) {Method getter = pd.getReadMethod();if (getter != null) {//可用注解標識優化處理//getter.getAnnotation(null); beanMap.put(propertyName,_Jsoner.toJson(getter.invoke(bean)));}}}} catch (Exception e) {loger.error("BeanToMap error "+e);if(loger.isInfoEnabled())e.printStackTrace(); }return beanMap;}protected static <T> T MapToBean( Map<String, String> beanMap, Class<T> clazz) {T bean = null;try {bean = clazz.newInstance();PropertyDescriptor[] PDS = Introspector.getBeanInfo(clazz).getPropertyDescriptors();for (PropertyDescriptor pd : PDS) {String propertyName = pd.getName();if (propertyName != null && !propertyName.equals("class")) {Method setter = pd.getWriteMethod();String value = beanMap.get(propertyName);//String type = pd.getPropertyType().getName();Class<?> type = pd.getPropertyType();if (setter != null && value != null && !value.equalsIgnoreCase("null")) {//Object obj = value(value, type);Object obj = _Jsoner.fromJson(value, type);if (obj != null) {setter.invoke(bean, obj);}}}}} catch (Exception e) {loger.error(e);if(loger.isInfoEnabled())e.printStackTrace();}return bean;}/*** 單個集中器的總量統計 * 單個集中器單個指令的統計 * 全部數量的統計* */public static void numInc(long objLong,short NUM_ID_SHORT) {}/*** 獲得上行的報文時,寫redis中對應的總數和每個分量**/public static void numIncRcv(long objLong,short NUM_ID_SHORT) {}/***增加總報文數量統計* **/public static void numIncALL(short NUM_ID_SHORT) {}/***增加返回總報文數量統計* **/public static void numIncALLRcv(short NUM_ID_SHORT) {}}

完整項目見:https://download.csdn.net/download/mychinasty/12055377?后續補上鏈接,mavean項目包含全部Jar包,只需要執行Main類中的main方法即可完美運行

3.測試結果

總結

以上是生活随笔為你收集整理的Jedis 读写效率测试 hgetAll hmset的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品黄色在线观看 | 一本色道久久综合狠狠躁 | 免费人成网站 | av资源站 | jizz黑人 | 插插插av| 免费av在线网 | 国产精品毛片一区 | 一本色道av | 午夜毛片| 少妇一级淫片免费放中国 | 一级特黄色大片 | 超碰首页 | 麻豆影视在线播放 | 成人激情av| 亚洲黄色片在线观看 | 伊人网中文字幕 | 久久艹影院 | 特级西西444www大精品视频免费看 | 国产午夜一区二区 | 花房姑娘免费全集 | 亚洲图片综合区 | 欧美美女性生活 | 久久人人爽爽人人爽人人片av | 亚洲国产天堂av | 亚洲性在线 | 91香蕉国产| 美女精品在线 | 亚洲国内精品 | jizzjizz欧美69巨大 | 亚洲品质自拍视频网站 | 免费黄色在线 | 亚洲free性xxxx护士hd | 色77777| 91九色偷拍 | 青青草视频免费 | 久久久男人天堂 | 性一交一乱一伧老太 | 精品无码国产av一区二区三区 | 日本一区二区不卡视频 | 欧美老肥妇做爰bbww | 99re在线精品视频 | 免费日本特黄 | 欧美性猛交xxxx久久久 | 奇米婷婷 | 毛片网页| 欧美日韩在线免费播放 | 欧美性aaa| 国产视频在线看 | 免费在线毛片 | 九九九在线视频 | 天天躁日日躁狠狠很躁 | 五月婷婷视频 | 在线欧美 | 精品少妇人妻av免费久久久 | 精品人妻少妇嫩草av无码 | 亚洲国产精 | 人妻丰满熟妇无码区免费 | 欧美久久久久久又粗又大 | 日韩中文字幕亚洲精品欧美 | 少妇xxxx| 亚洲天堂av女优 | 亚洲男人天堂视频 | 97视频在线观看免费高清完整版在线观看 | 日本美女一区二区 | 制服丝袜一区在线 | 91国产一区二区 | 丰满人妻一区二区三区大胸 | 性欧美精品男男 | 白白色免费视频 | 欧美久久久久久久久久 | 久久久久亚洲av成人网人人网站 | jlzzzjlzzz国产免费观看 | 黄在线免费 | 国产精品免费电影 | 黄色片网站视频 | 国产伦精品一区二区三区免费视频 | 国产妇女乱一性一交 | 久久精品国产亚洲AV熟女 | 毛片啪啪啪 | 国产最新在线观看 | 国产 欧美 日本 | 国产成人精品一区二区在线小狼 | 午夜视频观看 | 中文字幕一区二区三区四区免费看 | 亚洲性综合网 | 免费在线你懂的 | 亚洲午夜免费视频 | 免费亚洲婷婷 | 男操女视频网站 | 麻豆理论片 | 国产精品美女www | 九色蝌蚪9l视频蝌蚪9l视频 | av在线免费播放网站 | 国产1区2区在线观看 | 免费看黄20分钟 | 国产v在线 | 成人免费毛片入口 | 男女视频免费看 |