redis实现用户查询次数限制(redis查询数据总量)

  本篇文章为你整理了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: