需求:使用redis的bitmap做每日统计
解决思路:使用每天的第一个id作为被减量,这样每天的offset(偏移量)就从1开始,大幅有效的缩减了内存的占用量!
//bitmap的偏移量offset生产,offset越大,占用内存越多,所以以每日第一个id作为minid,作为被减数
//使用guava cache缓存机制获取最小id,设置过期时间为每一天,每天清空一次
private LoadingCache<String, Integer> minId = CacheBuilder.newBuilder().expireAfterWrite(1L, TimeUnit.DAYS).build(new CacheLoader<String, Integer>() {
@Override
public Integer load(String s) throws Exception {
Date date = LocalDate.parse(StringUtils.substringAfter(s, "@")).toDate();
if (ACTIVE_COUNTER.startsWith(s)) {
LoginLog loginLog = loginLogRepository.getTopByLoginTimeBeforeOrderByIdDesc(date);
if (loginLog != null) {
return loginLog.getId();
}
} else if (PLAYED_COUNTER.startsWith(s)) {
ViewHistory viewHistory = viewHistoryRepository.getTopByViewtimeBeforeOrderByIdDesc(da