jedis实现操纵redis的常用api

简单记录一下,和描述一下常用的业务场景。好记性不如烂笔头。

pom.xml

<!--整合redis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
View Code

场景1:点赞场景,比如说一个房屋列表,每次点进去详情,就会加1,而且,我们只取前10位,而且我们是按照点赞的数量来排序的。是不是有点小复杂?不用担心,redis三个命令就搞定。屌的一逼。

首先了解一下,zset这个集合的特性。有序列表 类似<Key,List<Map<key,value>>>  的类型  和hash差不多 但是,需要注意的是,他的值是很有讲究的,即是说他是有序的,肯定有个排序规则,所以,你要往里面放值,必须是   

zadd zset  100 a  200 b  300 c

key是zset 

100 a  200 b  300 c  相当于list里面一个一个对象

100相当于分数,必须是int类型  a 是我们实际的值

也就是说  我们想插入值的时候,必须是按照这种  

我这里是一口气插入三个值  key相同

java 的api 实现  看注释

 private static final String HOT_HOUSE_KEY = "hot_house";   //点赞的key

 //增加点赞的方法
    public void increase(Long id) {
        try {
            Jedis jedis = new Jedis("127.0.0.1");
            jedis.zincrby(HOT_HOUSE_KEY, 1.0D, id + "");  //每次为 值 id + ""  加1
            // 0代表第一个元素,-1代表最后一个元素,保留热度由低到高末尾10个房产,因为zset是排序的,
            // 所以说默认的是从低到高,我们要保留前十名,我们就要把第一和倒数 第11之间的值移除掉
            jedis.zremrangeByRank(HOT_HOUSE_KEY, 0, -11);
            jedis.close();
        } catch (Exception e) {
            log.error(e.getMessage(),e);
        }

    }

  //得到点赞数最多的前十名
    public List<Long> getHot() {
        try {
            Jedis jedis = new Jedis("127.0.0.1");
            //因为是默认排序从低到高,所以我们要反过来取,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列
            Set<String> idSet = jedis.zrevrange(HOT_HOUSE_KEY, 0, -1);
            jedis.close();
            List<Long> ids = idSet.stream().map(Long::parseLong).collect(Collectors.toList());
            return ids;
        } catch (Exception e) {
            log.error(e.getMessage(), e);//有同学反应在未安装redis时会报500,在这里做下兼容,
            return Lists.newArrayList();
        }

    }

猜你喜欢

转载自www.cnblogs.com/coder-lzh/p/8955883.html