微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Service;
@Service
public class SignService {
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private DefaultRedisScript<Long> signScript;
// 用户签到方法
public boolean sign(String userId, String date) {
// 使用BitMap记录用户签到情况,一天使用一个Bit
String key = "sign_bitmap:" + date;
Long result = redisTemplate.execute(signScript, Collections.singletonList(key), userId);
return result != null && result == 1;
}
// 统计签到用户数方法
public long countSign(String date) {
String key = "sign_bitmap:" + date;
// 使用Redis命令计算BitMap中值为1的个数
return redisTemplate.execute((RedisCallback<Long>) con -> {
byte[] keyByte = con.getByteName(key);
return con.bitCount(keyByte);
});
}
}
这个代码实例展示了如何在Spring Boot应用中使用Redis的BitMap实现用户的签到以及签到用户数的统计。sign
方法负责用户的签到操作,使用了一个Redis脚本来原子地将用户ID对应的位设置为1。countSign
方法则用于统计某一天签到用户的数量,它通过Redis的BITCOUNT
命令来实现。
评论已关闭