1、Java开发中避免繁琐后端验证
验证使用validate +正则
2、不用redis也可以进行缓存
loadingcache guava的本地缓存
3、代码整洁规范
服务之间互相调用使用到的bean,创建到common二方库,所有人引用的jar
dao层不输出日志
service层输出日志,异常往上抛出
controller层将所有异常转换为状态码
4、短信验证 , 不能无限制发短信
三档验证 乌云检测
图形化验证
黑白名单,白名单用于测试,不走短信接口
5、常用,不变的,用缓存,不要什么都DB
开发中IO是瓶颈:网络IO 磁盘IO ,肯定比CPU慢多了,优化就是减少IO
6、一个任务,可以用多线程完成,估算线程数:
2核 开几个线程
线程数=cpu可用核数/1-阻塞系数(io密集型接近1,计算密集型接近0)
7、提升QPS:
提高并发数:多线程能用则用,增加各种连接数(mysql,redis等连接数)
服务无状态,便于横向扩展
让服务能力对等,打乱serviceUrl顺序
8、减少响应时间:
异步,流量削峰
缓存 (减少db 减少磁盘IO ,适合于读多 写少)
数据库优化
多的数据,分批次返回
微服务中减少调用链(如果某个服务被其他服务用的特别少,没有必要独立成单独服务,减少服务调用事件发生)
需要的情况下用长连接sse websocket netty ,不要轮询
9、微服务登录
用户请求---api业务层---1、调用验证码service
---2、调用发送短信模块
10、生成6位验证码
String code = String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, 5)));// 数字运算 效率比字符串高
11、短信模板 缓存到内存,为什么不缓存到redis?
减少redis网络IO ,模板数据量比较小
如何估算内容占多少内存?复制到txt保存,右键看属性
假如一个短信模板占81B,10个占1k,10*1024才1M ,放内存比较好,即快又能减少网络IO
12、短信验证码先发还是先存redis? 如果先发,结果没有存,就有问题。应该是先存再发,即使用户没收到,可以再次获取
13、token要不要存服务端?要的,否则无法主动控制用户请求状态
redis存token等信息,要定好前缀 用来区分不同场景
token存header里的Authorization
微服务内部调用不用鉴权
外部流量过来,通过网关鉴权
多个过滤器,通过前一个过滤器设置某些值,控制后面过滤器是否执行
14、多处互踢:
security 防用户重复登录 ,只能踢掉session ,但token还在redis ,不刷新页面时,可以继续访问
token一旦消失,访问时会自动打到login
解决方法:
security控制session并发数
每次登录成功,将当前username token与redis里对比(我这里生成token时加入了username,也可以对比其他的唯一值)
找出包含username,并且不是当前token的token,删掉。前一个用户就被挤掉了
15、yapi 接口管理神器 swagger ,自行百度常用接口管理插件框架
16、nginx
nginx同款中间件
作为容器,可以使用tomcat IIS Apache nginx ,当然还可以选择tengine 增强版nginx,推荐linux系统使用