hask-redis-mux: A RESP protocol implementation and multiplexed Redis client library

[ library, mit, network ] [ Propose Tags ] [ Report a vulnerability ]

hask-redis-mux provides a full RESP protocol parser, Redis client with TLS support, CRC16 hash slot computation, and a multiplexed Redis Cluster client with connection pooling and automatic topology discovery.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1
Change log CHANGELOG.md
Dependencies attoparsec (>=0.14 && <0.15), base (>=4.19 && <4.22), bytestring (>=0.12 && <0.13), containers (>=0.6 && <0.8), crypton-x509-system (>=1.6 && <1.7), data-default-class (>=0.1 && <0.3), dns (>=4.2 && <4.3), file-embed (>=0.0.16 && <0.1), hask-redis-mux, iproute (>=1.7 && <1.8), mtl (>=2.3 && <2.4), network (>=3.2 && <3.3), stm (>=2.5 && <2.6), text (>=2.1 && <2.2), time (>=1.12 && <1.13), tls (>=2.1 && <2.2), vector (>=0.13 && <0.14) [details]
Tested with ghc ==9.10.3
License MIT
Author Seth Speaks
Maintainer sspeaks610@gmail.com
Uploaded by sspeaks at 2026-02-17T00:47:24Z
Category Network
Home page https://github.com/sspeaks/redis-client
Bug tracker https://github.com/sspeaks/redis-client/issues
Source repo head: git clone https://github.com/sspeaks/redis-client.git
Distributions
Downloads 4 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2026-02-17 [all 1 reports]

Readme for hask-redis-mux-0.1.0.1

[back to package description]

hask-redis-mux

Hackage CI

A multiplexed Redis client library for Haskell with full RESP protocol support, Redis Cluster topology discovery, connection pooling, and TLS.

Features

  • Standalone & Cluster — works with single-node Redis and Redis Cluster
  • Multiplexed pipelining — concurrent commands share a single TCP connection
  • Typed returns via FromResp — parse responses as ByteString, Integer, Text, Bool, or custom types
  • TLS support — connect over TLS with crypton
  • Bracket-style resource managementwithStandaloneClient / withClusterClient for exception-safe cleanup
  • Connection pooling — automatic pool management for cluster nodes

Installation

Add to your .cabal file:

build-depends: hask-redis-mux >= 0.1 && < 0.2

Quick Start

{-# LANGUAGE OverloadedStrings #-}
import Database.Redis

main :: IO ()
main = do
  -- Connect to localhost:6379, run commands, auto-close
  result <- runRedis defaultStandaloneConfig $ do
    set "greeting" "hello"
    (val :: ByteString) <- get "greeting"
    return val
  print result  -- "hello"

Typed Returns with FromResp

Commands return polymorphic types via the FromResp typeclass. Just add a type annotation and the response is parsed automatically:

runRedis defaultStandaloneConfig $ do
  set "counter" "42"

  (n :: Integer)      <- get "counter"   -- 42
  (bs :: ByteString)  <- get "counter"   -- "42"
  (mt :: Maybe Text)  <- get "missing"   -- Nothing
  (ok :: Bool)        <- set "k" "v"     -- True (from +OK)

Use bracket-style functions for exception-safe resource management:

-- Standalone
withStandaloneClient config $ \client ->
  runStandaloneClient client $ do
    set "key" "value"
    get "key"

-- Cluster
withClusterClient clusterConfig connector $ \client ->
  runClusterCommandClient client $ do
    set "key" "value"
    get "key"

Custom Configuration

import Database.Redis

main :: IO ()
main = do
  let config = StandaloneConfig
        { standaloneNodeAddress     = NodeAddress "redis.example.com" 6379
        , standaloneConnector       = clusterPlaintextConnector
        , standaloneMultiplexerCount = 4  -- 4 multiplexed connections
        }
  withStandaloneClient config $ \client ->
    runStandaloneClient client $ do
      set "key" "value"

Documentation

License

MIT — see LICENSE for details.