示例代码用Jedis编写。

1. 各种计数,商品维度计数和用户维度计数

  说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数。

  • 商品维度计数(喜欢数,评论数,鉴定数,浏览数,etc)

    采用Redis 的类型: Hash. 如果你对redis数据类型不太熟悉,可以参考 http://redis.io/topics/data-types-intro。为product定义个key product:,为每种数值定义hashkey, 譬如喜欢数like

  1. jedis.hset("product:1", "like", "5");
  2. jedis.hincrBy("product:1", "like", 1);//喜欢加一
  3. System.out.print(jedis.hget("product:1", "like"));
  • 用户维度计数(动态数、关注数、粉丝数、喜欢商品数、发帖数 等)

     用户维度计数同商品维度计数都采用 Hash. 为User定义个key user:,为每种数值定义hashkey, 譬如关注数follow

  1. jedis.hset("user:1", "follow", "5");
  2. jedis.hincrBy("user:1", "follow", 1);//关注数加一
  3. System.out.print(jedis.hget("user:1", "follow")); 

2. 存储社交关系

     譬如将用戶的好友/粉丝/关注,可以存在一个sorted set中,score可以是timestamp,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。

  1. jedis.zadd("user:1000:friends", System.currentTimeMillis(), "user:1001");
  2. //uid为1000用户和uid为1001是朋友 , score值设定时间戳
  3. jedis.zadd("user:1000:friends", System.currentTimeMillis(), "user:1002");
  4. //uid为1000用户和uid为1002是朋友 , score值设定时间戳
  5.  
  6. jedis.zadd("user:2000:friends", System.currentTimeMillis(), "user:1001");
  7. jedis.zadd("user:2000:friends", System.currentTimeMillis(), "user:1003");
  8.  
  9. jedis.zinterstore("com_friends:1000:2000", "user:1000:friends", "user:2000:friends");
  10. 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进行更全面分析统计)

  1. if(!jedis.exists("user:1000:comment")){//还没有评论
  2. jedis.zadd("user:1000:comment", System.currentTimeMillis(), "uid为1000的评论内容");
  3. System.out.println(jedis.zrange("user:1000:comment", 0, -1));
  4. }else{
  5. //获取一分钟内的评论记录
  6. Set<String> result = jedis.zrangeByScore("user:1000:comment", System.currentTimeMillis() - 60 * 1000, System.currentTimeMillis());
  7. if(!result.isEmpty()){
  8. System.out.println("1分钟内不能评论两次");
  9. }else{
  10. jedis.zadd("user:1000:comment", System.currentTimeMillis(), "uid为1000的评论内容"+System.currentTimeMillis());
  11. System.out.println(jedis.zrange("user:1000:comment", 0, -1));
  12. }
  13. }

5. 用户Timeline/Feeds

  应用于关注的人、主题、品牌及专栏,redis在这边主要当作cache使用

  1. jedis.zadd("user:2000:feed:topic", System.currentTimeMillis(), "13topic" + System.currentTimeMillis());
  2. //score为timestamp uid为2000的用户关注tid为13的topic
  3. jedis.expire("user:2000:feed:topic", 10);
  4. //关注有效期为10秒
  5. System.out.println(jedis.zrange("user:2000:feed:topic", 0, -1));

6. 最新列表&排行榜

  用于记录用户刚刚喜欢的商品最新列表or排行榜 等业务场景

  1. jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "003");
  2. Thread.currentThread();
  3. Thread.sleep(10);
  4. jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "001");
  5. Thread.sleep(10);
  6. jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "004");
  7. Thread.sleep(10);
  8. jedis.zadd("user:1000:product:like", System.currentTimeMillis(), "002");
  9. Thread.sleep(10);
  10.  
  11. //默认喜欢时间升序排列
  12. Set<String> result = jedis.zrange("user:1000:product:like", 0, -1);
  13. System.out.println(result);
  14.  
  15. //按喜欢时间降序排列
  16. result = jedis.zrevrange("user:1000:product:like", 0, -1);
  17. System.out.println(result);
  1. [003, 001, 004, 002]
  2. [002, 004, 001, 003]

