Springboot结合Redis Pipeline如何高效批量读取数据?

2026-05-21 00:361阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计217个文字,预计阅读时间需要1分钟。

Springboot结合Redis Pipeline如何高效批量读取数据?

目标:减少网络IO;降低redis访问压力;DateTime beginTime=DateTime.now(); // 读取MV所有Key String mvKeyPrefix=RedisUtil.PREFIX_RTDB + :MV:; Set keys=stringRedisTemplate.keys(mvKeyPrefix + *);

目的:

  • 减少网络IO;
  • 降低redis访问压力;
DateTime beginTime = DateTime.now();//读取MV所有KeyString mvKeyPrefix = RedisUtil.PREFIX_RTDB + ":MV:";Set<String> keys = stringRedisTemplate.keys(mvKeyPrefix + "*");if( keys == null ){ log.error( "Read MV data with key[" + mvKeyPrefix + "*" + "]from redis failed!" ); return;}log.info( "keys count: " + keys.size() );//transform to listList<String> keysList = new ArrayList<>( keys );//批量获取整个MV表实时值List<Object> objectList = stringRedisTemplate.executePipelined((RedisCallback<Object>) connection -> { for( String key : keysList ) { connection.hGet(key.getBytes(), "instmag".getBytes()); } return null; });//组装 <mvNo, mvRtValue> MapMap<Integer, Double> mvRtDataMap = new HashMap<>();for(int nIndex = 0; nIndex < keys.size(); nIndex++){ //mv no String key = keysList.get(nIndex); Integer mvNo = Integer.parseInt( key.replace( mvKeyPrefix, "" ) ); //value Object obj = objectList.get(nIndex); if( obj == null ) obj = "0"; Double dValue = Double.parseDouble( obj.toString() ); // mvRtDataMap.put( mvNo, dValue );}// log.info( mvRtDataMap.toString() );DateTime endTime = DateTime.now();Interval interval = new Interval( beginTime, endTime );log.info("cost: " + interval.toPeriod().getMillis() + " ms" );

Springboot结合Redis Pipeline如何高效批量读取数据?

本文共计217个文字,预计阅读时间需要1分钟。

Springboot结合Redis Pipeline如何高效批量读取数据?

目标:减少网络IO;降低redis访问压力;DateTime beginTime=DateTime.now(); // 读取MV所有Key String mvKeyPrefix=RedisUtil.PREFIX_RTDB + :MV:; Set keys=stringRedisTemplate.keys(mvKeyPrefix + *);

目的:

  • 减少网络IO;
  • 降低redis访问压力;
DateTime beginTime = DateTime.now();//读取MV所有KeyString mvKeyPrefix = RedisUtil.PREFIX_RTDB + ":MV:";Set<String> keys = stringRedisTemplate.keys(mvKeyPrefix + "*");if( keys == null ){ log.error( "Read MV data with key[" + mvKeyPrefix + "*" + "]from redis failed!" ); return;}log.info( "keys count: " + keys.size() );//transform to listList<String> keysList = new ArrayList<>( keys );//批量获取整个MV表实时值List<Object> objectList = stringRedisTemplate.executePipelined((RedisCallback<Object>) connection -> { for( String key : keysList ) { connection.hGet(key.getBytes(), "instmag".getBytes()); } return null; });//组装 <mvNo, mvRtValue> MapMap<Integer, Double> mvRtDataMap = new HashMap<>();for(int nIndex = 0; nIndex < keys.size(); nIndex++){ //mv no String key = keysList.get(nIndex); Integer mvNo = Integer.parseInt( key.replace( mvKeyPrefix, "" ) ); //value Object obj = objectList.get(nIndex); if( obj == null ) obj = "0"; Double dValue = Double.parseDouble( obj.toString() ); // mvRtDataMap.put( mvNo, dValue );}// log.info( mvRtDataMap.toString() );DateTime endTime = DateTime.now();Interval interval = new Interval( beginTime, endTime );log.info("cost: " + interval.toPeriod().getMillis() + " ms" );

Springboot结合Redis Pipeline如何高效批量读取数据?