Skip to content

Instantly share code, notes, and snippets.

@Ruhshan
Last active June 14, 2021 16:45
Show Gist options
  • Save Ruhshan/bf9637dd7e47995cfacf0b3c27b260a1 to your computer and use it in GitHub Desktop.
Save Ruhshan/bf9637dd7e47995cfacf0b3c27b260a1 to your computer and use it in GitHub Desktop.
@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