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对象。


5、多了1个空格:serviceCode.

  用户输入的字符串,多多trim比较好,用户体验更上一层楼。


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)疑难问题