redis 回调会在redis 中执行而不是在我的程序中执行吗?
Will the redis callback be executed in redis and not in my program?
例如我有以下代码:
return (long) redisTemplate.execute(new RedisCallback() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
String redisKey = RedisKeyUtil.getDAUKey(df.format(start), df.format(end));
connection.bitOp(RedisStringCommands.BitOperation.OR,
redisKey.getBytes(), keyList.toArray(new byte[0][0]));
return connection.bitCount(redisKey.getBytes());
}
});
这个doInredis方法会在redis集群中执行,而不会在我的程序中执行吗?
您的 Java 代码不会 运行 在 Redis 中。 Redis 甚至不知道 JVM,所以它根本做不到。
没有。 RedisTemplate
只是一个 Springboot 助手 class,它简化了您的 Redis 数据访问代码,并且它仍然在您的线程中本地执行。
如果您的用例都与基本的 Redis 命令相关,您可以使用 Lua(示例代码 here). However, there is not prefix filtering in list operation, so you probably can also try CompletableFuture
这样您的数据处理就不会阻塞其他操作。
例如我有以下代码:
return (long) redisTemplate.execute(new RedisCallback() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
String redisKey = RedisKeyUtil.getDAUKey(df.format(start), df.format(end));
connection.bitOp(RedisStringCommands.BitOperation.OR,
redisKey.getBytes(), keyList.toArray(new byte[0][0]));
return connection.bitCount(redisKey.getBytes());
}
});
这个doInredis方法会在redis集群中执行,而不会在我的程序中执行吗?
您的 Java 代码不会 运行 在 Redis 中。 Redis 甚至不知道 JVM,所以它根本做不到。
没有。 RedisTemplate
只是一个 Springboot 助手 class,它简化了您的 Redis 数据访问代码,并且它仍然在您的线程中本地执行。
如果您的用例都与基本的 Redis 命令相关,您可以使用 Lua(示例代码 here). However, there is not prefix filtering in list operation, so you probably can also try CompletableFuture
这样您的数据处理就不会阻塞其他操作。