Redis在电商中的实际应用-Java
示例代码用Jedis编写。
1. 各种计数,商品维度计数和用户维度计数
说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数。
- 商品维度计数(喜欢数,评论数,鉴定数,浏览数,etc)
采用Redis 的类型: Hash
. 如果你对redis数据类型不太熟悉,可以参考 http://redis.io/topics/data-types-intro。为product定义个key product:
,为每种数值定义hashkey, 譬如喜欢数like
- jedis.hset("product:1", "like", "5");
- jedis.hincrBy("product:1", "like", 1);//喜欢加一
- System.out.print(jedis.hget("product:1", "like"));
- 用户维度计数(动态数、关注数、粉丝数、喜欢商品数、发帖数 等)
用户维度计数同商品维度计数都采用 Hash
. 为User定义个key user:
,为每种数值定义hashkey, 譬如关注数follow
- jedis.hset("user:1", "follow", "5");
- jedis.hincrBy("user:1", "follow", 1);//关注数加一
- System.out.print(jedis.hget("user:1", "follow"));
2. 存储社交关系
譬如将用戶的好友/粉丝/关注,可以存在一个sorted set
中,score可以是timestamp,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。
- jedis.zadd("user:1000:friends", System.currentTimeMillis(), "user:1001");
- //uid为1000用户和uid为1001是朋友 , score值设定时间戳
- jedis.zadd("user:1000:friends", System.currentTimeMillis(), "user:1002");
- //uid为1000用户和uid为1002是朋友 , score值设定时间戳
- jedis.zadd("user:2000:friends", System.currentTimeMillis(), "user:1001");
- jedis.zadd("user:2000:friends", System.currentTimeMillis(), "user:1003");
- jedis.zinterstore("com_friends:1000:2000", "user:1000:friends", "user:2000:friends");
- System.out.println(jedis.zrange("com_friends:1000:2000", 0, -1));
3. 用作缓存代替memcached(商品列表,评论列表,@提示列表,etc)
相对memcached 简单的key-value存储来说,redis众多的数据结构(list,set,sorted set,hash, etc)可以更方便cache各种业务数据,性能也不亚于memcached。
4. 反spam系统(评论,发布商品,论坛发贴,etc)
作为一个电商网站被各种spam攻击是少不免(垃圾评论、发布垃圾商品、广告、刷自家商品排名等),针对这些spam制定一系列anti-spam规则,其中有些规则可以利用redis做实时分
析,譬如:1分钟评论不得超过2次、5分钟评论少于5次等(更多机制/规则需要结合drools )。
采用sorted set
将最近一天用户操作记录起来(为什么不全部记录?节省memory,全部操作会记录到log,后续利用hadoop进行更全面分析统计)
- if(!jedis.exists("user:1000:comment")){//还没有评论
- jedis.zadd("user:1000:comment", System.currentTimeMillis(), "uid为1000的评论内容");
- System.out.println(jedis.zrange("user:1000:comment", 0, -1));
- }else{
- //获取一分钟内的评论记录
- Set<String> result = jedis.zrangeByScore("user:1000:comment", System.currentTimeMillis() - 60 * 1000, System.currentTimeMillis());
- if(!result.isEmpty()){
- System.out.println("1分钟内不能评论两次");
- }else{
- jedis.zadd("user:1000:comment", System.currentTimeMillis(), "uid为1000的评论内容"+System.currentTimeMillis());
- System.out.println(jedis.zrange("user:1000:comment", 0, -1));
- }
- }
5. 用户Timeline/Feeds
应用于关注的人、主题、品牌及专栏,redis在这边主要当作cache使用
- jedis.zadd("user:2000:feed:topic", System.currentTimeMillis(), "13topic" + System.currentTimeMillis());
- //score为timestamp uid为2000的用户关注tid为13的topic
- jedis.expire("user:2000:feed:topic", 10);
- //关注有效期为10秒
- System.out.println(jedis.zrange("user:2000:feed:topic", 0, -1));
6. 最新列表&排行榜
用于记录用户刚刚喜欢的商品最新列表or排行榜 等业务场景
- jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "003");
- Thread.currentThread();
- Thread.sleep(10);
- jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "001");
- Thread.sleep(10);
- jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "004");
- Thread.sleep(10);
- jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "002");
- Thread.sleep(10);
- //默认喜欢时间升序排列
- Set<String> result = jedis.zrange("user:1000:product:like", 0, -1);
- System.out.println(result);
- //按喜欢时间降序排列
- result = jedis.zrevrange("user:1000:product:like", 0, -1);
- System.out.println(result);
- [003, 001, 004, 002]
- [002, 004, 001, 003]
7. 消息通知
采用Hash结构对消息通知业务场景计数
- //设置1条未读系统消息
- jedis.hset("user:1000:message:num", "sysmessagenum", "1");
- jedis.sadd("user:1000:message:content", "第一条未读信息");
- //未读系统消息+1
- jedis.hincrBy("user:1000:message:num", "sysmessagenum", 1);
- jedis.sadd("user:1000:message:content", "第二条未读信息");
- //查看所有消息通知数量
- System.out.println(jedis.hgetAll("user:1000:message:num"));
- //查看所有消息通知内容
- System.out.println(jedis.smembers("user:1000:message:content"));
- {sysmessagenum=2}
- [第二条未读信息, 第一条未读信息]
Redis在电商中的实际应用-Java的更多相关文章
- REDIS 在电商中的实际应用场景(转)
1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等 ...
- TP5使用Redis处理电商秒杀
本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...
- SpringBoot+Neo4j在社交电商中,讲述你是怎么被绑定为下线的
上两篇文章我们主要讲解了Neo4j的基本知识以及Neo4j的基本使用,这篇文章我们就以实例来深入的理解一下,我们以社交电商中的绑定关系为例,使用SpringBoot+Neo4j来实现. Neo4j文章 ...
- Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...
- 电商中的库存管理实现-mysql与redis
库存是电商系统的核心环节,如何做到不少卖,不超卖是库存关心的核心业务问题.业务量大时带来的问题是如何更快速的处理库存计算. 此处以最简模式来讨论库存设计. 以下内容只做分析,不能直接套用,欢迎 ...
- php+redis实现电商秒杀功能
这一次总结和分享用Redis实现分布式锁来完成电商的秒杀功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意思,若有误请谅解 ...
- 使用Redis搭建电商秒杀系统
背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而 ...
随机推荐
- Ambari部署时问题之Ambari Metrics无法启动
首先,我的问题是如下: Traceback (most recent call last): File , in <module> AMSServiceCheck().execute() ...
- Android - 使用Volley请求网络数据
Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...
- poj_2104: K-th Number 【主席树】
题目链接 学习了一下主席树,感觉具体算法思路不大好讲.. 大概是先建个空线段树,然后类似于递推,每一个都在前一个"历史版本"的基础上建立一个新的"历史版本",每 ...
- [权限相关]在PeopleSoft中查找可以使用DataMover的用户
DataMover是一个功能非常强大的工具,它的访问权限应该被控制,特别是在PRD环境中.在每个公司,许多用户可能在一段时间内切换部门,角色和职责,所以每隔一段时间就应该检查这些用户的权限,以确认他们 ...
- 微信小程序(一)基本知识初识别
最近微信圈里小程序很火的样子,以前小程序刚开始的时候研究了一下,多日没关注发现一些东西都淡忘了,最后决定还是记录下来的好. 毕竟好记星比不上烂笔头嘛~ 另外有想学习小程序的同学,也可以参考下,当然如果 ...
- LeetCode题解 343.Integer Break
题目:Given a positive integer n, break it into the sum of at least two positive integers and maximize ...
- kafka生产实践
最近接触到一个APP流量分析的项目,类似于友盟.涉及到几个C端高并发的接口,这几个接口主要用于C端数据的提交.在没有任何缓冲的情况下,一个接口涉及到5张表的提交.压测的结果很不理想,主要瓶颈就在与RD ...
- 【bzoj2819】Nim
Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...
- WordPress中函数钩子hook的作用及基本用法
WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它.钩子分类 钩子分为两种,一 ...
- [补档][Usaco2015 Jan]Grass Cownoisseur
[Usaco2015 Jan]Grass Cownoisseur 题目 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过? (一个点在路 ...