Redis构建处理海量数据的大型购物网站

本系列教程内容提要

Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的相关问题,为了更方便的与大家一起探讨与学习,每个章节均提供尽可能详细的示例源码及注释,所有示例源码均可在javacourse-redis-in-action找到相关帮助!

什么是大型网站?

从技术上的角度来看,大型网站的实现是能够应对各种突发事件,能够处理海量数据等因素.... 这里我们抓住“处理海量数据”这一点来进行探讨学习。

何提高网站处理海量数据?

  • 减少用户请求体大小
  • 响应数据进行缓存

我们应该怎么做?

第一步:拒绝cookie,使用token令牌登录 github示例源码下载

Cookie是常见的记录用户会话的解决方案,但在某些场景下其并不适用,如前后端分离,如Cookie体积大时影响请求速率。

  • 用户发起操作请求
  • Redis校验是否拥有TOKEN令牌
  • 没有令牌跳转登录
  • 登录成功生成TOKEN保存至Redis
  • ......

Redis数据结构

核心源码

@RequestMapping("/register")
    public String register(User user, Model model) {
        userFactory.put(user.getUsername(), user);
        model.addAttribute("result", "注册成功!");
        return "RegAndLog";
    }

    @RequestMapping("/login")
    public String login(User user, Model model, @RequestParam(required = false) String token, HttpServletRequest request) {
        Boolean exists = jedis.exists("login:" + token);
        String clientIp = getClientIp(request);
        String url = getURL(request);
        if (!exists) {
            User result = userFactory.get(user.getUsername());
            if (result != null && user.getUsername().equals(result.getUsername()) && user.getPassword().equals(result.getPassword())) {
                /*将用户登录缓存到Redis*/
                String tokenUUID = UUID.randomUUID().toString();
                updateToken(jedis, tokenUUID, result, clientIp, url);
                /*获取用户的登录记录*/
                Set<String> IPList = jedis.zrange("recent:" + user.getUsername(), 0, -1);
                /*获取用户最新访问的页面*/
                Set<String> URLList = jedis.zrange("viewed:" + user.getUsername(), 0, -1);
                model.addAttribute("record", IPList);
                model.addAttribute("URLList", URLList);
                model.addAttribute("result", "登录成功!TOKEN为" + tokenUUID + ",30秒后过期.....30秒内可使用Token登录");
                return "RegAndLog";
            }
            model.addAttribute("result", "登录失败!");
            return "RegAndLog";
        }
        model.addAttribute("result", "使用Token登录成功!");
        return "RegAndLog";
    }

各位友友运行本小结源码:访问 http://localhost:8080/cookie/LogOrReg

第二步:拒绝cookie,使用Redis构造购物车 github示例源码下载

对于一个购物网站来说,购物车就是一个必不可少的功能,从长远来看对用户购物车的数据的统计与分析有利于进行大数据的分析,提高网站的营业额。但在服务端每次解析,校验,设置Cookie,会增加程序的响应时间。同样;随着Cookie体积的增大,也会增加用户请求时间,所以我们在Redis上进行包存购物车。

Redis数据接结构

核心源码

    @GetMapping("/addCart")
    public String addCart(Item item, Model model) {
        User user = getUser();
        addTOCart(jedis, user, item);
        Map<String, String> cart = getCart(jedis, user);
        model.addAttribute("result", "添加购物车成功!");
        model.addAttribute("cartList", cart);
        return "ProductList";
    }

各位友友运行本小结源码:访问 http://localhost:8080/cart/productlist.html

第三步:缓存网页数据,提高网页响应 github示例源码下载

对于我们网站的大多数网页,一般都很少改动,例如商品页面,商品的标题和商品的介绍基本上不会改动,但是商品的剩余数量你又不得不去数据库实时查询,这将会导致“用户每打开或刷新一次网页,你不得不去数据库查询一次数据”,对于一般的关系数据库数据库每秒处理200~2000上限,就成为了你网站的瓶颈所在。

Reids数据结构图

核心源码

    @RequestMapping("/testCacheForItem/{itemname}")
    public String testCacheForItem(Model model, @PathVariable(required = true, name = "itemname") String itemname) {
        /*模拟数据*/
        Item item = new Item(itemname, itemname + "这是商品的介绍" + itemname, new Random().nextInt(10));
        /*判断是否被缓存*/
        Boolean hexists = jedis.exists("cache:" + itemname);
        if (!hexists) {
            Gson gson = new Gson();
            String s = gson.toJson(item);
            jedis.set("cache:" + itemname, s);
            model.addAttribute("s", s);
            model.addAttribute("result", "第一次访问,已经加入Redis缓存");
            return "CacheItem";
        }
        String s = jedis.get("cache:" + itemname);
        model.addAttribute("s", s);
        model.addAttribute("result", "重复访问,从Redis中读取数据");
        return "CacheItem";
    }

