大家好,欢迎来到IT知识分享网。
jedis的hscan方法出现内存溢出问题
解决方法:
下面是我使用hscan方法错误的写法,使用了递归,数据大的时候导致java代码出现StackOverflow的内存溢出错误:
public boolean hscan(int dbIndex,String key,int pageSize){
Map<String, Integer> mapList=new HashMap<String, Integer>();
Jedis jedis = null;
try {
jedis = Redis.getJedis();
jedis.select(dbIndex);
ScanParams sp = new ScanParams();
sp.count(pageSize);//每次多少条
loop(mapList,key, jedis, “0”, sp);
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
return false;
}finally{
// 返还到连接池
if (jedis != null) {
jedis.close();
}
}
return true;
}
public void loop(Map<String, Integer> mapList,String key, Jedis jedis, String cursor,
ScanParams sp) {
try {
ScanResult<Entry<String, String>> map = jedis.hscan(key, cursor, sp);
cursor = map.getStringCursor();
for (Entry<String, String> en : map.getResult()) {
//业务代码
}
if (!”0″.equals(cursor)) {
loop(mapList,key, jedis, cursor, sp);
}
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
正确方法:http://www.yayihouse.com/yayishuwu/chapter/1820
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24133.html