2013-01-07 22 views
8

Sto cercando come connettersi a un server Redis via socket di dominio Unix utilizzando hedis, come pubblicizzato nella pagina hackage:Come connettersi a un server redis tramite socket di dominio Unix usando hedis in Haskell?

Collegare tramite TCP o Unix Domain Socket:
socket TCP sono il modo predefinito per connettersi a un server Redis. Per le connessioni a un server sulla stessa macchina , i socket di dominio Unix offrono prestazioni superiori rispetto alla connessione TCP standard .

Dai costruttori di ConnectInfo, così come il defaultConnectInfo, sembra che si debba compilare il connectPort, dal momento che è di tipo PortID che ha un costruttore di nome UnixSocket. Ma mostra soloè un String, senza dettagli di formato, ecc.

Quindi, come compilare il connectPort per connettersi tramite socket di dominio Unix? Grazie.


UPDATE: ho provato e l'ho trovato non è così difficile. Di seguito è il mio mondo ciao.

{-# 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) 

risposta

7

Io non sono un utente Haskell a tutti, e non posso provarlo, ma direi che è sufficiente per fornire il percorso del file di socket in questa stringa.

Invece di:

connectPort   = PortNumber 6379 

si avrebbe:

connectPort   = UnixSocket "/tmp/redis.sock" 

Naturalmente, /tmp/redis.sock deve essere dichiarata nel file di configurazione Redis lato server utilizzando i seguenti parametri:

# 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 

Nota per impostazione predefinita, i parametri di unix domain socket sono commentati.