7. 消息通知

  采用Hash结构对消息通知业务场景计数

  1. //设置1条未读系统消息
  2. jedis.hset("user:1000:message:num", "sysmessagenum", "1");
  3. jedis.sadd("user:1000:message:content", "第一条未读信息");
  4. //未读系统消息+1
  5. jedis.hincrBy("user:1000:message:num", "sysmessagenum", 1);
  6. jedis.sadd("user:1000:message:content", "第二条未读信息");
  7. //查看所有消息通知数量
  8. System.out.println(jedis.hgetAll("user:1000:message:num"));
  9. //查看所有消息通知内容
  10. System.out.println(jedis.smembers("user:1000:message:content"));
  1. {sysmessagenum=2}
  2. [第二条未读信息, 第一条未读信息]

Redis在电商中的实际应用-Java的更多相关文章

  1. REDIS 在电商中的实际应用场景(转)

    1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等 ...

  2. TP5使用Redis处理电商秒杀

    本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...

  3. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...

  4. Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

    Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...

  5. SpringBoot+Neo4j在社交电商中,讲述你是怎么被绑定为下线的

    上两篇文章我们主要讲解了Neo4j的基本知识以及Neo4j的基本使用,这篇文章我们就以实例来深入的理解一下,我们以社交电商中的绑定关系为例,使用SpringBoot+Neo4j来实现. Neo4j文章 ...

  6. Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)

    Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...

  7. 电商中的库存管理实现-mysql与redis

        库存是电商系统的核心环节,如何做到不少卖,不超卖是库存关心的核心业务问题.业务量大时带来的问题是如何更快速的处理库存计算. 此处以最简模式来讨论库存设计. 以下内容只做分析,不能直接套用,欢迎 ...

  8. php+redis实现电商秒杀功能

    这一次总结和分享用Redis实现分布式锁来完成电商的秒杀功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意思,若有误请谅解 ...

  9. 使用Redis搭建电商秒杀系统

    背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而 ...

随机推荐

  1. Ambari部署时问题之Ambari Metrics无法启动

    首先,我的问题是如下: Traceback (most recent call last): File , in <module> AMSServiceCheck().execute() ...

  2. Android - 使用Volley请求网络数据

    Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...

  3. poj_2104: K-th Number 【主席树】

    题目链接 学习了一下主席树,感觉具体算法思路不大好讲.. 大概是先建个空线段树,然后类似于递推,每一个都在前一个"历史版本"的基础上建立一个新的"历史版本",每 ...

  4. [权限相关]在PeopleSoft中查找可以使用DataMover的用户

    DataMover是一个功能非常强大的工具,它的访问权限应该被控制,特别是在PRD环境中.在每个公司,许多用户可能在一段时间内切换部门,角色和职责,所以每隔一段时间就应该检查这些用户的权限,以确认他们 ...

  5. 微信小程序(一)基本知识初识别

    最近微信圈里小程序很火的样子,以前小程序刚开始的时候研究了一下,多日没关注发现一些东西都淡忘了,最后决定还是记录下来的好. 毕竟好记星比不上烂笔头嘛~ 另外有想学习小程序的同学,也可以参考下,当然如果 ...

  6. LeetCode题解 343.Integer Break

    题目:Given a positive integer n, break it into the sum of at least two positive integers and maximize ...

  7. kafka生产实践

    最近接触到一个APP流量分析的项目,类似于友盟.涉及到几个C端高并发的接口,这几个接口主要用于C端数据的提交.在没有任何缓冲的情况下,一个接口涉及到5张表的提交.压测的结果很不理想,主要瓶颈就在与RD ...

  8. 【bzoj2819】Nim

    Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...

  9. WordPress中函数钩子hook的作用及基本用法

    WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它.钩子分类 钩子分为两种,一 ...

  10. [补档][Usaco2015 Jan]Grass Cownoisseur

    [Usaco2015 Jan]Grass Cownoisseur 题目 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过? (一个点在路 ...