将Redis用于应用程序属性

问题描述 投票:0回答:1

我有一个具有多个功能的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的网络调用数不胜数。

您能为这个问题建议其他替代方法吗?

spring-boot redis
1个回答
0
投票

Redis的创建日期是

吨到Redis的网络通话次数

但是如果您想减少数量,可以使用Spring Cachehttps://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/integration.html#cache

流程将是:

  1. 您在数据库(关系或Redis)中打开或关闭该功能
  2. [调用某种使缓存无效的方法(用@CacheEvict注释]
  3. 第一次调用redisTemplate.getKeyValue("feature.a.enabled")时应将结果缓存(用@Cacheable注释的方法]
  4. redisTemplate.getKeyValue("feature.a.enabled")的任何后续调用(直到您再次执行步骤1和2.。都会返回缓存的结果

并且为了优雅起见,我还将点1从与DB的手动交互更改为在应用程序内触发的动作。

© www.soinside.com 2019 - 2024. All rights reserved.