embedded-redis
embedded-redis copied to clipboard
can not start for mac,
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 ?
+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:
- Follow the instruction, download and build Redis that supports Apple Silicon.
- Open the Redis directory, open src directory, find redis-server and get its absolute path, for example mine is "/Users/username/Code/Redis/redis-6.2.6/src/redis-server".
- In your code you will need to use the Redis executable that you have just obtained. For that create RedisExecProvider object and override redis executable that is used by default for the macOS:
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")
- Create RedisServer object with the RedisExecProvider you created previously.
private val redisServer = RedisServer(customRedisProvider, redisPort)
- Just do redisServer.start(). This way you don't need to do additional setup for the Unix server as it will still use default Redis, not the one with Apple Silicon support. Hope this helps.
I moved to using a TestContainer which can pull the docker image that has all architectures.
Update your Mac OS Bigsur to Monterey
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.~
Still error?
Try @mmazurovsky 's solution. It's working well on Bigsur.
- Get redis binary file (arm)
-
$ 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
- Copy
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");
}
}
This comment https://github.com/kstyrc/embedded-redis/issues/135#issuecomment-1770406528
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.