Redis构建Web应用
简单来看,Web应用就是通过HTTP协议对浏览器发送的请求进行响应的服务。这种服务是无状态的,也就是服务器不会记录与请求有关的任何信息。
那么想要记录一些会话信息怎么做?Redis实现比MySQL更高效。
登录和cookie缓存
cookie一般由少量数据组成保存在客户端,这里浏览器每次发送请求的时候都会将这些数据传回给服务器端。对于用来登录的cookie,有两种常见的方法:
签名(signed) cookie
- 一般会存储比较多的用户信息,如用户名,userId,最后登录时间等等;
- 还包含一个签名,服务器用来判断这个cookie是否被改动;
令牌(token) cookie
- 在cookie里存储一串随机字节作为令牌,服务器根据令牌在数据库里查找令牌的拥有者;
- cookie体积很小,可以更快的发送请求,令牌存在有效期,新的会不断代替旧的;
Redis在这里可以接管MySQL查询token的任务,每次请求,查用户登录散列表里的信息,并且将最近查询时间更新;token如果失效,执行后端程序
重新生成token,并且同步到Redis用户登录散列表;
购物车的简单应用
cookie最初的意图就是为网络零售商提供一种购物车,让用户收集他们想要购买的商品。这么做虽然不用请求数据库,但是cookie的体积可能会比较大,影响处理速度。
Redis处理很简单,每个用户的购物车是一个散列,存储商品ID和商品订购数量之间的映射,对商品数量出现变化时对购物车及时更新,对于商品数量是否超库存这样的问题,下单的时候让后台程序去校验吧。
将购物车存储到Redis还有一个好处就是我们可以根据用户浏览过的商品,放入到购物车的商品以及用户最终购买的商品进行统计计算,并构建起很多大型电商都在提供的“商品推荐”等功能,可以精准推送商品。
网页缓存
在动态网页,一般用模板语言,对页面进行分割。对于某些页面不能被缓存,用redis来存储也是个思路。
数据进行缓存
对于一些秒杀和促销活动,网站是不能对页面进行缓存的,因为商品剩余数量需要及时更新,但从数据库查,扛不住这么大的负载。那么用redis对数据进行缓存是一种解决方式;
后端编写一个持续运行的守护进程函数,这个函数将制定的数据缓存到Redis里面,并不定期对这些缓存进行更新。
原文作者: ybphp
原文链接: https://www.ybphp.com/2018/04/30/Redis构建Web应用/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)