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

时间:2013-01-07 14:30:28

标签: haskell redis connection-string unix-socket

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

  

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

ConnectInfo的构造函数以及defaultConnectInfo,似乎我们应该填写connectPort,因为它的类型PortID有一个构造函数名为UnixSocket。但它只显示UnixSocketString,没有格式细节等。

那么如何填写connectPort通过Unix域套接字连接?感谢。


更新:我试了一下,发现并不难。以下是我的问候世界。

{-# 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 个答案:

答案 0 :(得分:7)

我根本不是Haskell用户,我无法测试它,但我会说你只需要在这个字符串中提供套接字文件的路径。

而不是:

connectPort           = PortNumber 6379
你会得到:

connectPort           = UnixSocket "/tmp/redis.sock"

当然,应使用以下参数在服务器端Redis配置文件中声明/tmp/redis.sock:

# 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域套接字参数已注释掉。