需求:小程序的搜索框展示历史搜索的最近10条,且支持删除功能。
代码:
private final RedisTemplate<String,String> redisTemplate;
/**
* 查询搜索历史
* @param content 搜索字段
*/
@Override
public Set<String> searchHistory(String content) {
String userId = UserHolderUtils.getUserId();
String key = "search" + userId;
if (StringUtils.hasText(content)) {
setRedis(key, content);
final Long size = redisTemplate.opsForZSet().size(key);
if (10 < size) {
redisTemplate.opsForZSet().removeRange(key, 0, size - 10 - 1);
}
}
return redisTemplate.opsForZSet()
.reverseRange(key, 0, 10 - 1);
}
/**
* 删除当前人的搜索历史
*/
@Override
public void delete() {
String userId = UserHolderUtils.getUserId();
String key = "search" + userId;
redisTemplate.opsForZSet().removeRange(key, 0, 10);
}
/**
* 缓存搜索历史
*/
private void setRedis(String key, String value) {
double score = System.currentTimeMillis();
redisTemplate.opsForZSet().add(key, value, score);
}