package com.haoxiansheng.middleware.springMessage;
import com.haoxiansheng.middleware.MainApplicationTest;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.concurrent.TimeUnit;
@Slf4j
public class RedisKeyOverdueTest extends MainApplicationTest {
/**
* Key 失效與判斷是否存在
*/
@Autowired
private RedisTemplate redisTemplate;
/**
* TODO key 失效一 在調用SETEX 方法中指定key 的過期時間
*/
@Test
public void testKeySetEx() {
final String key = "redis:setex:overdue";
ValueOperations valueOperations = redisTemplate.opsForValue();
/**
* 第一種方法: 去往緩衝中set 數據時, 提供一個TTL, 表示ttl 時間一道, 緩衝中的key 將自動失效 即被清理
*/
valueOperations.set(key, "expire操作", 10L, TimeUnit.SECONDS); // TTL 設置的時間時10 秒
try {
// 等待5 秒判斷 key 是否還存在
Thread.sleep(5000);
Boolean existKey = redisTemplate.hasKey(key);
Object value = valueOperations.get(key);
log.info("等待5秒--判斷一次key 是否還存在:{} 對應的值爲:{}", existKey, value);
// 再等待5 秒-- 判斷Key 時候還存在
Thread.sleep(5000);
existKey = redisTemplate.hasKey(key);
value = valueOperations.get(key);
log.info("再等待5秒--判斷一次key 是否還存在:{} 對應的值爲:{}", existKey, value);
} catch (Exception e) {
// 線程異常 sleep
}
}
/**
* TODO 採用RedisTemplate 操作組件的Expire() 方法指定失效的key
*/
@Test
public void testKetExpire() {
final String key = "redis:expire:overdue";
ValueOperations valueOperations = redisTemplate.opsForValue();
/**
* 第二中方法是: 在往緩衝中set數據後 採用redisTemplate 的expire 方法使該key 失效
*/
valueOperations.set(key, "expire 操作");
redisTemplate.expire(key, 10L, TimeUnit.SECONDS); // 指定過期時間
try {
// 等待5 秒判斷 key 是否還存在
Thread.sleep(5000);
Boolean existKey = redisTemplate.hasKey(key);
Object value = valueOperations.get(key);
log.info("等待5秒--判斷一次key 是否還存在:{} 對應的值爲:{}", existKey, value);
// 再等待5 秒-- 判斷Key 時候還存在
Thread.sleep(5000);
existKey = redisTemplate.hasKey(key);
value = valueOperations.get(key);
log.info("再等待5秒--判斷一次key 是否還存在:{} 對應的值爲:{}", existKey, value);
} catch (Exception e) {
// 線程異常 sleep
}
}
}