Last active
June 14, 2021 16:45
-
-
Save Ruhshan/bf9637dd7e47995cfacf0b3c27b260a1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Service | |
@Slf4j | |
public class KeyValuePairServiceImpl implements KeyValuePairService { | |
private final KeyValuePairRepository keyValuePairRepository; | |
private final RedisTemplate<String, Object> redisTemplate; | |
private final ObjectMapper objectMapper; | |
public KeyValuePairServiceImpl(KeyValuePairRepository keyValuePairRepository, RedisTemplate<String, Object> redisTemplate) { | |
this.keyValuePairRepository = keyValuePairRepository; | |
this.redisTemplate = redisTemplate; | |
this.objectMapper = new ObjectMapper(); | |
} | |
@Override | |
public KeyValuePair findByKey(String key) { | |
return checkInCache(key).orElseGet(()->this.getFromDb(key)); | |
} | |
@Override | |
public void save(KeyValuePair keyValuePair) { | |
keyValuePairRepository.save(keyValuePair); | |
saveInCache(keyValuePair.getKey(), keyValuePair); | |
} | |
private Optional<KeyValuePair> checkInCache(String key) { | |
try { | |
Object entryInCache = redisTemplate.opsForValue().get(key); | |
return Optional.of(objectMapper.readValue(entryInCache.toString(), KeyValuePair.class)); | |
} catch (Exception e) { | |
log.warn("Error in processing {}", e.getMessage()); | |
} | |
return Optional.empty(); | |
} | |
private KeyValuePair getFromDb(String key){ | |
KeyValuePair keyValuePair = keyValuePairRepository.findByKey(key); | |
saveInCache(key, keyValuePair); | |
return keyValuePair; | |
} | |
private void saveInCache(String key, KeyValuePair keyValuePair){ | |
try { | |
redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(keyValuePair)); | |
} catch (JsonProcessingException e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment