This commit is contained in:
fanxb 2020-01-25 18:09:39 +08:00
parent aa679e48a9
commit bab224f386
7 changed files with 54 additions and 3 deletions

View File

@ -28,7 +28,7 @@ services:
ports: ports:
- 6380:6379 - 6380:6379
bookmark-es: bookmark-es:
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 image: elasticsearch:7.2.0
container_name: bookmark-es container_name: bookmark-es
volumes: volumes:
- /etc/localtime:/etc/localtime - /etc/localtime:/etc/localtime

View File

@ -4,10 +4,13 @@ import com.fanxb.bookmark.business.bookmark.dao.BookmarkDao;
import com.fanxb.bookmark.business.bookmark.entity.BookmarkEs; import com.fanxb.bookmark.business.bookmark.entity.BookmarkEs;
import com.fanxb.bookmark.business.bookmark.entity.MoveNodeBody; import com.fanxb.bookmark.business.bookmark.entity.MoveNodeBody;
import com.fanxb.bookmark.common.constant.EsConstant; import com.fanxb.bookmark.common.constant.EsConstant;
import com.fanxb.bookmark.common.constant.RedisConstant;
import com.fanxb.bookmark.common.entity.Bookmark; import com.fanxb.bookmark.common.entity.Bookmark;
import com.fanxb.bookmark.common.entity.EsEntity; import com.fanxb.bookmark.common.entity.EsEntity;
import com.fanxb.bookmark.common.entity.redis.UserBookmarkUpdate;
import com.fanxb.bookmark.common.exception.FormDataException; import com.fanxb.bookmark.common.exception.FormDataException;
import com.fanxb.bookmark.common.util.EsUtil; import com.fanxb.bookmark.common.util.EsUtil;
import com.fanxb.bookmark.common.util.RedisUtil;
import com.fanxb.bookmark.common.util.UserContextHolder; import com.fanxb.bookmark.common.util.UserContextHolder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
@ -20,6 +23,7 @@ import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -45,6 +49,8 @@ public class BookmarkService {
@Autowired @Autowired
private BookmarkDao bookmarkDao; private BookmarkDao bookmarkDao;
private StringRedisTemplate redisTemplate;
@Autowired @Autowired
private EsUtil esUtil; private EsUtil esUtil;
@ -79,6 +85,7 @@ public class BookmarkService {
dealBookmark(userId, elements.get(i), path, sortBase + count + i - 1, insertEsList); dealBookmark(userId, elements.get(i), path, sortBase + count + i - 1, insertEsList);
} }
} }
redisTemplate.opsForList().leftPush(RedisConstant.BOOKMARK_UPDATE_TIME, new UserBookmarkUpdate(userId, System.currentTimeMillis()).toString());
esUtil.insertBatch(EsConstant.BOOKMARK_INDEX, insertEsList); esUtil.insertBatch(EsConstant.BOOKMARK_INDEX, insertEsList);
} }
@ -195,6 +202,7 @@ public class BookmarkService {
bookmarkDao.deleteUserBookmark(userId, bookmarkIdList); bookmarkDao.deleteUserBookmark(userId, bookmarkIdList);
} }
set.addAll(bookmarkIdList); set.addAll(bookmarkIdList);
redisTemplate.opsForList().leftPush(RedisConstant.BOOKMARK_UPDATE_TIME, new UserBookmarkUpdate(userId, System.currentTimeMillis()).toString());
//es 中批量删除 //es 中批量删除
esUtil.deleteBatch(EsConstant.BOOKMARK_INDEX, set); esUtil.deleteBatch(EsConstant.BOOKMARK_INDEX, set);
} }
@ -225,6 +233,7 @@ public class BookmarkService {
esUtil.insertOrUpdateOne(EsConstant.BOOKMARK_INDEX, esUtil.insertOrUpdateOne(EsConstant.BOOKMARK_INDEX,
new EsEntity<>(bookmark.getBookmarkId().toString(), new BookmarkEs(bookmark))); new EsEntity<>(bookmark.getBookmarkId().toString(), new BookmarkEs(bookmark)));
} }
redisTemplate.opsForList().leftPush(RedisConstant.BOOKMARK_UPDATE_TIME, new UserBookmarkUpdate(userId, System.currentTimeMillis()).toString());
return bookmark; return bookmark;
} }
@ -244,6 +253,7 @@ public class BookmarkService {
esUtil.insertOrUpdateOne(EsConstant.BOOKMARK_INDEX, esUtil.insertOrUpdateOne(EsConstant.BOOKMARK_INDEX,
new EsEntity<>(bookmark.getBookmarkId().toString(), new BookmarkEs(bookmark))); new EsEntity<>(bookmark.getBookmarkId().toString(), new BookmarkEs(bookmark)));
} }
redisTemplate.opsForList().leftPush(RedisConstant.BOOKMARK_UPDATE_TIME, new UserBookmarkUpdate(userId, System.currentTimeMillis()).toString());
} }
@ -263,6 +273,7 @@ public class BookmarkService {
} }
//更新被移动节点的path和sort //更新被移动节点的path和sort
bookmarkDao.updatePathAndSort(userId, body.getBookmarkId(), body.getTargetPath(), body.getSort()); bookmarkDao.updatePathAndSort(userId, body.getBookmarkId(), body.getTargetPath(), body.getSort());
redisTemplate.opsForList().leftPush(RedisConstant.BOOKMARK_UPDATE_TIME, new UserBookmarkUpdate(userId, System.currentTimeMillis()).toString());
log.info("{},从{}移动到{},sort:{}", userId, body.getSourcePath(), body.getTargetPath(), body.getSort()); log.info("{},从{}移动到{},sort:{}", userId, body.getSourcePath(), body.getTargetPath(), body.getSort());
} }

View File

@ -11,9 +11,11 @@ import com.fanxb.bookmark.common.exception.FormDataException;
import com.fanxb.bookmark.common.util.*; import com.fanxb.bookmark.common.util.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.UUID; import java.util.UUID;
/** /**
@ -98,4 +100,9 @@ public class BaseInfoService {
} }
userDao.updateEmailByUserId(userId); userDao.updateEmailByUserId(userId);
} }
@PostConstruct
public void updateBookmarkUpdateTime(){
}
} }

View File

@ -10,4 +10,9 @@ public class RedisConstant {
public static String getPasswordCheckKey(int userId, String actionId) { public static String getPasswordCheckKey(int userId, String actionId) {
return "password_check_key_" + userId + "_" + actionId; return "password_check_key_" + userId + "_" + actionId;
} }
/**
* 某用户书签数据更新时间,该队列左进右出
*/
public static final String BOOKMARK_UPDATE_TIME = "bookmark_update_time";
} }

View File

@ -0,0 +1,27 @@
package com.fanxb.bookmark.common.entity.redis;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserBookmarkUpdate {
/**
* 用户id
*/
private int userId;
/**
* 更新时间
*/
private long updateTime;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -45,8 +45,7 @@ public class RedisUtil {
* @param expireTime 过期时间,ms * @param expireTime 过期时间,ms
*/ */
public static void set(String key, String value, long expireTime) { public static void set(String key, String value, long expireTime) {
redisTemplate.opsForValue().set(key, value); redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.MILLISECONDS);
redisTemplate.expire(key, expireTime, TimeUnit.MILLISECONDS);
} }
/** /**

View File

@ -0,0 +1,2 @@
ALTER TABLE `psn`.`user`
ADD COLUMN `bookmarkChangeTime` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 AFTER `lastLoginTime`;