所以我一直在使用Jedis客户端连接到Java应用程序中的Redis服务器,在生产环境中流量非常高。
问题是springboot的redis实现不适用于redis,我认为hacks redis的工作方式是实现接口,这会导致应用程序内存泄漏。
例如,我使用常见的springboot方法通过@Cacheable注释以这种方式缓存sql查询输出。
@Cacheable("Catalog")
@Override
public Map<Integer, String> getAllTermsOfUse() {
final MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("language_code", this.userContext.getLocale());
return this
.getNamedParameterJdbcTemplate()
.query(SELECT_ALL_TERMS, parameters, this.termsOfUseResultSetExtractor);
}
为了具有不同的缓存(在本例中为Catalog缓存),redis创建一个具有名称值的zset(在本例中为Catalog〜keys),并将每个键放入zset中,以保持每个键的映射在目录。
我遇到的问题是我们有无限数量的用uuid创建的键,并且defaultExpiration设置为2分钟。目录键永远不会在一天中的某个时间过期,因为从来没有2分钟的时间间隔未设置键。这会导致明显的内存泄漏。
这是我可能的解决方法:
欢迎提出任何建议。