千家信息网

java操作redis中如何使用expire模拟指定时间段内限制ip访问的次数

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,java操作redis中如何使用expire模拟指定时间段内限制ip访问的次数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收
千家信息网最后更新 2025年12月02日java操作redis中如何使用expire模拟指定时间段内限制ip访问的次数

java操作redis中如何使用expire模拟指定时间段内限制ip访问的次数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

首先加入maven依赖,使用JUinit做单元测试。

                                                               redis.clients        jedis        2.7.0                    junit      junit      3.8.1      test    



redisutil类,创建一个线程池,可以返回redis连接资源以及释放资源


/** * redis工具类,从redis链接池中获取一个链接资源 * @author Hades * time:2015年12月14日 */public class RedisUtils {        //定义连接池        public static JedisPool pool = null;        /**         * 获取链接资源         * @return         */        public static synchronized Jedis getJedis() {                if(pool==null){                        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();                        jedisPoolConfig.setMaxTotal(100);//最大连接数                        jedisPoolConfig.setMaxIdle(10);                        jedisPoolConfig.setMaxWaitMillis(1000);//类似于超时时间                        jedisPoolConfig.setTestOnBorrow(true);                        pool = new JedisPool(jedisPoolConfig,"192.168.57.133",6379);//创建连接池                }                                Jedis jedis = pool.getResource();                return jedis;        }        /**         * 释放链接资源         * @param jedis         */        public static void returnJedis(Jedis jedis) {                pool.returnResourceObject(jedis);        }



redis客户端类,使用的是juinit做单元测试哈


/** * redis测试类 * @author Hades * */public class RedisTest {        static Jedis jedis =RedisUtils.getJedis();        @Test        public void test3() throws Exception {                String ip ="192.168.57.2";//访问的ip                //测试                for (int i = 0; i < 20; i++) {                        boolean flag = testLogin(ip);                        System.out.println(flag);                }        }        /**         * 模拟限制ip指定时间段内访问次数         * @param ip         * @return         */        public boolean testLogin(String ip) {                String value = jedis.get(ip);                if(value==null){                        jedis.set(ip, "1");                        jedis.expire(ip, 60);//设置过期时间60秒                        return true;                }else{                        int parseInt = Integer.parseInt(value);                        //60秒内访问超过10次,就禁止访问                        if(parseInt>10){                                System.out.println("访问受限!!!!");                                return false;                        }                                                jedis.incr(ip);                }                                return true;        }                 /**         * 不使用管道 向jedis插入一万条数据消耗时间:3184         */        @Test        public void test2() throws Exception{                // TODO Auto-generated method stub                long start = System.currentTimeMillis();                for (int i = 0; i < 10000; i++) {                        jedis.set("a"+i, i+"");                        jedis.expire("a"+i, 60);                }                                System.out.println(System.currentTimeMillis()-start);        }        /**         * 使用管道命令批量导入数据 所需时间:204         * @throws Exception         */        @Test        public void test4() throws Exception {                long start = System.currentTimeMillis();                Pipeline pipelined = jedis.pipelined();                for (int i = 0; i < 10000; i++) {                        pipelined.set("a"+i, i+"");                        pipelined.expire("a"+i, 60);                }                pipelined.sync();                System.out.println(System.currentTimeMillis()-start);        }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0