redis 键值对 有效期设置

 

 

 

 


redis 键值对 有效期设置redis中可以使用expire命令设置一个键的生存时间,

到时间后redis会自动删除它<-----> 类比于javaweb系统临时数据 过期删除功能

 

expire 设置失效时间(单位/秒)
persist 取消失效时间

ttl/pttl(单位为 秒/毫秒) 查看键的剩余时间 

返回三种值 -2(健已经不存在了)  -1(表示永久有效)  大于0的数(还有多少有效时间)


pexpire设置失效时间(单位/毫秒)

expireat [key] unix时间戳1351858600
pexpireat [key] unix时间戳(毫秒)1351858700000

 

应用:
限时的优惠活动: 活动对应数据限时为1小时 则设置为1小时后失效

网站数据缓存(对于一些需要定时更新的数据)
    比如排名,间隔10分钟做一次统计的话,那么排名的数据就可以设置 expire
 
网站访客访问频率限制(例如:1分钟最多访问10次):  用户ip作为健,默认值为1,incr命令,

 

set name zm

expire name 60 设置name失效时间为60S

ttl name  查看name健将要失效的剩余生存时间


persist name  取消name的失效时间
ttl name  如果返回是-1 则表示已经取消了name的失效时间  -1表示永久有效


 

 redis 设置IP单位时间内访问次数, 比如 1分钟内只能让客户IP访问量3次,否则封IP:

package bj.zm.redis;


import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
/**
 * 使用键的生存时间来实现控制用户访问网站的频率
 * @author Administrator
 *
 */
public class TestWebSite {
	Jedis jedis = new Jedis("192.168.1.110", 6379);
	@Test
	public void test(){
		String ip = "192.168.1.1";// 客户IP
		website(ip);
	}
	//每次递增1,如果在60S内访问超过了3次 则 访问频率过高(防止抓取)  模拟的时候 连续执行多次junit来实现打印用户访问频率超限的效果
	private void website(String ip) {
		String value = jedis.get(ip);
		if(value==null){
			Transaction transaction = jedis.multi();
			transaction.incr(ip);
			transaction.expire(ip, 60);
			transaction.exec();
		}else{
			int intvalue = Integer.parseInt(value);
			if(intvalue<=3){
				jedis.incr(ip);
			}else{
				System.err.println("用户访问频率超限!");
			}
		}
	}

}

 

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中设置Redis的当天有效期,你可以使用Jedis库。这是一个简单的示例代码: ``` import redis.clients.jedis.Jedis; public class RedisExample { public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); long unixTime = System.currentTimeMillis() / 1000L; int ttl = (int) (86400 - unixTime % 86400); jedis.setex("key", ttl, "value"); } } ``` 在这个例子中,我们使用当前的UNIX时间戳(以秒为单位)计算出剩余的秒数(即当天的总秒数减去当前时间的秒数),然后使用`setex`命令将键的TTL设置为这个值。 需要注意的是,这个代码假设当前时间是UTC时间,如果你使用的是其他时区,那么你需要手动调整TTL的计算方式。 ### 回答2: 在Java中设置Redis的当天有效期可以通过以下步骤实现: 1. 获取当前日期和时间: 首先,使用Java的日期时间类库(如java.util.Date或java.time.LocalDate)获取当前的日期和时间。如果需要精确到毫秒级别的时间,可以使用java.time.LocalDateTime类。 2. 计算当天剩余的秒数: 使用日期时间类库,计算当前时间到当天23:59:59之间的时间差。可以使用Java的时间差计算函数(如Duration或ChronoUnit)来实现。 3. 设置Redis键的有效期: 使用Jedis等Java Redis客户端,将计算出的当天剩余秒数作为过期时间,设置给需要设置有效期Redis键。 下面是一个简单的示例代码,说明了如何在Java中设置Redis的当天有效期: ```java import redis.clients.jedis.Jedis; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.ChronoUnit; public class RedisExpirationExample { public static void main(String[] args) { // 连接到Redis服务器 Jedis jedis = new Jedis("localhost"); // 获取当前日期和时间 LocalDate currentDate = LocalDate.now(); LocalTime currentTime = LocalTime.now(); // 计算当天剩余的秒数 LocalDateTime endOfDay = LocalDateTime.of(currentDate, LocalTime.MAX); long secondsLeft = ChronoUnit.SECONDS.between(currentTime, endOfDay); // 设置Redis键的有效期 jedis.set("key", "value"); jedis.expire("key", (int) secondsLeft); // 关闭连接 jedis.close(); } } ``` 通过以上步骤,我们可以在Java中简单地设置Redis键的当天有效期。首先获取当前日期和时间,然后计算当天剩余的秒数,并将其作为有效期设置Redis键。这样,Redis键就会在当天的最后一秒自动过期。 ### 回答3: 在Java中设置Redis当天有效期可以通过以下步骤实现: 1. 首先,需要引入Redis的Java客户端库,比如Jedis或Lettuce等。 2. 连接到Redis服务器,可以通过以下代码创建Redis连接池和获取连接对象,其中host和port是Redis服务器的地址和端口号: ``` JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "host", port); Jedis jedis = jedisPool.getResource(); ``` 3. 确定当前日期,可以使用`java.util.Date`类和`java.text.DateFormat`类来获取当前日期的字符串表示,然后截取年月日部分。 ``` Date currentDate = new Date(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String today = dateFormat.format(currentDate); ``` 4. 设置Redis键值对,并指定当天的过期时间。可以使用`expire`命令来设置键的过期时间,单位为秒。 ``` String key = "key"; String value = "value"; int expiration = 86400; // 一天的秒数,即24 * 60 * 60 jedis.set(key, value); jedis.expire(key, expiration); ``` 5. 最后,记得在程序结束时关闭Redis连接,释放资源。 ``` jedis.close(); jedisPool.close(); ``` 通过以上步骤,就可以在Java中设置Redis的当天有效期。使用当前日期作为键名,设定当天的过期时间。这样,在过了当天的日期之后,对应的键值对将会自动过期,Redis将自动删除过期的键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值