GoodsRankService.java 3.2 KB
Newer Older
Q
qinyingjie 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
package com.kwan.springbootkwan.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.Set;

/**
 * 商品排序
 *
 * @author : qinyingjie
 * @version : 2.2.0
 * @date : 2022/12/22 10:01
 */
public class GoodsRankService {

    private static Jedis jedis;

    static {
        jedis = new Jedis("120.79.36.53", 6379);
    }

    /**
     * 排序的Key
     */
    private static String KEY = "goods";

    public static void removeOne() {
        /**
         * zrem——移除某个商品
         * 命令格式:***zrem 排行榜名称 商品标识*** 时间复杂度:O(log(N))
         */
        Long aLong = jedis.zrem(KEY, "god-10");
    }

    public static void addScore() {
        /**
         * zincrby——增减商品分数
         * 命令格式:***zincrby 排行榜名称 分数增量 商品标识*** 时间复杂度:O(log(N))
         * 有的排行榜是在变更时重新设置商品的分数,而还有的排行榜则是以增量方式修改商品分数,增量可正可负。如果执行zincrby时商品尚不在排行榜中,则认为其原始分数为0,相当于执行zdd。
         */
        Double zincrby = jedis.zincrby(KEY, 1, "god-10");
        System.out.println(zincrby);
    }

    public static void getNum() {
        /**
         * zrevrank——查看商品的排名
         * 命令格式:***zrevrank 排行榜名称 商品标识*** 时间复杂度:O(log(N))
         * 与zrevrange类似,zrevrank是以分数由高到低的排序返回商品排名(实际返回的是以0开始的索引),对应的zrank则是以分数由低到高的排序返回排名。
         */
        Long aLong = jedis.zrevrank(KEY, "god-10");
        System.out.println(aLong);
        Long aLong2 = jedis.zrevrank(KEY, "god-1000");
        System.out.println(aLong2);
    }

    public static void getRange() {
        /**
         * zrevrange——按名次查看排行榜
         * 命令格式:***zrevrange 排行榜名称 起始位置 结束位置 [withscores]*** 时间复杂度:O(log(N)+M)
         * 由于排行榜一般是按照分数由高到低排序的,所以我们使用zrevrange,而命令zrange是按照分数由低到高排序。
         * 起始位置和结束位置都是以0开始的索引,且都包含在内。如果结束位置为-1则查看范围为整个排行榜。
         * 带上withscores则会返回商品分数。
         */
        Set<String> zrevrange = jedis.zrevrange(KEY, 2, 5);
        zrevrange.forEach(System.out::println);
        Set<Tuple> set = jedis.zrangeWithScores(KEY, 2, 5);
        set.forEach(System.out::println);
    }

    public static void getData() {
        /**
         * zscore——查看商品分数
         * 命令格式:***zscore 排行榜名称 商品标识*** 时间复杂度:O(1)
         */
        Double zscore = jedis.zscore(KEY, "go-20");
        System.out.println(zscore);
    }

    public static void setData() {
        for (int i = 0; i < 100; i++) {
            /**
             * zadd——设置商品分数
             * 命令格式:***zadd 排行榜名称 分数 商品名字 时间复杂度:O(log(N))
             */
            jedis.zadd(KEY, i, "go-" + i);
        }
    }
}