spring data redis 遇到的“坑”——set集合的 Srandmember

sRandMember 命令是用於方法 set 集合中的“隨機”元素

命令格式爲

sRandMember key [count]

以下內容來自 http://www.redis.net.cn/order/3604.html

1.如果 count 爲正數,且小於集合基數,那麼命令返回一個包含 count 個元素的數組,數組中的元素各不相同。

2.如果 count 大於等於集合基數,那麼返回整個集合。

3.如果 count 爲負數,那麼命令返回一個數組,數組中的元素可能會重複出現多次,而數組的長度爲 count 的絕對值。

而 spring 封裝的 redis 是每次使用的指令如下,即每次都是上述的第三種情況

sRandMember key [-count]

spring 的默認是允許重複元素的,源碼如下:

List<V> org.springframework.data.redis.core.DefaultSetOperations.randomMembers(K key, long count)

public List<V> randomMembers(K key, final long count) {
    if (count < 0) {
        throw new IllegalArgumentException("Use a positive number for count. "
                + "This method is already allowing duplicate elements.");
    }
    final byte[] rawKey = rawKey(key);
    List<byte[]> rawValues = execute(new RedisCallback<List<byte[]>>() {
        public List<byte[]> doInRedis(RedisConnection connection) {
            return connection.sRandMember(rawKey, -count);
        }
    }, true);

    return deserializeValues(rawValues);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章