Redis轮播信息
1、实现接口
package com.strap.mydemo.redis;
import java.util.List;
public interface Marquee {
String getMarqueeNameKey();
Long getMaxMarqueeLength();
Boolean isHead();
Long addTarget(String obj);
List<String> getMarqueeList();
Boolean deleteMarquee();
}
2、实现抽象类
package com.strap.mydemo.redis;
import cn.hutool.core.collection.CollectionUtil;
import org.springframework.data.redis.core.RedisTemplate;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public abstract class MarqueeAbstract implements Marquee {
@Resource
protected RedisTemplate<String, Object> redisTemplate;
public MarqueeAbstract() {
}
@Override
public Long addTarget(String obj) {
Long count = isHead() ? redisTemplate.opsForList().leftPush(getMarqueeNameKey(), obj)
: redisTemplate.opsForList().rightPush(getMarqueeNameKey(), obj);
if (count != null && count > getMaxMarqueeLength()) {
if (isHead()) {
redisTemplate.opsForList().trim(getMarqueeNameKey(), 0, getMaxMarqueeLength() - 1);
} else {
redisTemplate.opsForList().trim(getMarqueeNameKey(), count - getMaxMarqueeLength(), count - 1);
}
}
return count;
}
@Override
public List<String> getMarqueeList() {
List<Object> list = redisTemplate
.opsForList()
.range(getMarqueeNameKey(), 0, -1);
return CollectionUtil.isEmpty(list) ? Collections.emptyList() :
list.stream().map(String::valueOf).collect(Collectors.toList());
}
@Override
public Boolean deleteMarquee() {
return redisTemplate.delete(getMarqueeNameKey());
}
}
3、实现子类
package com.strap.mydemo.redis;
import org.springframework.stereotype.Component;
@Component
public class BookMarquee extends MarqueeAbstract{
public BookMarquee() {
}
@Override
public String getMarqueeNameKey() {
return "marquee:book";
}
@Override
public Long getMaxMarqueeLength() {
return 8L;
}
@Override
public Boolean isHead() {
return true;
}
}
4、测试
for (int i = 0; i < 20; i++) {
bookMarquee.addTarget(RandomUtil.randomChar() + "");
log.info(bookMarquee.getMarqueeList());
}
bookMarquee.deleteMarquee();