简单来看,Web应用就是通过HTTP协议对浏览器发送的请求进行响应的服务。这种服务是无状态的,也就是服务器不会记录与请求有关的任何信息。
那么想要记录一些会话信息怎么做?Redis实现比MySQL更高效。

登录和cookie缓存

cookie一般由少量数据组成保存在客户端,这里浏览器每次发送请求的时候都会将这些数据传回给服务器端。对于用来登录的cookie,有两种常见的方法:

  1. 签名(signed) cookie

    • 一般会存储比较多的用户信息,如用户名,userId,最后登录时间等等;
    • 还包含一个签名,服务器用来判断这个cookie是否被改动;
  2. 令牌(token) cookie

    • 在cookie里存储一串随机字节作为令牌,服务器根据令牌在数据库里查找令牌的拥有者;
    • cookie体积很小,可以更快的发送请求,令牌存在有效期,新的会不断代替旧的;

Redis在这里可以接管MySQL查询token的任务,每次请求,查用户登录散列表里的信息,并且将最近查询时间更新;token如果失效,执行后端程序
重新生成token,并且同步到Redis用户登录散列表;

购物车的简单应用

cookie最初的意图就是为网络零售商提供一种购物车,让用户收集他们想要购买的商品。这么做虽然不用请求数据库,但是cookie的体积可能会比较大,影响处理速度。

Redis处理很简单,每个用户的购物车是一个散列,存储商品ID和商品订购数量之间的映射,对商品数量出现变化时对购物车及时更新,对于商品数量是否超库存这样的问题,下单的时候让后台程序去校验吧。

将购物车存储到Redis还有一个好处就是我们可以根据用户浏览过的商品,放入到购物车的商品以及用户最终购买的商品进行统计计算,并构建起很多大型电商都在提供的“商品推荐”等功能,可以精准推送商品。

网页缓存

在动态网页,一般用模板语言,对页面进行分割。对于某些页面不能被缓存,用redis来存储也是个思路。

数据进行缓存

对于一些秒杀和促销活动,网站是不能对页面进行缓存的,因为商品剩余数量需要及时更新,但从数据库查,扛不住这么大的负载。那么用redis对数据进行缓存是一种解决方式;
后端编写一个持续运行的守护进程函数,这个函数将制定的数据缓存到Redis里面,并不定期对这些缓存进行更新。