1、 jsf RPC接口, retry重试改为3 timeout改为1000。
add添加类,必须保证幂等才行,增加 唯一标志。
疑惑:add等非幂等接口,如果add1次,sql执行成功,但是接口超时,调用方如果再重试,会重复添加数据。
我司的jsf,貌似没有这种功能。调用方,必须传1个唯一标志参数才行。
2、save、add、update方法。
对外一般用save,根据id是否为null,来判断 是执行add还是update。
如果个人习惯用add和update,那么update方法里必须检验是否有id等条件,add是否有必要检查id为null呢?
3、打印日志,不能太少,也不要太多
只有预发环境,用来做测试。
log太少非常不方便调试,但是log太多,比如总是完整输出 list集合的所有内容,满屏都是对象,没有必要。
打印list的size就可以了。
4、Apache Commons BeanUtil copy对象。
参考:https://blog.csdn.net/FansUnion/article/details/82708226
5、多了1个空格:serviceCode.
用户输入的字符串,多多trim比较好,用户体验更上一层楼。
参考:https://blog.csdn.net/FansUnion/article/details/82708162
6、数据库 比 ES中的数据多了。
分页查询 数据库,同步到 ES中。
7、ES比数据库中的数据多了。
分页查询ES,判断是否存在数据库中,如果为否,标记为false,返回到页面或者 打印一条日志,标记出 ES对象中id就行了。
8、ES分页,1万条和深度分页。
ES默认只能查询1万条,项目中pageSize为20,最多支持500页。
到了501页之后,就需要深度分页。项目中的深度分页,性能较差,70万条数据,分页到最后1页,需要5秒左右。
最初以为 深度分页代码有问题,后来发现是 超时了,修改jsf超时为5秒,就能查询出结果了。
另外,还存在1个bug,第501访问失败。
原因:pageSize * pageNum > 10000,走深度分页;否则,牵度分页。
但是,web端传的501,被转换为ES的500,ES分页从0开始。
这样第501页,就变成了 500 * 20 > 10000,走浅度分页,但是ES却查询超过了1万条数据,报错。
修改判断逻辑为: (es的pageSize+1) * pageNum。
9、批量删除
项目中,db和es的数据有多余的,需要手动调用接口,批量删除一下。
先用数据库工具查询,需要删除的,select * from ...where isdelete=1;
写个java脚本,调用http批量删除。
array idArray = { 从db查询};
for(id in idArray){
http post,deleteById(id); //
}
web端的deleteById方法,如果需要登录,需要带上 关键的Cookie。如果没有,就不需要。
10、线上和预发,共用1个Redis。
遇到一个缓存(Reids)疑难问题