Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第236p-第p247的内容
介绍

记得整合OpenFeign来进行远程调用或被别人远程调用


把static路径下的文件通过nginx映射到/usr/share/nginx/html




自己的端口和配置连接的nacos信息

开启服务的注册发现功能 @EnableDiscoveryClient

开启服务的远程调用功能@EnableFeignClients

在网关添加路由规则
根据路径映射到达虚拟机 在通过nginx转发给网关,再由网关找到我们的服务

业务编写
进入页面

离线购物车


还有一些复杂功能,如展示降价信息,优惠信息等

因为购物车是属于读写都很多的数据 所以使用文档型数据库好一些,如mongodb(性能不会带来太大的提升) 这里我们使用的是redis

因为redis默认数据是存在内存中的,所以宕机的时候购物车数据会消失,这里指定redis的持久化策略,来使数据持久化,这样虽然损失了一部分的性能,但是性能还是比mysql要高很多

临时购物车用localstrage,优点:后台压力小,缺点:无法通过大数据分析出当前用户喜欢的东西,无法定制化推荐
所以临时购物车这里也存到了redis里,但是注意离线存在redis可能会被攻击



用数组类型进行保存,缺点:修改时无法快速找到,需要遍历循环才能找到对应的商品进行修改



这里我们使用hash类型进行保存 (相当于 java 的 map)




这里的总价是通过单价和数量动态计算出来的,所以这里我们自定义一个get方法,防止被覆盖把@Data去掉






这里把set方法全都去掉





ThreadLocal用户身份鉴别








ThreadLocal同一个线程可以共享数据

这个是jsk1.8前是这样的,jdk1.8改成了thredlocal作为key



threadlocal好处就是线程结束了就没了,放session里太占空间 threadlocal不需要手动释放

拦截器不能只放在容器中(@Component注解放在容器中),需要进行配置



/** 所有请求









页面编写


ctrl + alt + m 快速抽取方法 也可以使用右键进行抽取









这里的设计有一些漏洞,如果商品的价格发生变化了,redis缓存中的数据会产生数据不一致问题,我设计的话 只在redis里存店铺ID,商品ID,skuID,数量,加入时间,最新修改时间,以及当前价格(方便以后提示是否降价等信息),然后去数据库或es里查询这些商品的最新信息

这里的错误提示是因为这里可能会修改 所以必须是final类型才可以,否则异步信息会报错



防止误刷新页面新添加商品到购物车(解决重复提交),这里做了个重定向




重定向不可能带model数据,转发才有
转发和重定向的区别
转发:是指服务器接收到一个请求后,将请求转发给另一个资源进行处理,并将该资源的处理结果返回给客户端。在这个过程中,转发后的资源对客户端是不可见的,客户端只知道自己访问了一个资源,而不知道这个资源是被转发到的。
重定向:是指服务器接收到一个请求后,发现该请求需要访问另一个资源才能得到响应,于是告诉客户端重新发送一个请求,访问另一个资源。在这个过程中,客户端会重新发送一个请求,访问另一个资源,因此客户端会知道自己访问了两个资源。
转发对客户端是不可见的,而重定向对客户端是可见的。转发比重定向快。转发只需要发送一次请求,而重定向需要发送两次请求。转发是服务器内部的处理机制,客户端不需要进行任何处理。
转发可以访问相对路径和绝对路径的资源,而重定向只能访问绝对路径的资源。因为转发是在服务器内部进行的,可以访问相对路径和绝对路径的资源。而重定向是在客户端进行的,只能访问绝对路径的资源。
离线和登录进行合并



es的优势才是查询 redis的优势是快


这里check==1就行了 没必要三元运算


本文详细介绍了Java项目《谷粒商城》的架构实践,涉及OpenFeign远程调用、Nacos服务注册、Redis数据存储、ThreadLocal用户身份管理、拦截器配置和页面开发技巧等内容。特别强调了如何解决数据一致性问题及离线登录与在线功能的融合,以及ES和Redis在不同场景下的优势应用。
381

被折叠的 条评论
为什么被折叠?



