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);
	}
}

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


当前文章:java操作redis中如何使用expire模拟指定时间段内限制ip访问的次数
当前网址:http://scyanting.com/article/gcgihi.html