Redisは、ユーザーの一定期間のログイン数を統計します.
1451 ワード
私はredisのsetbitとbitcountを使ってこの操作を行います.注意すべきはsetbitがbit位置を変更し、bitcountがbyte位置をチェックし、両者は8の倍数の差があることです.疑似コードは次のとおりです.
//
long daysBetween(Date date1,Date date2)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
long time1 = cal.getTimeInMillis();
cal.setTime(date2);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Long.parseLong(String.valueOf(between_days));
}
// ,
long dayIndex(Date date1) throws ParseException
{
String d0 = "2010-01-01 00:00:00";
Date date0 = simpledate.parse(d0);
return daysBetween(date0, date1);// 2010 1 1
}
// redis setbit , , 8, true
boolean setUserLoginday(Jedis redis, String user, Date currentDate)
{
long day_position = dayIndex(currentDate);
// 8 bit
// bitcount byte
return redis.setbit(user, day_position * 8, true);
}
// redis bitcount , ,
long countUserLoginDays(Jedis redis, String user, Date fromdate, Date todate) throws ParseException {
long from_day_position = DataTransformer.dayIndex(fromdate);
long to_day_position = DataTransformer.dayIndex(todate);
return redis.bitcount(key, from_day_position, to_day_position);
}