/* * Copyright 2019, Pearson Education, Learning Technology Group * * RedisCacheServiceImpl.java */ package com.pearson.ltg.rbs.ltitoolgateway.redis.service; import java.time.Duration; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; import org.springframework.data.redis.core.ReactiveRedisTemplate; import org.springframework.stereotype.Service; import com.pearson.ltg.rbs.ltitoolgateway.model.PlatformConfiguration; import reactor.core.publisher.Mono; @Service public class RedisCacheServiceImpl implements IRedisCacheService { @Value("${redis.expiry.time : 3600}") protected long expiryTime; @Autowired ReactiveRedisTemplate redisTemplate; public Mono getPlatformConfigurationFromCache(String cacheKey) { Mono configMono = redisTemplate.opsForValue().get(cacheKey); return configMono.map(config -> { return (PlatformConfiguration)config; }); } public void savePlatformConfigurationInCache(String cacheKey, Mono platformConfiguration) { redisTemplate.opsForValue().set(cacheKey, platformConfiguration); setExpiryTime(cacheKey); } public Mono getPlatformIdFromCache(String cacheKey) { return redisTemplate.opsForValue().get(cacheKey).flatMap(cache -> { return Mono.just((String)cache); }); } public void savePlatformIdInCache(String cacheKey, String platformId) { redisTemplate.opsForValue().set(cacheKey, platformId); setExpiryTime(cacheKey); } @Override public void flushRedisCache() { ReactiveRedisConnectionFactory redisConnectionFactory = redisTemplate.getConnectionFactory(); if (null != redisConnectionFactory) { redisConnectionFactory.getReactiveConnection().serverCommands().flushAll(); } } @Override public void deleteKey(String cacheKey) { if (StringUtils.isNotEmpty(cacheKey)) { redisTemplate.delete(cacheKey); } } private void setExpiryTime(String cacheKey) { redisTemplate.expire(cacheKey, Duration.ofSeconds(expiryTime)); } }