背景
Redis在企业中用处广泛,但是一般可能用的比较多的地方就是缓存数据上,redis KV可设置过期时间,而且是基于内存存储,及时性上比数据库存储好太多。
实际业务上遇到的情况是根据用户信息从sql中查询出用户详细信息,然后查询redis是否存在,如果不存在,写入redis,并设置过期时间;相应地,其它接口在获取用户详细的时候,优先查询redis,没有再去走sql查询。基于 spring具体实现 如下:
实现代码
- application.yaml配置集群地址和密码
1
2
3
4
5
spring:
redis:
cluster:
nodes: ${REDIS_CLUSTER_NODES}
password: ${REDIS_PASSWORD:myPassword}
-
接口实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
@Slf4j @Repository @RequiredArgsConstructor public class RedisCacheRepository implements CacheRepository { private static final String KEY_SEPARATOR = "::"; private static final String REDIS_KEY_PREFIX = "confirm-redis"; private static final Integer EXPIRATION_TIME_MINUTES = 10; private final StringRedisTemplate redisTemplate; @Override public String get(String key) { return redisTemplate.opsForValue().get(toKey(key)); } @Override public void save(String key, String value) { String currentKey = toKey(key); redisTemplate.opsForValue().set(currentKey, value); redisTemplate.expire(currentKey, EXPIRATION_TIME_MINUTES, TimeUnit.MINUTES); log.info("redis save success, key is {}, value is {}", currentKey, value); } private String toKey(String key) { return String.join(KEY_SEPARATOR, REDIS_KEY_PREFIX, key); } }