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