项目一:公司业务是一家股票公司,要求股民上传信息给客服,客户批量上传到系统中,各个公司的成员进行对接
责任描述:整个项目独立
开发项目难点:
(1).项目中客服成员聊天系统
(2).成员对接数据不可重复
(3).权限管理
(4).接口安全
解决方案:
(1).聊天系统使用的是 layui 中的 layim 由于 layim 没有很多技术支持,踩了不少坑,包括数据库表中成员客服 1 多对多关系
(2).成员数据重复我的方案是使用 redis 加文件锁,redis 防止成员正在对接的时候停电,回来还可以继续对接本条数据,如果超过 3 小时掉线,数据恢复自由,文件锁是防止两个人同时对接一条数据
(3).接口安全,因为使用前后端分离,我将登陆状态存到了 redis 中,使用自己封装的 token 进行请求识别用户,一开始用的 jwt 进行操作,后发现 uuid 也比较方便使用 uuid 进行封装 token。
项目二 功能站 昂昂商贸
项目描述:昂昂商贸是一家石家庄中介公司,这个功能站点用于给河北省第二医院, 第三医院,中医院等各大医院发放中秋节等节日礼品,有特殊礼品限时件数,礼品发放只有 1 天时间所以要求不能宕机不能并发!
1.责任描述:
(1).数据库的搭建,redis 的搭建;
(2).后台搭建,前端 ajax 渲染
2.项目难点:
(1).在某一时刻礼品领取量可能会很大尤其为中午时间段,要实时监控
(2).批量生成领取码,不能重复,分批次生成领取码要为两位字母+4 数字
(3).Redis 秒杀机制配合数据库锁机制
(4).避免人数同时进行写入,查询功能出现问题
3.解决方案:
(1).生成领取码操作的时候,先进行过滤环节,和数据库进行对比操作, 用到了 JAVA 中的 map 处理方式进行代码过滤,后续使用一个循环进行取值,将复杂程度降低了千万倍,操作发现 isset 函数比 in_array 函数效率快
(2).Redis 秒杀机制,与其说秒杀不如说防止库存超量,后台设置奖品数量, 操作 redis 进行限制人数,存储 id,秒杀结束后,保持 redis 优先级队列先进先出的方式进行入库
(3).为了避免数据集中写入导致数据库查询出现错乱,一开始是用悲观锁, 冒着一定会出问题的心态使用悲观锁后,发现悲观锁只有提交后才可以执行,导致数据大量人数等待,后续使用读写分离数据库,主数据进行写,从进行读