使用redisd做浏览记录,在Hash的情况下(本身是无序的)。保证顺序的一致性,顺序不乱

首先,我存放redis是Hash,本身Hash是无序的,取出的时候结果肯定也是无序的。所以浏览记录的列表不够人性化(理论是:用户点击最近的一条记录,在浏览记录页面里面应该是第一条。但是因为hash是无序的,所以没法保证。)

其次,在存放hash的时候是,hmset,为了保证key的唯一。用ID+当前时间戳(System.currentTimeMillis() )。

所以,排序可以用时间戳来进行排序:

1.获取所有的Key  

Set<String> allkeys = jedis.keys(userJid + "*");

2.循环遍历 ,分割 ,取出时间戳的值

List<String> tNumList = new ArrayList<>();   
for (String value : allkeys) {
            String[] nets = value.split("net");
            String time = nets[1];
            String tNum = time;
            tNumList.add(tNum);
            }

3.比较所有的时间戳,同时进行排序(有固定的方法直接用就可以,但是因为时间戳的数值太大,所以要用Double来比较。原先是int,自己改一下就好)。

Collections.sort(tNumList, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        Double num1 = Double.parseDouble(o1);
        Double num2 = Double.parseDouble(o2);
        if (num1 < num2) {
            return 1;
        } else if (num1 > num2) {
            return -1;
        } else {
            return 0;
        }
    }
});

4.得到最大的值后,拼接hmset时候存放的完整key,得到一条数据,此数据是当前用户浏览记录中最近的一次记录,然后循环遍历出 name id  等等自己需要的值。然后返回给页面。

for ( String ivalue : tNumList){
     String UserVa =  userJid+ ivalue;
    HashMap map = new HashMap();
    List<String> rsmap = jedis.hmget(UserVa, "id");
    List<String> rsmapName = jedis.hmget(UserVa, "name");
    List<String> rsmapTime = jedis.hmget(UserVa, "time");
    List<String> rsmapUrl = jedis.hmget(UserVa, "url");
    map.put("rsmapName", rsmapName);
    map.put("rsmapTime", rsmapTime);
    map.put("rsmap", rsmap);
    map.put("rsmapUrl", rsmapUrl);
    list.add(map);
}

 

完整代码:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值