1、redis中可以使用expire命令設置一個鍵的生存時間,到時間后redis會自動刪除它
expire 設置生存時間(單位/秒)
pexpire 設置生存時間(單位/毫秒)
ttl/pttl 查看鍵的剩余生存時間
persist 取消生存時間
expireat [key] unix時間戳1351858600
pexpireat [key] unix時間戳(毫秒)1351858700000
2、應用場景
限時的優惠活動
網站數據緩存(對於一些需要定時更新的數據)
限制網站訪客訪問頻率(例如:1分鍾最多訪問10次)
package cn.crxy.redis; import static org.junit.Assert.*; import java.util.List; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.Transaction; public class RedisTest { String ip = "192.168.1.170"; int port = 6379; Jedis jedis = new Jedis(ip, port); /** * 僅供測試使用,單機無連接池方式 * @throws Exception */ @Test public void test1() throws Exception { //獲取到redis服務器的鏈接 jedis.set("crxy", "wwww"); String value = jedis.get("crxy"); System.out.println(value); } /** * 單機連接池方式 * @throws Exception */ @Test public void test2() throws Exception { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); //指定連接池中最大空閑連接數 jedisPoolConfig.setMaxIdle(10); //鏈接池中創建的最大連接數 jedisPoolConfig.setMaxTotal(100); //設置創建鏈接的超時時間 jedisPoolConfig.setMaxWaitMillis(2000); //表示連接池在創建鏈接的時候會先測試一下鏈接是否可用,這樣可以保證連接池中的鏈接都可用的。 jedisPoolConfig.setTestOnBorrow(true); //創建一個jedis連接池 JedisPool jedisPool = new JedisPool(jedisPoolConfig, ip, port); //從連接池中獲取一個鏈接 Jedis jedis = jedisPool.getResource(); String value = jedis.get("crxy"); System.out.println(value); //把連接返回給連接池 jedisPool.returnResource(jedis); } /** * 限制網站訪客的訪問頻率 * 一分鍾之內最多訪問10次 */ @Test public void test3() throws Exception { String ip = "192.168.1.110"; for(int i=1;i<20;i++){ boolean flag = testLogin(ip); if(flag){ System.out.println("正常訪問"+i); }else{ System.out.println("訪問頻繁,禁止訪問"); } } } //根據用戶的ip校驗用戶是否可以繼續訪問 private boolean testLogin(String ip) { String value = jedis.get(ip); if(value==null){ jedis.incr(ip); //設置ip的生存時間 jedis.expire(ip, 60); }else{ int parseInt = Integer.parseInt(value); if(parseInt>=10){ return false; } jedis.incr(ip); } return true; } }