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

时间:2022-08-28 13:29:53

第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实战笔记(2)-第2章 使用 Redis构建Web应用
案例:
使用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. CoreData

    之前在学习使用SQLite时, 需要编写大量的sql语句,完成数据的增删改查,但对于不熟悉sql语句的开发人员来说,难度较大,调试程序比较困难. 由此出现CoreData框架,将sql的操作转换成为对 ...

  2. 【php】使用gdb调试php程序

    1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如d ...

  3. 利用C&num;Marshal类实现托管和非托管的相互转换

    Marshal 类 命名空间:System.Runtime.InteropServices 提供了一个方法集,这些方法用于分配非托管内存.复制非托管内存块.将托管类型转换为非托管类型,此外还提供了在与 ...

  4. Flex读文本文件

    布局: <s:Group id="> <s:Rect width="100%" height="100%"> <s:fi ...

  5. Girls&&num;39&semi; research&lpar;manacher&rpar;

    Girls' research Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  6. 【java】关于java类和对象,你想知道的在这里!

    java类的基本组成 java作为一门面向对象的语言, 类和对象是最重要的概念之一,下面,就让我们来看看java中类的基本结构是怎样的: 一个简单的java类主要可由以下几个部分(要素)组成: 1.实 ...

  7. 手把手教你在Windows环境下升级R

    在Windows环境下,我们可以使用installr包自动将R升级到最新版本.并且可以安装软件.下面主要演示如何在Windows环境下升级R,并将旧版本安装的R包复制到更新版本的R. 1.加载inst ...

  8. HTML5 classList API接口

    原文地址:HTML5 classList API 原文日期: 2010年07月13日 翻译日期: 2013年08月23日 当我陷入JavaScrip和JavaScript类库框架之中时,我总是有种希望 ...

  9. wepy项目创建

    全局安装wepy npm install wepy-cli -g 创建项目 wepy init standard mywepy 安装依赖 npm install 实时编译 wepy build --w ...

  10. Java中Json字符串直接转换为对象&lpar;包括多层List集合&rpar;

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...