首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GCP memorystore redis实例中安装redisearch模块

如何在GCP memorystore redis实例中安装redisearch模块
EN

Stack Overflow用户
提问于 2020-06-10 23:52:22
回答 2查看 587关注 0票数 0

我需要在GCP memorystore redis实例上安装RediSearch模块。

我按照以下步骤操作:

docker run -p 6379:6379 redislabs/redisearch:latest

我将此docker镜像推送到Kubernetes集群,并公开了外部IP。我使用该外部IP和6379端口作为configuration for my application,但我无法连接到RediSearch。

代码:

代码语言:javascript
复制
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.PipelineResult;
import org.apache.beam.sdk.options.Default;
import org.apache.beam.sdk.options.Description;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.Create;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.redisearch.client.Client;
import io.redisearch.*;


public class RediSearch {



    static Client client = new Client("testdoc1", "clusteripaddress", 8097);
    private static final Logger LOG = LoggerFactory.getLogger(RediSearch.class);

    public interface Options extends PipelineOptions {

        @Description("gcp project id.")
        @Default.String("XXXX")
        String getProjectId();
        void setProjectId(String projectId);
    }

    public static PipelineResult run(Options options) throws IOException {

        Pipeline pipeline = Pipeline.create(options);

        pipeline.apply(Create.of("test"))
        .apply(ParDo.of(new DoFn<String, String>() {
            private static final long serialVersionUID = 1L;
            @ProcessElement
            public void processElement(ProcessContext c) throws Exception {     
                String pubsubmsg = c.element();                 

                Schema sc = new Schema()
                .addTextField("title", 5.0)
                .addTextField("body", 1.0)
                .addNumericField("price");

            client.createIndex(sc, Client.IndexOptions.Default());

            Map<String, Object> fields = new HashMap<String, Object>();
            fields.put("title", "hello world");
            fields.put("body", "lorem ipsum");
            fields.put("price", 800);
            fields.put("price", 1337);
            fields.put("price", 2000);

            client.addDocument("searchdoc3", fields);

            SearchResult[] res = client.searchBatch(new Query("hello world").limit(0, 5).setWithScores());      

            for (Document d : res[0].docs) {
                LOG.info("redisearchlog{}",d.getId().startsWith("search"));
                LOG.info("redisearchlog1{}",d.getProperties());
                LOG.info("redisearchlog2{}",d.toString());
            }


            }
        }));    


        return pipeline.run();
    }

    public static void main(String[] args) throws IOException {

        Options options = PipelineOptionsFactory.fromArgs(args).as(Options.class);
        run(options);

    }
}

错误:

代码语言:javascript
复制
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.jedis.util.Pool.getResource(Pool.java:59)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:234)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:15)
at io.redisearch.client.Client._conn(Client.java:137)
at io.redisearch.client.Client.getAllConfig(Client.java:275)
at com.testing.redisearch.RediSearch$1.processElement(RediSearch.java:59)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host xxxxxxxxxxx:6379
at redis.clients.jedis.Connection.connect(Connection.java:204)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:100)
at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1894)
at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:117)
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:424)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:349)
at redis.clients.jedis.util.Pool.getResource(Pool.java:50)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:234)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:15)
at io.redisearch.client.Client._conn(Client.java:137)
at io.redisearch.client.Client.getAllConfig(Client.java:275)
at com.testing.redisearch.RediSearch$1.processElement(RediSearch.java:59)
at com.testing.redisearch.RediSearch$1$DoFnInvoker.invokeProcessElement(Unknown Source)
at org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:218)
at org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.SimpleDoFnRunner.processElement(SimpleDoFnRunner.java:183)
at org.apache.beam.runners.dataflow.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:335)
at org.apache.beam.runners.dataflow.worker.util.common.worker.ParDoOperation.process(ParDoOperation.java:44)
at org.apache.beam.runners.dataflow.worker.util.common.worker.OutputReceiver.process(OutputReceiver.java:49)
at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.runReadLoop(ReadOperation.java:201)
at org.apache.beam.runners.dataflow.worker.util.common.worker.ReadOperation.start(ReadOperation.java:159)
at org.apache.beam.runners.dataflow.worker.util.common.worker.MapTaskExecutor.execute(MapTaskExecutor.java:77)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.executeWork(BatchDataflowWorker.java:411)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.doWork(BatchDataflowWorker.java:380)
at org.apache.beam.runners.dataflow.worker.BatchDataflowWorker.getAndPerformWork(BatchDataflowWorker.java:305)
at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.doWork(DataflowBatchWorkerHarness.java:140)
at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:120)
at org.apache.beam.runners.dataflow.worker.DataflowBatchWorkerHarness$WorkerThread.call(DataflowBatchWorkerHarness.java:107)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:181)
... 31 more

欢迎使用任何解决方案。

EN

回答 2

Stack Overflow用户

发布于 2020-06-18 16:55:24

根据错误JedisConnectionException: Could not get a resource from the pool,有多种原因。根据this question的回答,问题是无法建立到RediSearch的连接,可能是因为Redis没有运行,连接超时或无法分配。

无论如何,我已经注意到,即使您在端口6379上部署了Redis,在您的代码中,您仍试图在端口8097上访问它。请将您的客户端声明更改为以下内容,然后重试连接。

代码语言:javascript
复制
static Client client = new Client("testdoc1", "<cluster_ip_address>", 6379);
票数 0
EN

Stack Overflow用户

发布于 2020-09-25 06:03:09

如果您希望在内存存储实例中包含RediSearch模块,则可能还不支持该模块。您可以在the google cloud docs here中看到,在撰写本文时,即使是5.0版本,redis模块也不受支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62307791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档