1、redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它
     expire      设置生存时间(单位/秒)
     pexpire    设置生存时间(单位/毫秒)
     ttl/pttl     查看键的剩余生存时间
     persist     取消生存时间
     expireat [key] unix时间戳1351858600
     pexpireat [key] unix时间戳(毫秒)1351858700000

2、应用场景
     限时的优惠活动
     网站数据缓存(对于一些需要定时更新的数据)
     限制网站访客访问频率(例如:1分钟最多访问10次)

    /**
* 限制网站访客访问频率(例如:1分钟最多访问10次),其中: 访客通过IP标识,即同一个IP在1分钟内仅能访问10次
*/
@Test
public void test4(){
final String ip = "127.0.0.1" ;
Jedis redis = null;
//模拟同一个用户连续访问20次
for(int i =0;i <20;i ++){
boolean t = validate(ip);
if(t ){
System. out.println("恭喜你,购票成功!" +i );
} else{
//获取当前ip过期时间
redis = getRedis();
break;
}
}
while(true &&redis.ttl(ip)>0){
System. out.println("抱歉,你访问过度频繁,请" +redis .ttl(ip )+"秒后再来访问!" );
try {
Thread. sleep(1000);
} catch (InterruptedException e ) {
e.printStackTrace();
}
}
System. out.println("你可以再次访问了" );
} /**
*
* @param ip
* @return true: 可以访问,false: 表示已经达到最大上线
*/
public boolean validate( String ip ) {
Jedis jedis = getRedis();
String value = jedis.get( ip);
if(value ==null||value.length()==0){ //第一次访问
jedis.setex( ip, 60,String. valueOf(0));
} else{
int v = Integer.parseInt (value );
if(v >=10){
return false ;
}
}
jedis.incr( ip);
return true ;
} /**
* @return
*/
public Jedis getRedis() {
jedisPool = getJedisPool();
Jedis jedis = jedisPool.getResource();
return jedis ;
} /**
*
*/
public JedisPool getJedisPool() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 控制一个pool最多有多少个 jedis实例。
poolConfig.setMaxTotal(1000);
// 控制一个pool最多有多少个状态为idle(空闲的)的 jedis实例。
poolConfig.setMaxIdle(10);
// 表示当borrow(引入)一个 jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
poolConfig.setMaxWaitMillis(200000);
// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的 jedis实例均是可用的;
poolConfig.setTestOnBorrow(true); return new JedisPool(poolConfig, host, port);
}

【redis中键的生存时间(expire) 】的更多相关文章

  1. redis中键的生存时间(expire)

    1.redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它 expire 设置生存时间(单位/秒) pexpire 设置生存时间(单位/毫秒) ttl/pttl 查看 ...

  2. redis中键空间通知

    通过redis的键空间通知,当redis删除过期key的时候,及时更新mongodb数据库中user的状态 var Redis = require('ioredis'); var redis = ne ...

  3. redis设置键值生存时间

    EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒EXP ...

  4. redis中键值对中值的各种类型

    1 value的最基本的数据类型是String 2 如果value是一张图片 先对图片进行base64编码成一个字符串,然后再保存到redis中,用的时候进行base64解码即可. 这是base64的 ...

  5. redis中的key设置过期时间

    EXPIRE key seconds 为给定  key  设置生存时间,当  key  过期时(生存时间为  0  ),它会被自动删除. 在 Redis 中,带有生存时间的  key  被称为『易失的 ...

  6. Redis 中的原子操作(3)-使用Redis实现分布式锁

    Redis 中的分布式锁如何使用 分布式锁的使用场景 使用 Redis 来实现分布式锁 使用 set key value px milliseconds nx 实现 SETNX+Lua 实现 使用 R ...

  7. 快速同步mysql数据到redis中

    MYSQL快速同步数据到Redis 举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中. 从MySQL中将数据导入到Redis的Hash结构中.当然,最直接的 ...

  8. 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】

    转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...

  9. redis中关于过期键的删除策略

    我们已经了解到了Redis是一种内存数据库,Redis中数据都是以key-value的形式存储在内存中.由Redisserver来维护和管理这部分内存,内存是何足珍贵,不须要的数据或者是已经使用过的无 ...

随机推荐

  1. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

  2. 3.jquery在js文件中获取选择器对象

    一.常用的选择器有一下几种: 1.标签选择器 2.类选择器 3.id选择器 4.并集选择器 5.层级选择器 二.如何获取选择器对象: <!DOCTYPE html> <html la ...

  3. 导入不用的css文件及在不同设备显示不用的html页面

    当一个页面对应有多个css样式文件时,我们可以根据地址栏的参数值而导入不同的css文件: function getCss() { var linkNode = document.createEleme ...

  4. 解决ORA-21561: OID generation failed

    解决ORA-21561 在linux上使用sqlplus连接oracle数据库 [root@china ~]# sqlplus test/test@ORCL SQL Production :: Cop ...

  5. Nginx Web服务(一)

    一.Nginx原理介绍 1.1:什么是Nginx Nginx是一个开源的,支持高性能.高并发的WWW服务和代理服务软件 1.2:Nginx的功能特点及应用场合 ① 支持高并发:能支持几万并发连接,特别 ...

  6. 优化 JS 条件语句的 5 个技巧

    优化 JS 条件语句的 5 个技巧 原创: 前端大全 前端大全 昨天 (给前端大全加星标,提升前端技能) 编译:伯乐在线/Mr.Dcheng http://blog.jobbole.com/11467 ...

  7. sql日期格式处理

    sql server中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 ...

  8. js验证整数,浮点数

    //验证数字(整数.浮点数都可以通过) function isfloat(oNum){ if(!oNum) return false; var strP=/^\d+(\.\d+)?$/; if(!st ...

  9. idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法

    在取一段github代码时,发现说是支持jdk 7 ,但是使用MAVEN编译不过去. 报错信息为错误: -source 1.6 中不支持 diamond 运算符 我使用的环境是1.7  + intel ...

  10. C#的Equals不区分大小写

    代码:System.Windows.Forms.MessageBox.Show("abc".Equals("ABC", StringComparison.Inv ...