redis HSCAN命令及jedis的hscan方法
生活随笔
收集整理的這篇文章主要介紹了
redis HSCAN命令及jedis的hscan方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考文檔:
http://doc.redisfans.com/key/scan.html
hscan是針對hash類型掃描,如果hash內條目非常多時,比如超過10萬,那么根據默認的count = 10,每次掃描返回空的概率很大,此時可以根據情況把count調大:
下邊是對jedis的?hscan進行了封裝:
@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;}?實際使用:
@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("+++++++++++++++++耗時:"+(end-start));try {System.out.println("+++++++++++++++++耗時:"+(end-start)+" 結果:"+JSONUtils.serializeObject(lst));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}?
?
總結
以上是生活随笔為你收集整理的redis HSCAN命令及jedis的hscan方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BADI OVERVIEW
- 下一篇: 中国银联-无跳转支付token(银联侧开