各位友友运行本小结源码:访问 http://localhost:8080/cache/testCacheForItem/吃鸡神枪

本章小结

对于真正实现一个能处理海量数据的购物网站来说,我们做的实在是太简单了...是使用各种语言和工具的相互配置,程序逻辑的优化,才能构建出一个真正的能处理海量数据的网站。当然我们做的也不差....hhhh

原文地址:https://www.cnblogs.com/jimisun/p/10013602.html

时间: 2024-07-28 22:41:53

Redis构建处理海量数据的大型购物网站的相关文章

专注大型购物网站平台开发建设带微信,手机版

<ignore_js_op> <ignore_js_op> 服务器选择:  服务器购买地址:http://www.erduyun.com/services/cloudhost/域名购买地址:http://www.erduyun.com/services/domain/ [服务与售后]1.为了更好的为客户服务,我们实行全方位一条龙服务, 包括如下内容:   A.服务器.域名.支付.公众号等信息的准备,,我们全部搞定.   B.软件平台部署.测试.上线.   C.系统售后维护.   以

Python Flask 快速构建高性能大型web网站项目实战

Python Flask 快速构建高性能大型web网站项目实战视频[下载地址:https://pan.baidu.com/s/1cUggNbUvptYz5vvwBhsdrg ] 作为最最流行的Python Web开发的微框架,Flask独树一帜.它不会强迫开发者遵循预置的开发规范,为开发者提供了自由度和创意空间.突然发现这个对自动化运维开发非常有用,发上来,给大家! Python Flask 快速构建高性能大型web网站项目实战视频 project.zip 第1章 课程介绍1.1-1.2课程导学

大型分布式网站架构设计与实践

大型分布式网站架构设计与实践(一线工作经验总结,囊括大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案,有细节.接地气/京东:大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案) 陈康贤 著   ISBN 978-7-121-23885-7 2014年9月出版 定价:79.00元 460页 16开 编辑推荐 --作者一直奋战在阿里巴巴及淘宝网一线,书中所讲是其亲身经验的总结,显得更加实战和珍贵. --全面介绍大型分布式网站架构所涉及的技术细

redis实战笔记(2)-第2章 使用 Redis构建Web应用

第2章 使用 Redis构建Web应用 本章主要内容 1.登录cookie 2.购物车cookie 3.缓存生成的网页 4.缓存数据库行 5.分析网页访问记录 本章的所有内容都是围绕着发现并解决Fake Web Retailer这个虚构的大型网上商店来展开的, 这个商店每天都会有大约500万名不同的用户, 这些用户会给网站带来1亿次点击, 并从网站购买超过10万件商品. 我们之所以将Fake Web Retailer的几个数据量设置得特别大, 是考虑到如果可以在大数据量背景下顺利地 章列举的所有

大型分布式网站术语分析

1. I/O优化 增加缓存,减少磁盘的访问次数. 优化磁盘的管理系统,设计最有的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的. 设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的.例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度. 应用合理的RAID策略提升磁盘I/O. 2. Web前端调优 减少网络交互的次数(多次请求合并) 减少网络传输数据量的大小(压缩) 尽量减少编码(尽量提前将

大型分布式网站的技术需求

HBase是Apache Hadoop项目下的一个子项目,它以GoogleBigTabale为原型,设计实现了高可靠性.高可扩展性.实现读写的列存储数据库,他的本质实际上是一张稀疏的大表,用来存储粗粒度的结构化数据,并且能够通过简单地增加节点来实现系统的线性扩展. HBase运行在分布式文件系统HDFS之上,利用它可以在廉价PC Server上搭建.HBase集群中通常包含两种角色,HMaster和HRegion server,当表随着记录条数的增加而不断变大后,将会分成一个个Region.每个

css3购物网站商品文字提示实例

css3购物网站商品文字提示实例先来看效果图:<ignore_js_op> 当鼠标划过图片时,有着泰迪熊黑色长方形的背景就会出现.来看HTML5+CSS3代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>购物网站商品文字提示</title> <style type="te

大型分布式网站架构技术总结

本文是学习大型分布式网站架构的技术总结.对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考.一部分为读书笔记,一部分是个人经验总结.对大型分布式网站架构有很好的参考价值. 本次分享大纲如下 大型网站的特点 大型网站架构目标 大型网站架构模式 高性能架构 高可用架构 可伸缩架构 可扩展架构 安全架构 敏捷架构 大型架构举例 一.大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大

谈谈大型分布式网站架构技术总结

本文是学习大型分布式网站架构的技术总结.对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考 本文是学习大型分布式网站架构的技术总结.对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考.一部分为读书笔记,一部分是个人经验总结.对大型分布式网站架构有很好的参考价值.(如果感觉对大家有帮助,请帮忙点推荐,谢谢.本博客会逐步推出一系列的关于大型分布式网站架构,设计模式,架构模式方面的系列文章,交流群:466097527) 本次分