java实现redis签到功能
注:基于Spring boot工程,使用redis的bitmap实现简单的签到功能
@RestController
@RequestMapping("/sign")
public class Qiandao {
private RedisTemplate redisTemplate;
public Qiandao(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@GetMapping
public String signed(@RequestParam String userId,
@RequestParam String date) {
String key = "signed#" + userId;
//存进去。实现BitMap签到,用这个方法。
Boolean isSign = (Boolean) redisTemplate.execute((RedisCallback<Boolean>)
con ->con.setBit(key.getBytes(),Long.parseLong(date),true));//参数true代表1,false代表0
System.out.println("是否签到:"+isSign); //返回false签到成功
//统计
Long number = (Long) redisTemplate.execute((RedisCallback<Long>)
con ->con.bitCount(key.getBytes()));
System.out.println("已经签到"+number+"次");
return "已经签到"+number+"次";
}
@GetMapping("/count") //统计某用户签到当月签到次数
public String getCount(@RequestParam String id,
@RequestParam String start,@RequestParam String end){
String key = "signed#"+id;
Long count = (Long) redisTemplate.execute((RedisCallback<Long>)
con ->con.bitCount(key.getBytes(),Long.parseLong(start),Long.parseLong(end)));
return "用户"+id+"签到"+count+"次";
}
}
application.yml文件配置
spring:
redis:
host: localhost
port: 6379