第2章 使用 Redis构建Web应用

本章主要内容
 
1.登录cookie
2.购物车cookie
3.缓存生成的网页
4.缓存数据库行
5.分析网页访问记录
 
本章的所有内容都是围绕着发现并解决Fake Web Retailer这个虚构的大型网上商店来展开的, 这个商店每天都会有大约500万名不同的用户, 这些用户会给网站带来1亿次点击, 并从网站购买超过10万件商品。 我们之所以将Fake Web Retailer的几个数据量设置得特别大, 是考虑到如果可以在大数据量背景下顺利地
 
章列举的所有解决方案(以及它们的一些变种) 都在生产环境中实际使用过。 说得更具体一点, 通过将传统数据库的一部分数据处理任务以及存储任务转交给Redis来完成,
 

 
2.1 登录和cookie缓存
每当我们登录互联网服务(比如银行账户或者电子邮件) 的时候,这些服务都会使用cookie来记录我们的身份。 cookie由少量数据组成,网站会要求我们的浏览器存储这些数据, 并在每次发送请求时将这些数据传回给服务。
对于用来登录的cookie,
有两种常见的方法可以将登录信息存储在cookie里面:
一种是签名( signed) cookie,
另一种是令牌( token) cookie。
 
签名 cookie通常会存储用户名, 可能还有用户 ID、 用户最后一次成功登录的时间, 以及网站觉得有用的其他任何信息。 除了用户的相关信息之外, 签名 cookie还包含一个签名, 服务器可以使用这个签名来验证浏览器发送的信息是否未经改动(比如将cookie中的登录用户名改成另一个用户) 。
 
令牌 cookie会在cookie里面存储一串随机字节作为令牌, 服务器可以根据令牌在数据库中查找令牌的拥有者。 随着时间的推移, 旧令牌会被新令牌取代。
 
案例:
使用Redis重新实现登录cookie功能, 取代目 前由关系数据库实现的登录cookie功能。
 
1.一个散列来存储登录cookie令牌与已登录用户之间的映射
2.用户每次浏览页面的时候, 程序都会对用户存储在登录散列.里面的信息进行更新, 并将用户的令牌和当前时间戳添加到记录最近登
录用户的有序集合里面; 如果用户正在浏览的是一个商品页面, 那么程序还会将这个商品添加到记录这个用户最近浏览过的商品的有序集合里面, 并在被记录商品的数量超过25个时, 对这个有序集合进行修剪。
3.因为存储会话数据所需的内存会随着时间的推移而不断增加, 所以我们需要定期清理旧的会话数据
 
2.2 使用 Redis实现购物车
将购物车的信息也存储到Redis里面, 并且使用与用户会话cookie相同的cookie ID来引 用购物车。
 
2.3 网页缓存
 
2.4 数据行缓存
为了应对促销活动带来的大量负载, 我们需要对数据行进行缓存,具体的做法是: 编写一个持续运行的守护进程函数, 让这个函数将指定的数据行缓存到Redis里面, 并不定期地对这些缓存进行更新(热点缓存?)
 
2.5 网页分析
有序集合排序
 
 
 

