redis HSCAN命令及jedis的hscan方法
生活随笔
收集整理的這篇文章主要介紹了
redis HSCAN命令及jedis的hscan方法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
參考文檔:
http://doc.redisfans.com/key/scan.html
hscan是針對hash類型掃描,如果hash內(nèi)條目非常多時(shí),比如超過10萬,那么根據(jù)默認(rèn)的count = 10,每次掃描返回空的概率很大,此時(shí)可以根據(jù)情況把count調(diào)大:
下邊是對jedis的?hscan進(jìn)行了封裝:
@Overridepublic ScanResults hscanToResltByVague(String key, String pattern, String cursor, int pageSize) {List<Map.Entry<String, String>> result = null;List<Map.Entry<String, String>> results = new ArrayList<Map.Entry<String, String>>();ScanResults rsl = new ScanResults();ScanParams params = new ScanParams();String scanCursor = "0";if (!RobotUtils.isNull(cursor)) {scanCursor = cursor;}params.count(pageSize + 50);do {ScanResult<Entry<String, String>> scanResult = jedis.hscan(key, scanCursor, params.match(pattern));scanCursor = scanResult.getStringCursor();result = scanResult.getResult();results.addAll(result);if (results.size() >= pageSize) {break;}} while (!scanCursor.equals("0"));rsl.setCursor(scanCursor);rsl.setResultsEntry(results);rsl.setResultSize(results.size());return rsl;}?實(shí)際使用:
@Testpublic void testRedisHscan() throws InterruptedException {Thread.sleep(1000*40);long start = System.currentTimeMillis();DataCache cache = DataCacheFactory.getInstance();//ScanResults rs = cache.hscanToResltByVague("METADATA:VDITEMS", "c3ed2101aa56421d9f0eb23e4b719c29*", "0", 50000);List<HashMap<String, String>> lst = cache.hscanToResltByVague(SysConfig.getProperty("metadata.cache.vdItem"), "c3ed2101aa56421d9f0eb23e4b719c29*", "0", 50000).getResults();long end = System.currentTimeMillis();System.out.println("+++++++++++++++++耗時(shí):"+(end-start));try {System.out.println("+++++++++++++++++耗時(shí):"+(end-start)+" 結(jié)果:"+JSONUtils.serializeObject(lst));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}?
?
總結(jié)
以上是生活随笔為你收集整理的redis HSCAN命令及jedis的hscan方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BADI OVERVIEW
- 下一篇: 中国银联-无跳转支付token(银联侧开