Redis는 TTL(Time-To-Live) 기능을 제공하기 때문에 데이터의 만료 시간을 설정가능
그래서 서버에 저장할 refreshToken 의 만료 시간을 설정할 수 있기에 refreshToken 구현에 많이 쓰임
redis-cli
keys * // 전체 키 조회
keys pattern* // pattern- 인 키를 가진 값 모두
ttl {key} // 남은 유효시간 확인
set {key} {value} // Key-value 설정
127.0.0.1:6379> expire key2 30 // key2 expireTime 설정
(integer) 1
127.0.0.1:6379> keys * // key 전체 조회
1) "getErrorLogsDegreeCountMapDaily::5"
2) "key2"
3) "key1"
127.0.0.1:6379> expiretime key2 // utc unix time 으로 expireTime 리턴
(integer) 1720487611
redis 6.2 버전 이후부터는 EXAT 옵션이 추가되어 unix-time-seconds를 받음. 키가 만료되는 지정된 Unix 시간을 초 단위로 설정.
scheduler 로 매 시간을 탐지해 타이머를 구현하는 것. 스레드를 열어 타이머를 작동하는 것보다. redis key 만료 기능으로 서버 리소스를 줄여 타이머를 구현 할 수있지 않을까?
redis key 값 만료를 통해 spring 에서 scheduler 없이 타이머를 구현할 수 있음.
@Component
public class RedisKeyExpiredListener extends KeyExpirationEventMessageListener {
@Autowired
private MqttBasculeBridgeService mqttBasculeBridgeService;
@Autowired
private AutoGrillsService autoGrillsService;
public RedisKeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
if (message.toString().contains("fireShutter")) {
mqttBasculeBridgeService.fireShutterExpiredReceiver(message);
}
else if (message.toString().contains("autoGrill")) {
autoGrillsService.sendMqttOnRedisKeyExpiration(message.toString());
}
}
}
https://codingdog.tistory.com/entry/redis-키-값을-일정-시간이-지나면-expire-시켜-봅시다