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搭建电商秒杀系统
背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而 ...
随机推荐
- 常用http响应报文分析
这是我在使用Asp.Net的时候,整理的的一些关于Http响应报文的分析笔记,零零散散的记录, 现在贴出来,抛砖引玉,如果有什么不对或者不严谨的地方,请各位大神不吝赐教. 一.HTTP响应码响应码由三 ...
- Android开发相关操作
命令行启动DDMS工具,前提是有这个工具 ~/rustsoftware/adt-bundle-linux-x86_64-20140702/sdk/tools$ ./ddms 查看机器内存情况: adb ...
- JavaWeb开发技术基础概念回顾篇
JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...
- (转)流量加速插件 FinalSpeed介绍及一键安装教程
原文章连接:https://blog.kuoruan.com/82.html 1 介绍 官方介绍:FinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍 ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- 关于在HTML中使用的script标签
本文是<JavaScript高级程序设计>(第三版)中的第二章的个人学习的总结. 在HTML中使用JavaScript <script>标签 在HTML5中script主要有以 ...
- C#之异步
C#之异步 异步是相对于同步而言.跟多线程不能同一而论.异步简单而言好比一个人两双手可以同时做两件以上不同的事情.多线程好比多个人做不同或相同的事情. 异步跟多线程有什么关系? 异步可以分为CPU异步 ...
- java大数常用的方法
创建大数对象: BigInteger a=new BigInteger("123"); BigInteger a=BigInteger.valueOf(); 常用方法: multi ...
- semantic UI first web
官方文档:https://semantic-ui.com/introduction/getting-started.html semantic UI: SemanticUI是一款语义化设计的前端开源 ...
- Java微信公众平台开发之公众号支付(微信内H5调起支付)
官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公 ...