如何使用redis缓存来实现用户最近浏览的商品列表
来源:互联网 发布:蔬菜报价软件 编辑:程序博客网 时间:2024/06/06 00:43
如何使用redis缓存来实现用户最近浏览的商品列表
首先,我们要弄明白两个要点:最近浏览的商品肯定是一个存和取的两个操作.好了目前摆在我们面前的有以下几个问题:
1,最近浏览的记录肯定是需要失效时间的
确定使用缓存,缓存可以设置失效时间(最大设置为一个月,但是这已经足够了),如果使用mysql等数据库,还需要定时任务清除,很明显是不切合实际的,
2,最近浏览的记录肯定是有个数限制的,不可能记录所有的浏览记录
目前使用的主流缓存有 memached和redis两种(原谅无知的我并不清楚其他的),redis有LTRM来修剪,保证存储的浏览的条数;
3,我们需要在哪里添加保存浏览商品的方法
用户最近浏览的商品,肯定是再用户最近打开商品详情页的时候才算浏览,这点毋庸置疑;
4,怎么保证每次添加的浏览的商品列表按着浏览的先后顺序排序?
每次用户的浏览商品的ID,可以以用户的ID作为key,以List作为value,储存在redis中,而List是有序的,而且,在使用LRANGE的时候能保证先进后出,后进先出的原则,已达到排列在最前面的商品始终是里当前最近浏览的那个商品;
5,怎么保证用户在连续浏览同一个商品的时候,不会重复保存商品?
可以使用redis中LREM来移除列表中与参数 value(该商品ID) 相等的元素。同时在使用Lpush重新再List插入最新的浏览商品;
6,读取缓存的时候,又该如何保证分页?
redis中的LRANGE可以指定获取指定长度的元素,能够满足需要;
下面是简单的实现思路:
1,储存用户浏览的商品:
用户在打开详情页的时候,以用户ID作key,商品的ID做值,以List存入redi缓存中;
在加入添加缓存之前,为了保证浏览商品的 唯一性,每次添加前,使用lrem将缓存的list中该商品ID去掉,在加入,以保证其浏览的最新的商品在最前面;
在lpush到redis的List中之后,根据产品需求还需要将该list的前60个数据之外的缓存修剪掉;
最后添加缓存失效时间30天;
2.获取用户最近浏览的商品列表:
根据用户的ID及当前的页数和每页的个数,来获取商品缓存;
下面是最后实现的代码:
public void addMemberResentGoods(Long memberId, Long templateId) { String key = RedisKeyUtil.generteKeyWithPlaceholder(RedisKeys.MEMBER_RECENT_GOODS, memberId); //为了保证浏览商品的 唯一性,每次添加前,将list 中该 商品ID去掉,在加入,以保证其浏览的最新的商品在最前面 redisService.lrem(key, 1, templateId.toString()); //将value push 到该key下的list中 redisService.lpush(key,templateId.toString()); //使用ltrim将60个数据之后的数据剪切掉 redisService.lTrim(key,0,59); //设置缓存时间为一个月 redisService.expire(key,60*60*24*30); }2,根据用户的ID,分页获取最近浏览的商品:
public Map<String,Object> queryMemberResentGoods(Long memberId, int page, int pageSize) { String key = RedisKeyUtil.generteKeyWithPlaceholder(RedisKeys.MEMBER_RECENT_GOODS, memberId); //获取用户的浏览的商品的总页数; long pageCount = redisService.llen(key); //根据用户的ID分頁获取该用户最近浏览的50个商品信息 List<String> result = redisService.lrange(key,(page-1)*pageSize,page*pageSize-1); //拼装返回 Map<String,Object> map = new HashMap<>(); map.put("result",result); map.put("pageCount",(pageCount%pageSize == 0 ? pageCount/pageSize : pageCount/pageSize+1)); return map; }
- 如何使用redis缓存来实现用户最近浏览的商品列表
- 如何使用redis缓存来实现用户最近浏览的商品列表
- JavaWeb_使用Cookie模拟实现显示最近浏览的商品
- redis实战之使用redis保存最近浏览的商品数据
- cookie实现最近浏览商品
- 使用cookie技术实现,缓存最近浏览过详细信息的三本书的书名列表,并进行相应显示
- JQuery.cookie.js实现最近浏览过的商品
- 实现购物网站最近浏览商品的流程
- zen cart如何实现记录当前用户浏览过的商品
- 利用COOKIE实现最近浏览商品
- 使用cookie+工具类实现的 记录显示 用户【浏览商品记录】
- 最近浏览过的商品JS代码
- 利用Cookie显示最近浏览的商品
- 商品最近浏览历史记录
- 使用jsp实现对商品的浏览与保存浏览过的商品记录
- cookie案例-查看最近浏览的三件商品商品
- 利用Cookie实现用户浏览商品记录
- “购买过该商品的用户还浏览了”的商品推荐功能实现
- 关于本博客
- js 实现全屏预览(F11功能)
- 数据库扩展之困境,通俗理解数据库需求结构设计
- 再谈设计师的成长
- iOS PDF涂鸦demo
- 如何使用redis缓存来实现用户最近浏览的商品列表
- 查找素数编程
- 图片间隙问题
- IoC在Web API中的应用
- 跨域
- org.aspectj.lang.JoinPoint-中文简要API
- angular+一个输入框,往框里输入内容,在下方打印出来
- echarts 地图默认选中效果
- Quartz任务调度入门