Open cayden-cheng opened 2 years ago
+1
+1
I think it's a big sur system problem, please give up embedded-redis, try using brew to install redis
Seems the embedded redis binary isn't m1 and doesn't work with rosetta
do you want say apple's arm64??
Apple M1 runs Mach-O 64-bit executable arm64 natively, yes.
just want say,the apple m1 is terrible,just like bull shit....hope the laste version can be change it
Hello! This package ships with outdated Redis version that does not have support for Apple Silicon (M1). As can be seen from here, only Redis 6.0+ supports Apple Silicon.
So here is what you need to do to make embedded redis working:
private val customRedisProvider: RedisExecProvider = RedisExecProvider.defaultProvider().override(OS.MAC_OS_X, Architecture.x86_64, "obtained/path/to/your/redis").override(OS.MAC_OS_X, Architecture.x86, "obtained/path/to/your/redis")
private val redisServer = RedisServer(customRedisProvider, redisPort)
I moved to using a TestContainer which can pull the docker image that has all architectures.
Before you try trying the @mmazurovsky 's solution, update your OS if you're using Bigsur
.
I hava M1 Macbook pro 13 and used Bigsur OS.
After update, it works without any code changes!
~It's a bigsur problem.~
Try @mmazurovsky 's solution. It's working well on Bigsur.
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar xzf redis-6.2.6.tar.gz
$ cd redis-6.2.6
$ make
redis-6.2.6/src/redis-server
file to your project.Running Redis server with redis binary file
in my case, the file path is src/test/resources/binary/redis-server
@TestConfiguration
public class TestRedisConfig {
private RedisServer redisServer;
@PostConstruct
public void setUp() throws IOException {
final int redisDefaultPort = 6379;
this.redisServer = getRedisServer(redisDefaultPort);
redisServer.start();
}
@PreDestroy
public void stopRedis() {
if (Objects.nonNull(redisServer) && redisServer.isActive()) {
redisServer.stop();
}
}
private RedisServer getRedisServer(int port) throws IOException {
if (isMacM1()) {
return new RedisServer(
RedisExecProvider.defaultProvider()
.override(OS.MAC_OS_X, Architecture.x86_64, "binary/redis-server"),
redisPort);
} else {
return new RedisServer(redisPort);
}
}
private boolean isMacM1() {
if (!System.getProperty("os.name").equals("Mac OS X")) {
return false;
}
return System.getProperty("os.arch").equals("aarch64") || System.getProperty("os.arch").equals("x86_64");
}
}
Rosetta 2 support the Mach-0 x64 binary and starts it without problems under M2 Mac, still, using Testcontainers should be (imo) the better/preferred option.
can not start for mac os version: mac os big sur 11.4 but when start in mac os catalina is ok。 is this the problem with m1 cpu or mac os ?