参考《redis实战》

需要

1、记录用户最初一次拜访的工夫,并统计用户的最新拜访记录
2、记录用户最近浏览过的商品,商品数量为5
3、记录商品被拜访的次数,仅显5个热门数据
4、购物车增加移除商品

剖析

第一个需要

统计用户的最新拜访记录这种类型的,都能够用有序汇合来依据工夫进行排序。并且如果新增的member一样,则会更新score,刚好能够更新最初一次的拜访工夫。比方上面的例子,通过zadd减少成员,通过zrange失去范畴内的值。

local:1>zadd score 1 zhangsan"1"local:1>zadd score 2 zhangsan"0"local:1>zadd score 2 lisi"1"local:1>zrange score 0 -1 withscores1) "lisi"2) "2"3) "zhangsan"4) "2"

第二个需要

因为仅保留最近浏览过的5个商品,所以能够用有序汇合来进行过滤。
比方上面的例子,通过zremrangebyrank移除,仅保留一个分值高的。

local:1>zadd score 1 zhangsan"1"local:1>zadd score 2 lisi"1"local:1>zremrangebyrank score 0 -2"1"local:1>zrange score 0 -1 withscores1) "lisi"2) "2"local:1>

第三个需要

跟第三个需要雷同

第四个需要

购物车的商品及数量,能够当做键值对,拜访的人能够当做key来解决。用hmset进行保留或更新成员,通过hdel来移除成员。

local:1>hmset cart:A itemA 1"OK"local:1>hmset cart:A itemB 2"OK"local:1>hgetall cart:A1) "itemA"2) "1"3) "itemB"4) "2"local:1>hdel cart:A itemA"1"local:1>hgetall cart:A1) "itemB"2) "2"local:1>hmset cart:A itemB 3"OK"local:1>hgetall cart:A1) "itemB"2) "3"

实际

拜访页面及商品页

@Testpublic void testLoginAndView() {    String zhangsan = "zhangsan";    System.out.println("张三登录网站");    view(zhangsan, null);    System.out.println("张三拜访商品");    view(zhangsan, "itemA");    view(zhangsan, "itemB");    view(zhangsan, "itemC");    view(zhangsan, "itemA");    view(zhangsan, "itemB");    view(zhangsan, "itemA");    view(zhangsan, "itemD");    view(zhangsan, "itemE");    view(zhangsan, "itemF");    view(zhangsan, "itemG");    System.out.println("张三最初登录工夫:" + JedisUtils.zscore("lastTime:", zhangsan));    System.out.println("张三最近浏览商品:" + JedisUtils.zrevrange("view:" + zhangsan, 0, -1));    System.out.println("商品被浏览信息:" + JedisUtils.zrangeWithScores("item:", 0, -1));    String lisi = "lisi";    System.out.println("李四登录网站");    view(lisi, null);    System.out.println("李四拜访商品");    view(lisi, "itemA");    view(lisi, "itemB");    view(lisi, "itemC");    System.out.println("李四最初登录工夫:" + JedisUtils.zscore("lastTime:", lisi));    System.out.println("李四最近浏览商品:" + JedisUtils.zrange("view:" + lisi, 0, -1));    System.out.println("商品被浏览信息:" + JedisUtils.zrangeWithScores("item:", 0, -1));    String wangwu = "wangwu";    System.out.println("王五登录网站");    view(wangwu, null);    System.out.println("王五拜访商品");    view(wangwu, "itemA");    view(wangwu, "itemB");    view(wangwu, "itemC");    System.out.println("李四最初登录工夫:" + JedisUtils.zscore("lastTime:", wangwu));    System.out.println("李四最近浏览商品:" + JedisUtils.zrange("view:" + wangwu, 0, -1));    System.out.println("商品被浏览信息:" + JedisUtils.zrangeWithScores("item:", 0, -1));    System.out.println("用户登录信息:" + JedisUtils.zrange("lastTime:", 0, -1));}private void view(String token, String item) {    long timestamp = System.currentTimeMillis();    // 更新最初拜访的工夫    JedisUtils.zadd("lastTime:", timestamp, token);    if (StringUtils.isNotEmpty(item)) {        JedisUtils.zadd("view:" + token, timestamp, item);        JedisUtils.zremrangeByRank("view:" + token, 0, -6);        JedisUtils.zincrby("item:", 1, item);        JedisUtils.zremrangeByRank("item:", 0, -6);    }}

退出购物车

@Testpublic void testCart() {    String zhangsan = "zhangsan";    System.out.println("itemA退出购物车2件");    addCart(zhangsan, "itemA", 2);    System.out.println("itemB退出购物车1件");    addCart(zhangsan, "itemB", 1);    System.out.println("itemC退出购物车1件");    addCart(zhangsan, "itemC", 1);    System.out.println("购物车信息:" + JedisUtils.hgetAll("cart:" + zhangsan));    System.out.println("itemB缩小1件");    addCart(zhangsan, "itemB", -1);    System.out.println("itemA缩小1件");    addCart(zhangsan, "itemA", -1);    System.out.println("购物车信息:" + JedisUtils.hgetAll("cart:" + zhangsan));}private void addCart(String token, String item, int num) {    List<String> list = JedisUtils.hmget("cart:" + token, item);    if (JedisUtils.hexists("cart:" + token, item)) {        num += Integer.valueOf(list.get(0));    }    if (num <= 0) {        JedisUtils.hdel("cart:" + token, item);    } else {        JedisUtils.hset("cart:" + token, item, num + "");    }}