如何在Haskell中使用hedis通过Unix域套接字连接到Redis服务器?

9
我想知道如何使用 hedis 通过 Unix 域套接字连接到 Redis 服务器,正如 hackage 页面中所宣传的:

通过 TCP 或 Unix Domain Socket 连接:
TCP 套接字是连接 Redis 服务器的默认方式。对于连接同一台机器上的服务器,Unix 域套接字比标准的 TCP 连接提供更高的性能。

ConnectInfo 的构造函数以及defaultConnectInfo来看,似乎我们应该填写connectPort,因为它具有类型PortID,其中有一个名为UnixSocket的构造函数。但是它只显示UnixSocket是一个字符串,没有详细说明格式等。
那么如何填写connectPort才能通过 Unix 域套接字连接?谢谢。
更新:我尝试过了,发现并不难。以下是我的 Hello World。
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Trans
import Database.Redis

myConnectInfo :: ConnectInfo
myConnectInfo = defaultConnectInfo { connectPort = UnixSocket "/tmp/redis.sock" }

main :: IO ()
main = do
    conn <- connect myConnectInfo
    runRedis conn $ do
        set "hello" "hello"
        set "world" "world"
        hello <- get "hello"
        world <- get "world"
        liftIO $ print (hello,world)
1个回答

7
我是一名不使用Haskell的用户,无法进行测试,但我认为您只需在此字符串中提供套接字文件的路径即可。
而不是:
connectPort           = PortNumber 6379

如果你拥有以下技能:

connectPort           = UnixSocket "/tmp/redis.sock"

当然,/tmp/redis.sock应该在服务器端Redis配置文件中使用以下参数声明:
# Specify the path for the unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
unixsocket /tmp/redis.sock
unixsocketperm 755

请注意,默认情况下,Unix域套接字参数是被注释掉的。

你为什么要在这里使用755作为套接字权限?有没有时候需要让每个人都拥有套接字的执行和读取权限? - catleeball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接