关于redis:Redis-实战-03-Redis-简单实践-Web应用
需要性能: P23登录 cookie购物车 cookie缓存生成的网页缓存数据库行剖析网页拜访记录高层次角度下的 Web 利用 P23从高层次的角度来看, Web 利用就是通过 HTTP 协定对网页浏览器发送的申请进行响应的服务器或者服务(service)。 Web 申请个别是无状态的(stateless),即服务器自身不会记录与过往申请无关的任何信息,使得生效的服务器能够很容易地被替换掉。 Web 服务器对申请进行响应的典型步骤: 服务器对客户端发来对申请(request)进行解析申请被转发给一个预约义的处理器(handler)处理器可能会从数据库中取数据处理器依据数据对模板(templete)进行渲染(render)处理器向客户端返回渲染后的内容作为对申请的响应(response)根底数值量 P24本次实际所有内容均围绕着发现并解决一个虚构的大型网上商店来开展的,一些根底数据量如下: 每天有 500 万名不同的用户每天有 1 亿次点击每天从网站购买超过 10 万件商品实现登录和 cookie 缓存 P24有两种常见的办法能够将登录信息存储在 cookie 外面: 签名(signed) cookie:通常会存储用户名,可能还会有其余网站感觉游泳的信息,例如:最初一次胜利登录工夫、用户 id 等。还会有签名,用服务器验证 cookie 中的信息是否被批改。令牌(token) cookie:存储遗传随机字节作为令牌,服务器依据令牌在数据库中查找令牌的领有着。随着工夫的推移,旧令牌会被新令牌取代。签名 cookie 和令牌 cookie 的长处与毛病 P24cookie 类型长处毛病签名 cookie验证 cookie 所需的所有信息都存储在 cookie 外面。cookie 能够蕴含额定的信息,并且对这些信息进行签名也很容易正确地解决签名很难。很容易遗记对数据进行签名,或者遗记验证数据的签名,从而造成安全漏洞令牌 cookie增加信息非常容易。 cookie 的体积十分小,因而挪动终端和速度较慢的客户端能够更快地发送申请须要在服务器存储更多信息。如果应用的是关系数据库,那么载入和存储 cookie 的代价可能会很高本次实际采纳令牌 cookie 来援用存储的用户登录信息的条目。除登录信息外,还须要将用户拜访时长和已浏览商品的数量等信息存储到数据库外面,便于将来通过剖析这些信息来学习如何更好地向用户采购商品。 应用一个哈希表来存储登录 cookie 令牌与已登录用户之间的映射,依据给定的令牌查找对应的用户 id。 P24 // redis keytype RedisKey stringconst ( // 登录用户 哈希表(field:token;value:userId) LOGIN_USER RedisKey = "loginUser" // 用户最近操作工夫 有序汇合 USER_LATEST_ACTION RedisKey = "userLatestAction" // 用户最近浏览商品工夫 有序汇合 前缀(存储 itemId 及浏览的工夫戳) VIEWED_ITEM_PREFIX RedisKey = "viewedItem:" // 用户购物车 哈希表 前缀(存储 itemId 及其加车数量) CART_PREFIX RedisKey = "cart:" // 申请返回值缓存 字符串 前缀(存储 申请对应返回值的 序列化串) REQUEST_PREFIX RedisKey = "request:" // 缓存数据距离(单位:ms) 字符串 ITEM_INTERVAL RedisKey = "itemInterval" // 数据缓存工夫(准确到毫秒) 有序汇合 ITEM_CACHED_TIME RedisKey = "itemCachedTime" // 数据(商品)的json 字符串 前缀(存储 itemId 的相干信息) ITEM_PREFIX RedisKey = "item:" // 商品浏览次数 有序汇合(存储 itemId 及浏览次数) ITEM_VIEWED_NUM RedisKey = "itemViewedNum")// 依据 token 获取 userId(err 不为 nil 时,用户已登录且 userId 无效)func GetUserId(conn redis.Conn, token string) (userId int, err error) { return redis.Int(conn.Do("HGET", LOGIN_USER, token))}此时咱们曾经能通过 token 获取用户 id 了,还须要相应的设置办法,即用户每次操作时都会进行相干信息设置,并更新 token 的最近操作工夫戳。如果用户正在浏览一个商品,则还须要将该商品增加到浏览商品历史有序汇合中,且限度一个用户最多记录最新的 25 个商品浏览记录。 P25 ...