9

我正在寻找如何使用hedis通过Unix域套接字连接到redis服务器,如hackage页面中所宣传的那样:

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

从 和 的构造函数看来,我们应该填写,ConnectInfo因为它的类型有一个名为 的构造函数。但它只显示是一个,没有格式等细节。defaultConnectInfoconnectPortPortIDUnixSocketUnixSocketString

那么如何填写connectPortto connect via Unix domain socket呢?谢谢。


更新:我试过了,发现它并不难。下面是我的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)
4

1 回答 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 域套接字参数被注释掉。

于 2013-01-07T15:45:56.480 回答