文档章节

redis学习笔记---java操作redis,使用expire模拟指定时间段内限制ip访问的次数;

ivan-Zhao
 ivan-Zhao
发布于 2015/12/14 13:50
字数 525
阅读 719
收藏 0

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

        

<dependency>			   				
  	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.7.0</version>
    </dependency>
  	
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>



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



© 著作权归作者所有

ivan-Zhao
粉丝 10
博文 33
码字总数 29110
作品 0
深圳
程序员
私信 提问
Redis原子计数器incr,防止并发请求

一、前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试。这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护...

IT--小哥
2018/10/26
272
0
访问频率控制——防止恶意用户频繁访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26545305/article/details/88219889 一、需求 现在有需求如下:限制1秒中,每个用户最多访问10次后台接口 ...

LemmonTreelss
03/06
0
0
Redis常用技术----超时命令

Java中有GC,可以自动回收不再使用的Java对象。同样,Redis也是基于内存而运行的数据集合,也存在着对内存垃圾的回收和管理的问题。 对于Redis,del命令可以删除一些键值对,所以Redis比JVM...

Java攻城玩家
2018/08/20
0
0
填坑利器?Redis如何弥补传统MySQL架构的不足。

传统MySQL架构难以满足的现代应用程序需求包括: 传统数据库的读/写速度对会话存储等用例不友好; 引入新表或修改现有模式非常复杂,这也导致了添加新功能和应用程序会有困难; 传统数据库会受...

Java干货分享
2018/11/25
24
0
Spring Boot学习笔记

多模块开发 [SpringBoot学习]-IDEA创建Gradle多Module结构的SpringBoot项目 RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装...

OSC_fly
2018/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DevOps是如何实现效率的提升?

随着企业业务对软件系统日益依赖,IT管理与研发模式也随之对“敏态”模式产生了需求,也就是今天时常提起的DevOps。提升效率,是DevOps实践的核心内容之一。就让我们来一起从软件生命周期的业...

嘉为科技
24分钟前
2
0
总结:linux目录之proc

我们系统大部分的基础数据采集,其实就是读取proc目录下的文件,并解析获取数据的过程。 1、如cpu利用率:直接cat /proc/cpuinfo命令,然后获取输出内容,并解析里面的数据,如cpu核数等; ...

浮躁的码农
25分钟前
2
0
比原Bapp红包应用

喜迎国庆期间,比原链在自己的移动端钱包Bycoin(下载地址)和google插件钱byone中推出了红包应用,在国庆期间深受大家好评。 那我们今天就来大概介绍一下比原红包,以及基于比原链开发dapp应用...

比原链Bytom
27分钟前
2
0
Linux中没有rc.local文件的解决方法

Linux中没有rc.local文件的解决方法是什么呢?这应该是很多工程师比较头疼的问题,下面就给大家例举几个解决办法。 比较新的Linux发行版已经没有rc.local文件了。因为已经将其服务化了。 解决...

xiangyunyan
27分钟前
2
0
数据中台在阿里巴巴集团内部的实践情况

作者:品鉴 数据中台门在阿里巴巴集团干什么的,由哪个部门掌管?数据中台在阿里巴巴的主要作用是什么呢?外面吹嘘这么神秘的数据中台在阿里实践的如何呢?今天小编正好要采访数据技术及产品...

阿里云官方博客
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部