简单记录一下,和描述一下经常使用的业务场景。好记性不如烂笔头。java
pom.xmlredis
<!--整合redis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
场景1:浏览排行榜场景,好比说一个房屋列表,每次点进去详情,就会浏览数加1,并且,咱们只取前10位,并且咱们是按照点赞的数量来排序的。是否是有点小复杂?不用担忧,redis两个命令就搞定。屌的一逼。api
首先了解一下,zset这个集合的特性。有序列表 相似<Key,List<Map<key,value>>> 的类型 和hash差很少 可是,须要注意的是,他的值是颇有讲究的,便是说他是有序的,确定有个排序规则,因此,你要往里面放值,必须是 ide
zadd zset 100 a 200 b 300 c key是zset 100 a 200 b 300 c 至关于list里面一个一个对象 100至关于分数,必须是int类型 a 是咱们实际的值 也就是说 咱们想插入值的时候,必须是按照这种 我这里是一口气插入三个值 key相同
java 的api 实现 看注释 spa
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之间的值移除掉 填坑 ~~这个是个错误,由于若是这样的话,那就永远只有10条了。错误逻辑
// 最主要是记住api的用法 这里就注释了~
// 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); return Lists.newArrayList(); } }