redis实战笔记(2)-第2章 使用 Redis构建Web应用的更多相关文章

  1. java并发编程实战笔记---(第五章)基础构建模块

    . 5.1同步容器类 1.同步容器类的问题 复合操作,加容器内置锁 2.迭代器与concurrentModificationException 迭代容器用iterator, 迭代过程中,如果有其他线程 ...

  2. redis实战笔记(10)-第10章 扩展Redis

    本章主要内容   扩展读性能 扩展写性能以及内存容量 扩展复杂的查询   随着Redis的使用越来越多, 只使用一台Redis服务器没办法存储所有数据或者没办法处理所有读写请求的问题迟早都会出现, 这 ...

  3. redis实战笔记(6)-第6章 使用 Redis构建应用程序组件

    本章主要内容   1.构建两个前缀匹配自 动补全程序 2.通过构建分布式锁来提高性能 3.通过开发计数信号量来控制并发 4.构建两个不同用途的任务队列 5.通过消息拉取系统来实现延迟消息传递 6.学习 ...

  4. redis实战笔记(4)-第4章 数据安全与性能保障

    本章主要内容 4.1 将数据持久化至硬盘 4.2 将数据复制至其他机器 4.3 处理系统故障 4.4 Redis事务 4.5 非事务型流水线( non-transactional pipeline) ...

  5. redis实战笔记(3)-第3章 Redis命令

    第3章 Redis命令   本章主要内容 字符串命令. 列表命令和集合命令 散列命令和有序集合命令 发布命令与订阅命令 其他命令   在每个不同的数据类型的章节里, 展示的都是该数据类型所独有的. 最 ...

  6. redis实战笔记(1)-第1章 初识Redis

    第1章 初识Redis 注:本书在redis3.0版本的,比如redis3.0以后支持服务端集群.3.0之前只能客户端分片.    本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Re ...

  7. Redis学习笔记(二) ---- PHP操作Redis各数据类型

    Redis 一.使用PHP操作Redis存储系统中的各类数据类型方法 1.String(字符串)操作 <?php // 1. 实例化 $redis = new Redis; // 2. 连接 r ...

  8. Redis学习笔记(一)Windows下redis的安装和启动

    在Windows上安装redis 下载地址:https://github.com/microsoftarchive/redis/releases 选择图中红框标出来的下载,解压到磁盘上,文件夹命名为r ...

  9. redis实战笔记(9)-第9章 降低内存占用

    本章主要内容   1.短结构( short structure) 2.分片结构( shared structure) 3.打包存储二进制位和字节   本章将介绍3种非常有价值的降低Redis内存占用的 ...

随机推荐

  1. java web 通过前台输入的数据(name-value)保存到后台 xml文件中

    一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...

  2. Linux Mint 楷体问题

    很多人都遇见过刚装完的 Linux Mint 界面字体是黑体,然后莫名其妙就变成楷体的问题. 先不说技术层面的原因,只说怎么解决. 造成这种情况,多数是安装输入法或其他某种软件的时候,同时安装了 AR ...

  3. 如何将Jenkins multiline string parameter的多行文本优雅的保存为文件

    [现象]: 使用multi-line string parameter获取的文本变量,在jenkins shell里面显示为单行文本(空格分割). [问题]:能否转换为多行文本,并存入文件. [解决方 ...

  4. ASP.NET MVC Ajax 伪造请求

    1.前言 CSRF(Cross-site request forgery)跨站请求伪造,ASP.NET MVC 应用通过使用AJAX请求来提升用户体验,浏览器开发者工具可以一览众山小,就很容易伪造了请 ...

  5. ASP.NET Core学习总结(1)

    经过那么长时间的学习,终于想给自己这段时间的学习工作做个总结了.记得刚开始学习的时候,什么资料都没有,光就啃文档.不过,值得庆幸的是,自己总算还有一些Web开发的基础.至少ASP.NET的WebFor ...

  6. 错误:Parameter '0' not found.Available parameters are [arg1, arg0, param1, param2]的解决方法

    调用的方法: List<Card> temp = cardService.queryRepeat(Type,shop); xml: <select id="queryRep ...

  7. window10下Docker安装

    首先window版本必须是10,如果是win7那么安装方法有所不同,win10是官方支持安装的.笔者安装的是Community社区版,版本信息如下: 1.去docker官网下载win10安装包: ht ...

  8. mybatis的dao向mapper.xml传入多参数

    https://www.cnblogs.com/super-chao/p/7722411.html 如果两种不同类型的参数传入,parameterType可以不写,直接获取#{0},#{1}就可以传入 ...

  9. 891. Sum of Subsequence Widths

    Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the  ...

  10. OpenCV --- 实现两幅图像并排合并(ROI)

    Mat img1 = imread("1.png"); Mat img2 = imread("2.png"); int height = img1.rows; ...