使用redis缓存来实现最近的浏览记录

感谢实现的思路与考虑:https://blog.csdn.net/qq_37107280/article/details/77894680

要使用redis缓存来实现最近的浏览记录功能,就是一个get和set的操作。

1.对于set的考虑

  • 确定最近浏览记录的失效时间,设置一个月即可

    expire key second

  • 最近的浏览记录有一个数量的限制,不能是一直LPUSH或者是RPUSH
    由于之前没有接触过LTRIM,开始还在想LIST中的push或者range命令能否对存储的记录条数进行指定,看到LTRIM命令整个人就好起来了

    ltrim key start stop 注意是[start, stop],start和stop都是从下标0开始

  • List本身就是有序的,先进的后出,后进的先出,这样也正好符合我们的最近浏览记录功能

  • 怎样保证用户连续浏览同一条记录的时候,不会重复保存记录?LREM
    刚开始的时候,并没有考虑到这个问题,也是在看了上面的文章后,才发现好像是有这么个问题。
    起初的实现想法时,将需要展示的三四个字段值统统进行缓存,但考虑这个重复问题时,果断的放弃了这个想法,直接缓存id,其他展示字段在进行LRANGE的时候去 一 一 获取。
    所以,可以使用LREM来移除列表中与缓存id 相等的元素。同时在使用Lpush重新再List插入最新的浏览商品,这样既能保证浏览的记录放在最顶,又能保证不重复

    lrem key count value

2.对于get的考虑

  • 由于此处只考虑最近10条的浏览记录,所以这里不考虑分页的情况。
  • 通过lrange去获取指定长度的数据

    lrange key start stop
    其中stop可以取-1,表示最后一个元素;-2,表示倒数第二个元素
    所以lrange key 0 -1,获取全部10条

3.最后的实现代码(未考虑原子性)

// 每个用户userId为一个list
String key = RedisConstant.RECENT_BROWSE_RECORD + userId;
// 为了保证浏览的 唯一性,每次添加前,将list 中该recordId去掉,再加入,以保证其浏览的最新的记录在最前面
redisUtil.lRem(key, 1, recordId);
// 将value lpush到该key下的list中
redisUtil.lPush(key, recordId);
// 使用ltrim将10个数据之后的数据剪切掉[start,end]
redisUtil.lTrim(key, 0, 9);
// 设置缓存时间为一个月
redisUtil.expire(key, 60 * 60 * 24 * 30);
String key = RedisConstant.RECENT_BROWSE_RECORD + userId;
// 取值所有
List list = redisUtil.lRange(key, 0, -1);
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在Redis中,可以使用List类型来缓存列表集合。可以通过以下命令来将一个元素添加到列表中: ``` LPUSH key value ``` 其中,`key`是列表的键名,`value`是要添加到列表中的值。如果需要添加多个元素,可以使用`LPUSH`命令多次执行。同样,也可以使用`RPUSH`命令在列表的尾部添加元素。 当需要从列表中获取元素时,可以使用以下命令: ``` LRANGE key start stop ``` 其中,`key`是列表的键名,`start`和`stop`是要获取元素的范围。例如,`LRANGE mylist 0 2`表示获取`mylist`列表中的前三个元素。 另外,还可以使用`LLEN`命令来获取列表的长度,使用`LPOP`和`RPOP`命令来分别从列表的头部和尾部删除元素。 需要注意的是,Redis中的List类型是支持重复元素的,而且可以在列表的任意位置插入或删除元素。因此,在使用List类型缓存集合时,需要根据实际需求进行操作,避免出现数据重复或不一致的情况。 ### 回答2: Redis可以通过使用列表(List)数据结构来缓存list集合。 通过使用Redis内置的命令来操作列表数据结构,可以将一个list集合存储在Redis的内存中。以下是一些常用的命令: 1. LPUSH:将一个值插入到列表的头部。 2. RPUSH:将一个值插入到列表的尾部。 3. LPOP:删除并返回列表的头元素。 4. RPOP:删除并返回列表的尾元素。 5. LRANGE:返回列表中指定范围内的所有元素。 6. LLEN:返回列表的长度。 例如,假设我们要缓存一个用户最近浏览记录,我们可以使用LPUSH命令将每次浏览的网页存储到列表的头部。当我们需要获取最近浏览记录时,可以使用LRANGE命令来获取列表中的元素。 Redis的列表数据结构具有以下特点: 1. 元素可以重复。 2. 可以快速在头部和尾部插入和删除元素。 3. 可以通过索引来访问元素。 4. 可以通过范围来获取多个元素。 通过将list集合缓存Redis中,我们可以实现高效的数据读写操作,并节省数据库的压力。同时,由于Redis将数据存储在内存中,读取和写入数据的速度非常快,可以加快应用程序的响应速度。当需要更新或获取最新的数据时,只需操作列表的头部或尾部元素即可,非常方便。 需要注意的是,由于Redis将数据存储在内存中,列表的长度受到内存的限制。如果列表的长度超过了内存可用空间,可能会导致性能下降或服务器崩溃。因此,在设计和使用缓存列表时,需要考虑内存的使用情况,并设置合理的缓存策略,如设置合适的过期时间或限制列表的长度,以确保系统的稳定性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值