文章目录
微服务详情
离线购物车
离线购物车:主要使用localstorage保存到客户端,几乎不与服务端交互
在线购物车
在线购物车:使用redis实现。利用redis实现可靠缓存服务
流程图
新增商品
· 判断是否登录
· 是:则添加商品到后台Redis中
· 否:则添加商品到本地的Localstorage
无论哪种新增,完成后都需要查询购物车列表:
再次判断是否登录
· 否:直接查询localstorage中数据并展示
· 是:已登录,则需要先看本地是否有数据,
- 有:需要提交到后台添加到redis,合并数据,而后查询
- 否:直接去后台查询redis,而后返回
新增之后记得修改购物车数量。
为什么使用redis
购物车是一个读写频率很高的数据。因此我们这里选择读写效率比较高的Redis作为购物车存储。
redis详情
Spring Data Redis详情
使用的是redis中的什么数据结构
存储结构
Redis有5种不同数据结构,这里选择哪一种比较合适呢?Map<String, List>
- 首先不同用户应该有独立的购物车,因此购物车应该以用户的作为key来存储,Value是用户的所有购物车信息。这样看来基本的k-v结构就可以了。
- 但是,我们对购物车中的商品进行增、删、改操作,基本都需要根据商品id进行判断,为了方便后期处理,我们的购物车也应该是k-v结构,key是商品id,value才是这个商品的购物车信息。
综上所述,我们的购物车结构是一个双层Map:Map<String,Map<String,String>>
- 第一层Map,Key是用户id
- 第二层Map,Key是购物车中商品id,值是购物车数据
购物车实体类
拦截器
因为很多接口都需要进行登录,我们直接编写SpringMVC拦截器,进行统一登录校验。同时,我们还要把解析得到的用户信息保存起来,以便后续的接口可以使用。
web本地存储主要有两种方式:
LocalStorage
- localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
localStorage语法
localStorage.setItem(“key”,“value”);// 存储数据
localStorage.getItem(“key”); // 获取数据
localStorage.removeItem(“key”); // 删除数据
SessionStorage
sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。