Spring Data Redis:通过UNIX套接字连接

时间:2017-08-22 09:29:36

标签: spring sockets redis unix-socket spring-data-redis

我目前正在研究Redis,以便通过UNIX套接字检索数据。

我已经更新了redis.conf文件以反映这一点,通过定义redis.sock的路径(在我的例子中是/tmp/redis.sock)。

使用Spring Data Redis(通过JedisConnectionFactory),我可以看到它有通过TCP连接到Redis的方法(即定义主机名和端口)。但是,我没有看到有任何方法用于通过UNIX套接字连接(除非我忽略了一些东西)。

有没有人知道如何通过Spring Data Redis使用UNIX套接字连接到Redis?

感谢任何帮助/建议。

3 个答案:

答案 0 :(得分:4)

  

如果不使用第三方(本机)库,Java无法创建或访问Unix域套接字。

这一般是正确的。 Jedis(编写此答案时)没有Unix Domain Socket支持。 LettuceRedisson使用netty进行支持native transports(epoll和kqueue)的I / O.使用Unix域套接字需要本机传输,这取决于底层操作系统。

生菜已整合到Spring Data Redis中,但没有本地运输选项yet

参考文献:

答案 1 :(得分:1)

如果不使用第三方(本机)库,Java无法创建或访问Unix域套接字。

spring-data-redis使用Jedis或Jredis或其他人作为引擎。 Jedis不支持此方法进行连接。我认为其他人也不支持它。因为unix套接字只能在本地机器上使用。

您可以检查此客户端库以确保这一点。

答案 2 :(得分:0)

您可以对socat使用解决方法。这是我为需要访问/var/run/docker.sock的DockerSwarmDiscoveryClient做的,但是我只有Spring WebClient,它仅支持TCP连接。

在Docker上下文中,您可以设置

  daemon:
    image: alpine/socat
    command: tcp-listen:2375,fork,reuseaddr unix-connect:/var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro