使用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);
使用redis缓存来实现最近的浏览记录相关推荐
- redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法
关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...
- 布隆过滤器Redis缓存穿透雪崩击穿热点key
目录 布隆过滤器 Redis 缓存 穿透 雪崩 击穿 热点KEY 布隆过滤器 布隆过滤器(判断某个key一定不存在) 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构 特点是高效地插入和查询, ...
- redis 缓存过期默认时间_过期redis时间
Redis命令--键(key) Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> C ...
- 「中间件系列二」redis缓存
Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五种不同类型的值之 ...
- 布隆过滤器避免redis缓存穿透
缓存穿透及布隆过滤器 Redis的基于缓存,极大地提升了应用程序的性能和效率,特别是数据查询方面,但是也带来了一些问题,比如典型的 缓存穿透.缓存雪崩.缓存击穿. 本篇先讲缓存穿透及其解决办法. (1 ...
- .net Redis缓存优化提高加载速度和服务器性能(二)
上文详细测试了每次都读取数据库的接口和通过缓存读取接口的性能对比 这里我们就准备实际简介肿么将原来的数据库加上Redis缓存优化部分接口 1.下载Redis和Redis视图管理工具 点击下载 提取码: ...
- Django中--使用redis存储历史浏览记录
class UserInfoView(LoginRequiredMixin, View):'''用户中心-信息页'''def get(self, request):'''显示'''# Django会给 ...
- Redis系列教程(一):Redis缓存的设计、性能、应用与数据集群同步
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行 ...
- MySQL建表添加乐观锁字段_Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化...
Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化 项目介绍 基于SpringBoot+Mybatis搭建的秒杀系统,并且针对高并发场景进行了优化,保证线 ...
- java雪崩_【并发编程】java 如何解决redis缓存穿透、缓存雪崩(高性能示例代码)...
[并发编程]java 如何解决redis缓存穿透.缓存雪崩(高性能示例代码) 发布时间:2018-11-22 16:48, 浏览次数:872 , 标签: java redis <>缓存穿透 ...
最新文章
- IBM虚拟化石油行业成功案例分享
- 将base64编码图片上传到七牛云
- 外部情况错综复杂,联想靠什么过「久日子」
- 【SpringCloud】Hystrix:熔断
- java文本库,自定义文本库
- server长时间运行query,Ajax刷新被block
- oracle数据modeling分类,由浅入深 NoSQL的五种主流数据模型
- Linux多进程拷贝文件
- js获取当前时间(昨天、今天、明天)
- pe和linux一起安装到移动硬盘,解决方法:将分区的移动硬盘放入可启动的WIN PE磁盘中,并安装GHO或ISO原始版本...
- 关于CXF大文件的传输问题
- java 方法 时间_Java 方法
- visual studio 2008试用版的评估期29天后结束 解决办法
- SQL学习笔记之游标
- java计算机毕业设计教务排课系统(附源码、数据库)
- FOI冬令营 Day4
- 小米、百度、bigo 、滴滴 、快手等iOS 面试后的一次阶段性总结
- [原创]IBM BLM模型思维导图
- 计算机的正确配置文件,显示器颜色配置文件在win10电脑中设置正确配置的方法...
- nmap常用命令/使用教程