Java中使用redis的ZSet数据结构

redis的ZSet使用

最近项目中搜索功能中,有搜索热词(搜索量前10)需求,准备用redis的zset来解决

下面列出核心用到的几个方法

插入数据

/**
     * 往ZSet塞值
     * @param key  (ZSet集合的名称)
     * @param socre (分数)
     * @param member (成员)
     * @throws Exception
     */
    public void setSortSet(String key ,double socre ,String member ) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.zadd(key,socre,member);
            //jedis.z
        } catch(Exception e) {
            //做自己的业务异常处理
        } finally {
            //返还到连接池
            jedis.close();
        }
    }

对原先成员进行加的操作

/**
     * 对member增加score
     * @param key
     * @param socre
     * @param member
     * @return
     */
    public Double setSortSetIncr(String key ,double socre ,String member ) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.zincrby(key,socre,member);

        } catch(Exception e) {
        //做自己的业务异常处理
        } finally {
            //返还到连接池
            jedis.close();
        }
    }

查询key指定排名的member

/**
     * 查询key指定排名的member
     * @param key
     * @param start
     * @param end
     * @return
     */
    public Set<String> getSortSetTop(String key ,Long start ,Long end ) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.zrange(key,start,end);
        } catch(Exception e) {
            //做自己的业务异常处理
        } finally {
            //返还到连接池
            jedis.close();
        }
    }

最后,这里只是对ZSet的部分方法做了说明,项目中使用ZSet的话,还需考虑member的删除情况,不然一直做塞新member的话,肯定会增大redis的压力。

经验分享 程序员 微信小程序 职场和发展