Redis限制N小时内每用户Id最多只能登录M次解决方案

2024-06-01 01:58

本文主要是介绍Redis限制N小时内每用户Id最多只能登录M次解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package com.zxl.redis.rediscode;import redis.clients.jedis.Jedis;import java.util.List;/*** @author xiaoliang* @date 2020/5/12 21:30* @since V1.0*/
public class LoginValidate {//设置成10s是因为方便测试//周期时间为毫秒final static int EXPIRE_TIME_MILLISECOND = 10*1000;//一个周期内最多的操作次数final static int MOST_TIMES_IN_TIME_LIMIT = 5;public static void main(String[] args) {//创建Jedis客户端Jedis jedis = new Jedis("192.168.0.3",6379);//操作数据jedis.select(0);//模拟登入用户String userId="zxl";loginValidateWithQueue(jedis,userId);loginValidateWithQueue(jedis,userId);loginValidateWithQueue(jedis,userId);try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}loginValidateWithQueue(jedis,userId);loginValidateWithQueue(jedis,userId);loginValidateWithQueue(jedis,userId);try {Thread.sleep(6000);} catch (InterruptedException e) {e.printStackTrace();}loginValidateWithQueue(jedis,userId);loginValidateWithQueue(jedis,userId);//取出用户最后五次的操作时间List<String> values=jedis.lrange(userId,0,-1);for (int i = 0; i < values.size(); i++) {System.out.printf(values.get(i) + "\n");}//删除用户列表jedis.del(userId);jedis.close();}/*** 用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次** @param jedis* @param userId* @return*/public static boolean loginValidateWithQueue(Jedis jedis, String userId) {Long currentTime = System.currentTimeMillis();//判断List列表长度是否超过操作次数if (jedis.llen(userId) < MOST_TIMES_IN_TIME_LIMIT) {//将当前操作时间放入到用户list中jedis.rpush(userId, currentTime.toString());System.out.println(currentTime + " 登入成功!" + jedis.llen(userId));return true;} else {//如果超过操作次数则取出list中最早操作时间,即list下标为0的String earliestTimeStr = jedis.lindex(userId, 0);//将字符串转为长整形Long earliestTime = Long.valueOf(earliestTimeStr);//判断最早操作时间是否在周期内,如果在周期内说明在这个周期内操作数已到阀值不允许再操作。if (currentTime - earliestTime <= EXPIRE_TIME_MILLISECOND) {System.out.println(EXPIRE_TIME_MILLISECOND/1000 + " 秒内只能操作" + MOST_TIMES_IN_TIME_LIMIT + " 次");return false;} else {//如果最早操作时间不再周期,说明可以继续操作。//为了使用户列表长度为操作次数。需要删除最早的操作时间,保存本次操作时间。//删除列表尾段数据,即最早操作时间。jedis.lpop(userId);//插入当前操作时间jedis.rpush(userId, currentTime.toString());System.out.println(currentTime + " 登入成功!" + jedis.llen(userId));return true;}}}
}

这篇关于Redis限制N小时内每用户Id最多只能登录M次解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019667

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red