本篇文章为你整理了redis实现用户查询次数限制(redis查询数据总量)的详细内容,包含有redis查看用户列表 redis查询数据总量 redis查询某个key,查询数据太多 redis查询存在其中记录有多少条 redis实现用户查询次数限制,希望能帮助你了解 redis实现用户查询次数限制。
随着项目的开发越来越完善,产品也会提出各种层出不穷的需求,当一个复杂列表查询功能实现时,需求又说要增加用户的查询次数限制,这就让开发很是头疼,但是为了RMB也就忍忍了!
具体实现思路是使用Redis的 key,value 特性存储,计算每个key的访问次数,然后递减代码如下:
一、定义访问次数和过期时间常量
private static final int TIME_INTERVAL = 1440; private static final int FAILED_RETRY_TIMES = 4;
二、判断用户是否是登录状态?
登录则获取用户Id
String key = "";
boolean flag = false;
Long userId = SecurityUtils.getCurrUserId();
if (userId != null) {
CoCompanyInfo coCompanyInfo = coCompanyInfoMapper.selectMyCoCompanyInfoByTenantId(SecurityUtils.getCurrTenantId());
if (coCompanyInfo == null){
key = userId.toString();
}else {
flag = true;
}
}
未登录或者未注册的用户则取IP地址作为Key
else {
HttpServletRequest request = ServletUtils.getRequest();
String ip = IpUtils.getIP(request);
log.info("获取客户端的IP地址为:" + ip);
key = ip;
}
三、redisTemplate方法根据key获取到value
if (StringUtils.isNotEmpty(key)){
Integer value = (Integer) redisTemplate.opsForValue().get(key);
if (value != null){
//剩余次数大于零且数组不等于空时,查询次数减一
if (value 0 CollectionUtils.isNotEmpty(list)){
redisTemplate.boundValueOps(key).increment(-1);
flag = true;
}else {
flag = false;
}
}
如果key等于空则是第一次访问,则存入次数和时间
else {
redisTemplate.opsForValue().set(key, FAILED_RETRY_TIMES, TIME_INTERVAL, TimeUnit.MINUTES);
flag = true;
}
}
四、如果flag = false则登录次数已用完,返回空数组
if (flag == false){
return new ArrayList ();
}
return list;
以上是完整实现代码,如有不足欢迎大家补充
以上就是redis实现用户查询次数限制(redis查询数据总量)的详细内容,想要了解更多 redis实现用户查询次数限制的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。