Redis學習筆記三、基本使用三 key失效問題

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
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章