说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构。

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}
[第二条未读信息, 第一条未读信息] Java开源生鲜电商平台-redis缓存在商品中的设计与架构(源码可下载),如果需要下载的话,可以在我的github下面进行下载。  
https://github.com/137071249/

群号:168096884

 
 
 

转载自-- https://www.cnblogs.com/jurendage/p/9181380.html

39、生鲜电商平台-redis缓存在商品中的设计与架构的更多相关文章

  1. Java生鲜电商平台-redis缓存在商品中的设计与架构

    Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...

  2. Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载)

    Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1.  代码层面. 2.  数 ...

  3. Java生鲜电商平台-高可用微服务系统如何设计?

    Java生鲜电商平台-高可用微服务系统如何设计? 说明:Java生鲜电商平台高可用架构往往有以下的要求: 高可用.这类的系统往往需要保持一定的 SLA,7*24 时不间断运行不代表完全不挂,而是有一定 ...

  4. Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计

    Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计   二者服务的对象不一样 目的也是不一样的 商品分类是为商品服务的 用来管理商品 商品类型是为扩展属性服务的 用来管理属性 举例:[转] ...

  5. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  6. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  7. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  8. Java生鲜电商平台-缓存架构实战

    Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个k ...

  9. Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

    Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 ...

随机推荐

  1. 【JavaScript学习整理】DOM对象(location history screen navigator)

    DOM: 描述网页各个组成部分之间的关系. parentNode: 父节点 childNode: 子节点 firstChild: 第一个子节点 lastChild: 最后一个子节点 nextSibli ...

  2. 算法(Algorithms)第4版 练习 1.3.2

    was best times of the was the it (1 left on stack)

  3. vc中调用Com组件的所有方法详解

    首先,对于Com组件的入门学习,可以看一下<Windows程序设计技术基础——MFC与.NET> 任哲编著的21世纪重点大学规划教材那本书,适合入门(虽然不一定会使用),了解些基础原理. ...

  4. jsp的9个内置对象

    Jsp提供了request.response.session.application.out.page.config.exception.pageContext9个内置对象. 1. Request R ...

  5. Cocos2d-x中手动构造Json::Value

    由于项目需要Json::Value 不是由服务器传送过来,而是自己手动构造. 带数组的json Json::Value items; for(int i=0,i<2;i++) { items[i ...

  6. appium-环境搭建(二)

    接着上一篇 1.基本的python环境 2.安装node.js,32位还是64位根据自己的系统来选择 3.安装.net framwork4.5 4.安装appium 安装完成后,运行appium.ex ...

  7. Selenium-百度登录简单例子

    实现: 百度web端登录,手动输入验证码 #! /usr/bin/env python #coding=utf-8 from selenium import webdriver import time ...

  8. 图的Tarjan算法

    “Tarjan有三种算法 你们知道吗”——Tar乙己 void tarjan(int x) { low[x]=dfn[x]=++ind; q[++top]=x;mark[x]=; for(int i= ...

  9. HTTP 协议入门(转载)

    作者:阮一峰 (@ruanyf) www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 ...

  10. window下git,TortoiseGit安装,以及和github托管项目

    下载地址:http://msysgit.github.io/,安装时最好是先装git,再安装TortoiseGit. 一.git安装 1.第一步 2.第二步 3.第三步 4.第四步 5.第五步 6.第 ...