1. 程式人生 > 其它 >SortedSet實現工具類

SortedSet實現工具類

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisZSetCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Set;

/**
 * @author leizige
 */
@Component
public class RedisUtil{

    @Resource
    private ZSetOperations<String, String> zSetOperations;

    private final Long EMPTY = 0L;

    /**
     * 新增一個元素, zset與set最大的區別就是每個元素都有一個score,因此有個排序的輔助功能;  zadd
     * key,value已存在,score覆蓋
     *
     * @param key
     * @param value
     */
    public boolean add(String key, String value, double score) {
        return zSetOperations.add(key, value, score);
    }


    /**
     * 查詢集合中指定順序的值  zrevrange
     * <p>
     * 返回有序的集合中,score大的在前面 
     * 
     * @param key
     * @param offset
     * @param count
     * @return
     */
    public Set<String> reverseRangeByScore(String key, int offset, int count) {
        return zSetOperations.reverseRangeByScore(key, 1, Long.MAX_VALUE, (offset - 1) * count, count);
    }

    /**
     * ZCARD key
     * <p>
     * 返回有序集 key 的基數。
     * <p>
     * 可用版本:
     * >= 1.2.0
     * 時間複雜度:
     * O(1)
     * 返回值:
     * 當 key 存在且是有序集型別時,返回有序集的基數。
     * 當 key 不存在時,返回 0
     *
     * @param key
     * @return
     */
    public Long zCard(String key) {
        return zSetOperations.zCard(key);
    }

    /**
     * 刪除元素 zrem
     *
     * @param key
     * @param value
     */
    public Long remove(String key, String value) {
        return zSetOperations.remove(key, value);
    }


    /**
     * 移除有序集 key 中,指定排名(rank)區間內的所有成員。
     * <p>
     * 區間分別以下標引數 start 和 stop 指出,包含 start 和 stop 在內。
     * <p>
     * 下標引數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。
     * 你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。
     * 可用版本:
     * >= 2.0.0
     * 時間複雜度:
     * O(log(N)+M), N 為有序集的基數,而 M 為被移除成員的數量。
     *
     * @param key
     * @param start
     * @param end
     * @return 被移除成員的數量
     */
    public Long removeRange(String key, long start, long end) {
        return zSetOperations.removeRange(key, start, end);
    }
}