我目前正在研究Redis,以便通过UNIX套接字检索数据。
我已经更新了redis.conf文件以反映这一点,通过定义redis.sock的路径(在我的例子中是/tmp/redis.sock)。
使用Spring Data Redis(通过JedisConnectionFactory
),我可以看到它有通过TCP连接到Redis的方法(即定义主机名和端口)。但是,我没有看到有任何方法用于通过UNIX套接字连接(除非我忽略了一些东西)。
有没有人知道如何通过Spring Data Redis使用UNIX套接字连接到Redis?
感谢任何帮助/建议。
答案 0 :(得分:4)
如果不使用第三方(本机)库,Java无法创建或访问Unix域套接字。
这一般是正确的。 Jedis(编写此答案时)没有Unix Domain Socket支持。 Lettuce和Redisson使用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