Quarkus应用集成测试中使用Embedded Redis v1.0.0遭遇"ERR unknown command getex"错误的解决方法
Quarkus应用集成测试中使用Embedded Redis v1.0.0遭遇"ERR unknown command getex"错误的解决方法
我太懂这种被版本兼容问题卡壳的感觉了!你遇到的这个错误原因其实很明确:你Windows机器上的Embedded Redis v1.0.0默认使用的是Redis 5版本,而getex命令是Redis 6才正式引入的,所以执行这个命令时就会抛出"unknown command"的错误。
不过别担心,你提到的思路是对的——Embedded Redis库本身就带有一些非默认的Redis二进制文件,我们可以通过ExecutableProvider和newCachedUrlProvider来指定使用支持getex的Redis 6+版本,具体操作可以参考下面的步骤和代码示例:
- 首先建议把你的Embedded Redis依赖升级到1.4.3及以上版本,这个版本对自定义二进制的支持更完善
- 在你的集成测试配置类中,自定义RedisServer的启动逻辑,指定使用Redis 6+的二进制文件:
import redis.embedded.RedisServer; import redis.embedded.provider.ExecutableProvider; import redis.embedded.provider.RedisDownloadProvider; import redis.embedded.util.OS; import redis.embedded.util.Architecture; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; public class RedisIntegrationTest { private RedisServer redisServer; @BeforeEach void setUpRedis() { // 创建自定义的可执行文件提供者,指定Redis 6+版本的二进制包 ExecutableProvider executableProvider = RedisDownloadProvider.newCachedUrlProvider() .overrideDownloadUrl(OS.WINDOWS, Architecture.x86_64, "Redis 6+版本的Windows二进制包下载地址"); // 构建RedisServer实例 redisServer = RedisServer.builder() .executableProvider(executableProvider) .port(6379) // 根据你的测试需求指定端口 .build(); // 启动Redis服务 redisServer.start(); } @AfterEach void tearDownRedis() { // 测试结束后停止Redis服务 if (redisServer != null && redisServer.isActive()) { redisServer.stop(); } } // 你的测试用例... }
这样配置之后,Embedded Redis会自动下载并使用你指定的Redis 6+版本,getex命令就能正常执行了。如果不想手动指定下载地址,也可以查看Embedded Redis库中自带的额外二进制版本,直接指定对应的版本标识来调用。
备注:内容来源于stack exchange,提问作者Mali
相关产品推荐
相关产品推荐

