redis实现用户查询次数限制
2023-03-31 10:36:26 时间
随着项目的开发越来越完善,产品也会提出各种层出不穷的需求,当一个复杂列表查询功能实现时,需求又说要增加用户的查询次数限制,这就让开发很是头疼,但是为了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;
以上是完整实现代码,如有不足欢迎大家补充
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假