时景重复点赞问题排查及解决方案

1. 黄海龙官赞了2次

2016/7/5 9:12:31
2016/7/5 9:13:17

相隔时间 45784ms 约45s

2. 明侠赞了6次,
2016/7/5 6:33:12
2016/7/5 7:16:9
2016/7/5 7:30:18
2016/7/5 9:3:48
2016/7/5 9:4:3
2016/7/5 13:55:12

第1次和第2次时间间隔:2577425ms 约 2577s 约43min,
第2次和第3次时间间隔:848283ms 约 848s 约 14min
第3次和第4次时间间隔:5609891ms 约 5609ms 约 93min
第4次和第5次时间间隔:15780ms 约15s
第5次和第6次时间间隔:17468253ms 约 291min

3.(1)通过点赞的时间间隔,可以排除因为并发问题 ,而导致点赞重复这种可能

排除并发问题之后:
4.(1)为什么会有重复点赞?
a. 从redis里面校验的时候,redis返回的是false,所以点完赞后,还可以继续点赞(主要原因)
b. picture_praise表中 sns_id picture_id三个字段应该设置成唯一key(这个非主要原因)

(2)为什么点赞之后,再次从redis校验的时候,redis会返回false(即用户没有点过赞)
没有存入到redis
数据存入到redis之后,丢失了,或者失效了。但是赞的时间是今天上午,这种情况基本可以排除

(3)为什么没有存入到redis ?
a. redis满了,没有存入,这种可能性有,但是很小

b. 在加入redis之前有一个判断
SimpleDateFormat YYYYMMDD_FORMAT = new SimpleDateFormat("yyyyMMdd");
final String yearAndMonthAndDay = YYYYMMDD_FORMAT.format(pictureCreateTime);
if (Long.parseLong(yearAndMonthAndDay) >= newStartDay){
才存入redis

查了一下图片的create_time是1395458758000,这个数和上面的比较, 返回的是false。
初步判断,问题就在这里了

(4)create_time 和 newStartDay比较为什么会返回false
create_time 是1395458758000L 转换之后是2014/3/22 11:25:58 小于redis的最小时间20140723,所以返回false,点完赞之后,就不能存入redis

(5)为什么时间大于20140723,才能存入redis????

因为在0723之前,是否赞过是存在mongo里面,所以会加0723判断

但是,判断是否赞过的时候,就算图片创建日期在2014-07-23之前,也没有从mongo里面查是否赞过

5.解决方案
存redis的时候,
(1)如果图片创建日期在2016-06-09之后,逻辑不变
(2)创建日期在 2014-07-23之前逻辑不动
(3)其余情况,按创建日期在2016-06-09之后的逻辑走,即分5段
判断是否赞过,也需要添加

时间: 2024-10-12 10:48:27

时景重复点赞问题排查及解决方案的相关文章

时景某些用户不能发表评论解决方案

1.new_comment接口,有一个权限过滤 <bean id="authenticationFilter" class="com.moji.core.framework.common.filter.AuthenticationFilter"> <property name="sessionIdService" ref="sessionIdService"></property> <

防止重复发送Ajax请求的解决方案

防止重复发送Ajax请求的解决方案 这篇文章主要介绍了防止重复发送Ajax请求的解决方案,感兴趣的小伙伴们可以参考一下 在页面中有多个按钮,点击该按钮可以异步的去服务端读取数据,然后在前端将数据展示出来. 每个按钮点击请求的页面都是同一个,但是请求的参数不同,所以返回的内容就不同. 在连续点击多个按钮的时候就会发出多个异步请求.那么根据请求返回的快慢(因为不同按钮参数不同,返回内容不同,所以会有快慢之分),数据会依次的展示出来,那么就会出现一个先点击的按钮,由于他请求的数据量比较大,导致数据被后

SSAS &amp; Excel BI Tips番外篇之四:处理时找到重复的属性键、找不到属性键

这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度表的关键字段,也就是通常讲的主键,是必须具有唯一性的,如果因为维度主键字段出现重复键,真没什么好说的了,太不应该犯这种错误,所以通常大家看到这个处理异常信息都是因为一个非主键属性,例如[Dim Customer]维度里的[Education]属性,和主键[Customer Key]是一对多的关系,Educat

R连接Mysql时,中文显示为问号的解决方案

1.打开Mysql安装目录下的my.ini文件,将其中的default-character-set= 均设置为GBK 2.在管理工具——数据源(ODBC)中将创建好的数据源作如下设置: R连接Mysql时,中文显示为问号的解决方案

如何解决源码安装软件中make时一直重复打印configure信息

在通过源码安装软件时,会出现执行./configure后再make时总是重复打印configure的信息,无法进入下一阶段的安装. 主要原因是系统当前的时间与实际时间不一致,特别是在虚拟机上经常会出现这样的情况,可以通过date命令查看当前系统时间. 解决方法: 通过ntp更新一下时间再进行make安装:ntpdate 1.cn.pool.ntp.org (服务器地址选一个可以用的即可)

Netty中使用MessagePack时的TCP粘包问题与解决方案

[toc] Netty中使用MessagePack时的TCP粘包问题与解决方案 通过下面的实例代码来演示在Netty中使用MessagPack时会出现的TCP粘包问题,为了学习的连贯性,参考了<Netty权威指南>第7章中的代码,但是需要注意的是,书中并没有提供完整代码,提供的代码都是片段性的,所以我根据自己的理解把服务端的代码和客户端的代码写了出来,可以作为参考. 仍然需要注意的是,我使用的是Netty 4.x的版本. 另外我在程序代码中写了非常详细的注释,所以这里不再进行更多的说明. 在使

【转】Windows10删除文件时却提示文件不存在的解决方案

Windows10系统使用一段时间后用户都会定期进行删除清理系统垃圾,减少系统盘的容量占用,但在删除的过程中许多用户都有可能遇到无法删除的情况,如下为删除文件时却提示文件不存在的解决方案. 1.新建一个记事本文件,并输入以下内容: DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 2.保存文件,并修改扩展名为.bat,此处把文件命名为:"delete.bat",方便记住操作方法. 3.把要删除的文件(hap),拖动到上一步创建的文件(delete.bat)上即可删

docker log: containerid-json.log 文件disappear,问题排查及解决方案

问题排查: 运行 #docker info 查阅资料,知道了docker的logging driver相关理论:https://docs.docker.com/engine/admin/logging/overview/ 在此之前,这台机器被同事做过重置,所以docker也重新下载并是最新的版本 1.12.6,原来的是1.12.3. 1.12.3上 logging driver的默认是 json-file ,而 1.12.6就是 journald.这就是导致原先日志路径下*-json.log文件

Android ListView异步加载图片错位、重复、闪烁分析以及解决方案

我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如ListView上有100个Item,一屏只显示10个Item,我们知道getView()中convertView是用来复用View对象的,因为一个Item的对应一个View对象,而ImageView控件就是View对象通过findViewById()获得的,而我们在复用View对象时,同时这个Ima