Browse Source

feature1.0.0:修正同步点赞记录到数据库的BUG

master
chengkun 4 years ago
parent
commit
3c1c2ec15c
  1. 66
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java

66
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java

@ -44,40 +44,42 @@ public class TiktokLikeServiceImpl implements TiktokLikeService {
long startTime = System.currentTimeMillis();
//拿缓存
String redisKey = RedisKeyConstant.TIKTOK_USER_LIKE_KEY;
Cursor<Map.Entry<Object, Object>> like = redisService.getHashScan(redisKey);
List<TiktokLike> list = new ArrayList<>();
List<String> keyList = new ArrayList<>();
while (like.hasNext()){
Map.Entry<Object, Object> next = like.next();
String key = (String) next.getKey();
//分离出 userId,imgId
String[] split = key.split(":");
String userId = split[0];
Long userLongId = Long.parseLong(userId);
String imgId = split[1];
Long imgLongId = Long.parseLong(imgId);
//判断图片是否存在
TiktokImg img = tiktokImgMapper.selectById(imgLongId);
if(img == null){
//不存在则图片Id加入删除列表,遍历完删除
if(redisService.hasKey(redisKey)){
Cursor<Map.Entry<Object, Object>> like = redisService.getHashScan(redisKey);
List<TiktokLike> list = new ArrayList<>();
List<String> keyList = new ArrayList<>();
while (like.hasNext()){
Map.Entry<Object, Object> next = like.next();
String key = (String) next.getKey();
//分离出 userId,imgId
String[] split = key.split(":");
String userId = split[0];
Long userLongId = Long.parseLong(userId);
String imgId = split[1];
Long imgLongId = Long.parseLong(imgId);
//判断图片是否存在
TiktokImg img = tiktokImgMapper.selectById(imgLongId);
if(img == null){
//不存在则图片Id加入删除列表,遍历完删除
keyList.add(key);
continue;
}
TiktokLike tiktokLike = new TiktokLike();
tiktokLike.setUserId(userLongId);
tiktokLike.setImgId(imgLongId);
tiktokLike.setIsShow("1");
tiktokLike.setSort(0);
tiktokLike.setCreateTime(new Date());
tiktokLike.setUpdateTime(new Date());
list.add(tiktokLike);
keyList.add(key);
continue;
}
TiktokLike tiktokLike = new TiktokLike();
tiktokLike.setUserId(userLongId);
tiktokLike.setImgId(imgLongId);
tiktokLike.setIsShow("1");
tiktokLike.setSort(0);
tiktokLike.setCreateTime(new Date());
tiktokLike.setUpdateTime(new Date());
list.add(tiktokLike);
keyList.add(key);
}
//数据插入数据库并删除缓存
tiktokLikeMapper.insertBatch(list);
if(keyList.size() > 0){
for (String key : keyList) {
redisService.deleteHashKey(redisKey, key);
//数据插入数据库并删除缓存
tiktokLikeMapper.insertBatch(list);
if(keyList.size() > 0){
for (String key : keyList) {
redisService.deleteHashKey(redisKey, key);
}
}
}
log.info("==============redis同步点赞记录到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime);

Loading…
Cancel
Save