如何遍歷redis集合

當redis集合有大量的鍵值對的時候,若是使用smembers來獲取就如同keys *在redis有大量鍵的時候同樣,會產生性能問題,發生阻塞。因此建議使用sscan來遍歷集合,具體jedis代碼以下redis

public static Set<String> getSscan(Jedis redisService,String key) {
    Set<String> set = new HashSet<>();
    ScanParams params = new ScanParams();
    params.match(key);
    params.count(100);
    String cursor = "0";
    while (true) {
        ScanResult scanResult = redisService.sscan(key,cursor,params);
        List<String> elements = scanResult.getResult();
        if (elements != null && elements.size() > 0) {
            set.addAll(elements);
        }
        cursor = scanResult.getStringCursor();
        if ("0".equals(cursor)) {
            break;
        }
    }
    return set;
}

sscan的缺點就是沒法徹底實時性的獲取全部的集合元素,若是在代碼運行期間有新的元素加入集合可能會獲取不到,不過對於實時性要求不高的狀況下是徹底能夠的,不會發生性能堵塞問題。性能

相關文章
相關標籤/搜索