项目开发注意小计
内容纲要
id
分布式集群数据库id采vachar: 在分布式集群下,需要通过类似雪花算法做到id唯一
编写过程
dao -> service -> controller
cookie
cookie存储空间为4kb
以键值对的形式存储信息在浏览器
cookie不能跨域,当前及其父级域名可以取值
cookie可以设置有效期
cookie可以设置path
无需登录,无需查库,保存在浏览器端
优点:性能好,访问快,没有和数据库交互
缺点1:换电脑购物车数据丢失(未登录情况下)
缺点2:电脑被其他人登录,隐私安全
session
基于服务器内存的缓存(非持久化) , 可保存请求会话
每个session通过sessionid来区分不同请求
session可设置过期时间
session也是以键值对的形式存在
用户登录后,购物车数据放入用户会话中
优点:初期性能较好,访问快
缺点1:session基于内存,用户量庞大影响服务器性能
缺点2:只能差在于当前会话,不适合集群与分布式系统
cookie与session
在后端设置了session之后,分离式的前端中的cookie会有一个一个sessionid,之后的每一个请求中的session都会携带这个sessionid
数据库
用户登录后,购物车数据存入数据库
优点:数据持久化,可在任何地点任何时间访问
缺点:频繁读写数据库,造成数据库压力
redis
用户登录后,购物车数据存入redis缓存
优点1 :数据持久化,可在任何地点任何时间访问
优点2 :频繁读写只基于缓存,不会造成数据库压力
优点3 :适用于集群与分布式系统,可扩展性强
slf4j
日志级别 debug,error,warn,info springboot默认为info,debug级别控制台不能打印输出
生产环境关闭sql的日志打印
电商项目价格以分为单位
二维码生成
jquery.qrcode 生成二维码
分布式集群项目定时任务
使用定时任务关闭超期未支付订单,会存在的弊端:
1. 会有时间差,程序不严谨
10.39下单,11:00检查不足一个小时,12:00检查,超过1小时多余39分钟
2. 不支持集群
单机没问题,使用集群后,就会有多个定时任务
解决方案:只使用一台计算机节点,单独运行所有的定时任务
3. 会对数据库全表搜索,极其影响数据库性能: select * form order_status where orderStatus = 10
定时任务,仅仅适用于小型轻量级项目,传统项目
消息队列: MQ ->RabbitMQ,RocketMQ,Kafka,ZeroMQ...
延时任务(队列)
10.12分下单,未付款(10)状态,11:12分检查,如果当前状态还是10,则直接关闭订单状态即可
共有 0 条评论