java—如何将自己的执行器传递给redis库?

0dxa2lsx  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(320)

我有下面的代码从redis异步获取数据。默认情况下,库中的get()调用使用nio事件线程池。
代码1:

StatefulRedisConnection<String, String> connection = redisClient.connect();
RedisAsyncCommands<String, String> command = connection.async();
CompletionStage<String> result = command.get(id)
        .thenAccept(code -> 
                     logger.log(Level.INFO, "Thread Id " + Thread.currentThread().getName());
                     //Sample code to print thread ID

打印的线程id是莴苣-nioeventloop-6-2。
代码2:

CompletionStage<String> result = command.get(id)
            .thenAcceptAsync(code -> {
                         logger.log(Level.INFO, "Thread Id " + Thread.currentThread().getName());
              //my original code
}, executors);

打印的线程id是pool-1-thread-1。
我的问题:
有办法通过我的遗嘱执行人吗?
建议使用nio事件线程池(使用get()调用)从redis获取数据吗?
莴苣版本:5.2.2.release
谢谢,阿肖克

xa9qqrwz

xa9qqrwz1#

班级 io.lettuce.core.RedisClient 具有创建者方法:

public static RedisClient create(ClientResources clientResources, String uri) {
        assertNotNull(clientResources);
        LettuceAssert.notEmpty(uri, "URI must not be empty");
        return create(clientResources, RedisURI.create(uri));
    }

你可以建立你的 ClientResourcesClientResources#builder() ,传递任何你想要的东西。参考javadoc,您可以自定义以下内容:
eventloopgroupprovider以获取特定的eventloopgroups
执行内部计算任务的EventExecutor组
调度计时器
用于客户端事件调度的eventbus
事件发布选项
commandlatencycollector收集延迟详细信息。需要hdrhistogram库。
dnsresolver收集延迟详细信息。需要latencyutils库。
重新连接延迟。
跟踪到跟踪redis命令。

相关问题