【redis中键的生存时间(expire) 】

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);
        }  
时间: 2024-08-03 22:59:11

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

redis中键的生存时间(expire)

1.redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它 expire 设置生存时间(单位/秒) pexpire 设置生存时间(单位/毫秒) ttl/pttl 查看键的剩余生存时间 persist 取消生存时间 expireat [key] unix时间戳1351858600 pexpireat [key] unix时间戳(毫秒)1351858700000 2.应用场景 限时的优惠活动 网站数据缓存(对于一些需要定时更新的数据) 限制网站访客访问频率(例如:1

Redis3.0.5学习笔记(四)Redis中键的生存时间

欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量. 本文出自 "闷葫芦的世界" 博客,请务必保留此出处http://luchunli.blog.51cto.com/2368057/1710786

redis中键空间通知

通过redis的键空间通知,当redis删除过期key的时候,及时更新mongodb数据库中user的状态 var Redis = require('ioredis'); var redis = new Redis(); redis.subscribe('[email protected]__:expired',function(err,count){}) //订阅key过期事件 redis.on('message',function(channel,message){ //对redis的操作的

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

我们已经了解到了Redis是一种内存数据库,Redis中数据都是以key-value的形式存储在内存中,由Redis服务器来维护和管理这部分内存,内存是何足珍贵,不需要的数据或者是已经使用过的没用的数据是不会让它长久的存在于内存中的,毕竟我们还是要建设节约型社会的.所以我们可以通过给键设置生存时间或者过期时间来权衡有限的内存和不断增长的数据,设置过期时间的命令为:[expire key 时间长度(秒)]或者是[pexpire key 时间长度(毫秒)] 同时也可以通过[expireat key

redis中文文档

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持redis 2.0.4) Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号timeout: float,链接时长 (

Redis中在程序中的应用

1.导入redis的配置文件,因为要交给web容器管理,所以直接命名为ApplicationContext-redis.xml,具体配置如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframewor

Redis 过期键的设置、获取和删除过期时间

Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内存. 设置的键的生存时间也很容易,可以通过4个命令设置(任选一即可):EXPIRE.PEXPIRE.EXPIREAT.PEXPIREAT命令,这4个命令看起来不同但是背后实现原理都是一样的.常用的其实就是EXPIRE和PEXPIRE这两个,前者是以秒设置过期时间,后者是以毫秒. 以秒来设置,设置aa

redis常用操作、 redis操作键值、 redis安全设置

一:redis常用操作 Redis常用操作?(string, list)set key1 aminglinuxget key1set key1 aming//第二次赋值会覆盖setnx key2 aaa //返回1 如果key2不存在直接创建keysetnx key2 bbb //返回0,如果key2存在,返回0setex key3 10 1 //给key3设置过期时间为10s,值为1,若key已经存在,会覆盖新的值mset k1 1 k2 a k3 cmget k1 k3 k2lpush li

Redis中的LRU淘汰策略分析

Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,就返回该键. 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键. 另外,Redis也可以开启LRU功能来自动淘汰一些键值对. LRU算法 当需要从缓存中淘汰数据时,我们希望能淘汰那些将来不可能再被使用的数据,保留那些将来还会频繁访问的数据,但最大的问题是缓存并