我有一个具有多个功能的Web应用程序。所有这些功能都可以通过标志启用/禁用。
例如:
feature.a.enabled=false
feature.b.enabled=true
最初,所有这些属性都是应用程序属性的一部分。我们迫切需要定期(每2周一次)打开或关闭某个功能。更新属性文件将重建项目,管道将从dev,qa,stg开始,然后到prod部署应用程序。真烦人。所以我们决定将这些属性移到我们的应用数据库中。现在,只要有紧急需求,我们就会更新数据库中的值,然后重新启动数据库的所有实例。产品上的应用服务器。应用服务器,同时开始读取和缓存这些值。我们有50个应用服务器。滚动重新启动需要时间。
我正在考虑为此目的使用Redis。代码或多或少是这样的。
//pseudo code
if(redisTemplate.getKeyValue("feature.a.enabled")){
show feature
}
好处是,我不会必须重新启动应用程序。但是我相信它会影响性能。因为到redis的网络调用数不胜数。
您能为这个问题建议其他替代方法吗?
Redis的创建日期是
吨到Redis的网络通话次数
但是如果您想减少数量,可以使用Spring Cachehttps://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/integration.html#cache
流程将是:
@CacheEvict
注释]redisTemplate.getKeyValue("feature.a.enabled")
时应将结果缓存(用@Cacheable
注释的方法]redisTemplate.getKeyValue("feature.a.enabled")
的任何后续调用(直到您再次执行步骤1和2.。都会返回缓存的结果并且为了优雅起见,我还将点1从与DB的手动交互更改为在应用程序内触发的动作。