使用Redis实现用户最近浏览记录

系列文章目录



前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
在这里插入图片描述
对于数据,我们应该有如下要求

1,要有失效时间,既然是最近浏览记录,那么就要有一个有效期,不存在我一年没有登录账号了再显示去年我看过记录

2,有个数限制,不能无限制存放,比如可以限定只存十条记录

3,有模块划分,例如商城,我手机浏览记录和饮料浏览记录是两回事,PC和手机也可能不是一回事

4,要有顺序,那个是先看的,那个是后浏览的

5,浏览同一个属性,不重复存储

6,要考虑分页情况,因为我们不知道需求到底有多变态

基于上述分析

1,设置值以后要手动调整Key的有效期

2和4,考虑使用List存储,且要修剪List长度

3,通过Key的不同来区分存储

5,要先移除相等,然后再存储

6,Redis的List是支持分页读取的

基于上述,编写如下测试用例代码演示功能:

public void testList2(){
    String pcKey = "product:pc:list";
    // 从左放数据
    redisTemplate.opsForList().leftPush(pcKey, "1");
    redisTemplate.opsForList().leftPush(pcKey, "2");
    redisTemplate.opsForList().leftPush(pcKey, "3");
    redisTemplate.opsForList().leftPush(pcKey, "4");
    redisTemplate.opsForList().leftPush(pcKey, "5");
    // 移除元素 3 ,因为可能原来有
    redisTemplate.opsForList().remove(pcKey, 0, "3");
    // 重新添加元素 3,这时 3 会在最前面
    redisTemplate.opsForList().leftPush(pcKey, "3");
    // 修剪,保留4个
    redisTemplate.opsForList().trim(pcKey, 0, 3);
    // 时间有效期为一个月
    redisTemplate.expire(pcKey, 30, TimeUnit.DAYS);
    //查询列表长度
    System.out.println("集合长度:" + redisTemplate.opsForList().size(pcKey));
    // 获取所有,可以指定参数进行分页
    List<String> relist = (List<String>) redisTemplate.opsForList().range(pcKey, 0, -1);
    System.out.println(JSON.toJSONString(relist, true));
}

看下数据

在这里插入图片描述

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java毕设王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值