第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反射中的动态代理机制(有实例)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  2. [leetcode] 21. Implement strStr()

    这个题目是典型的KMP算法,当然也可以试试BM,当然有关KMP和BM的介绍阮一峰曾经写过比较好的科普,然后july也有讲解,不过那个太长了. 先放题目吧: Implement strStr(). Re ...

  3. 使用Linq对Hashtable和Dictionary<T,T>查询的效率比较

    近期做版本迭代任务,有一个在店铺头部展示店主所在的城市名称和省份名称的需求,店主信息表中保存了店主所在的城市Id和省份Id,由于原有业务复杂,要尽量减少Sql执行时间,所以不考虑join城市地区详细表 ...

  4. jenkins调用本地搭建sendmail邮件服务器发送邮件

    应用jenkins发送邮件的邮件服务器 SMTP server 可以是本地的,也可以是远程,远程的就不多说了,在此说一下如何在jenkins本地服务器上搭建邮件服务器,并用jenkins发送邮件,详细 ...

  5. ABP框架中微服务跨域调用其它服务接口

    AjaxResponse为ABP自动包装的JSON格式 /// <summary> /// 通过地址和参数取得返回OutPut数据 /// </summary> /// < ...

  6. dorado-SplitSpanel控件

    1.这是一个界面布局控件 2.分为SideControl边区域和MainControl主区域 3.常用属性 3.1 collapsed:打开页面时,边区域是否显示 3.2 position:边区域占总 ...

  7. shiro之深度解析FormAuthenticationFilter

      shiro是我们在项目经常使用到的权限管理框架,本文我们就重点来分析FormAuthenticationFilter的验证过程. FormAuthenticationFilter 1.继承结构   ...

  8. cassandra用户名和密码的设置

    设置Cassandra使用用户名和密码验证的步骤如下: 1.修改${CASSANDRA_HOME}/conf/cassandra.yaml,把authenticator: AllowAllAuthen ...

  9. Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用

    关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...

  10. 初次学习Vue,输出Hello Vue!

    Vue.js作为目前比较流行的js框架,而我却迟迟没有接触,深感不安! 使用vue之前先要下载vue.js文件,然后在html里面导入vue.js文件,下面试着输出"Hello Vue!&q ...