Skip to main content

An async redis client library with a minimal api

Project description

reddish - an async redis client with minimal api

Features

  • async/await using trio's stream primitives (TCP, TCP+TLS, Unix domain sockets)
  • minimal api so you don't have to relearn how to write redis commands
  • supports all redis commands including modules except SUBSCRIBE, PSUBSCRIBE and MONITOR [^footnote]
  • parses responses back into python types if you like (powered by pydantic)
  • works with every redis version and supports both RESP2and RESP3 protocols

[^footnote]: Commands like SUBSCRIBE or MONITOR take over the redis connection for listeting to new events barring regular commands from being issued over the connection.

Installation

pip install reddish

Minimal Example

import trio
from reddish import Redis, Command

redis = Redis(await trio.open_tcp_stream('localhost', 6379))

assert b'PONG' == await redis.execute(Command('PING'))

Usage

Commands with a fixed number of arguments

# simple command without any arguments
Command('PING')

# commands with positional arguments
Command('ECHO {}', 'hello world')

# commands with keyword arguments
Command('SET {key} {value}', key='foo', value=42)

Commands with response parsing

# return response unchanged from redis
assert b'42' == await redis.execute(Command('ECHO {}', 42))

# parse response as type
assert 42 == await redis.execute(Command('ECHO {}', 42).into(int))

# use any type that works with pydantic
from pydantic import Json
import json

data = json.dumps({'alice': 30, 'bob': 42})
response == await redis.execute(Command('ECHO {}', data).into(Json))
assert response == json.loads(data)

Commands with variadic arguments

from reddish import Args

# inlining arguments
Command('DEL {keys}', keys=Args(['foo', 'bar']))  # DEL foo bar

# inlining pairwise arguments 
data = {'name': 'bob', 'age': 42}
Command('XADD foo * {fields}', fields=Args.from_dict(data))  # XADD foo * name bob age 42

Pipelining commands

foo, bar = await redis.execute(Command('GET', 'foo'), Command('GET', 'bar'))

Transactions

from reddish import MultiExec

tx = MultiExec(
    Command('ECHO {}', 'foo'),
    Command('ECHO {}', 'bar')
)

foo, bar = await redis.execute(tx)

# pipelining together with transactions
[foo, bar], baz = await redis.execute(tx, Command('ECHO {}', 'baz'))

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reddish-0.2.2.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

reddish-0.2.2-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file reddish-0.2.2.tar.gz.

File metadata

  • Download URL: reddish-0.2.2.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.8 CPython/3.9.8 Linux/5.11.0-1020-azure

File hashes

Hashes for reddish-0.2.2.tar.gz
Algorithm Hash digest
SHA256 88b532958add632af7852640475cedba6a48b5c72a5cd8c1a5657158096b50e2
MD5 875cc4afd9e3ee5ec0cbf1378cbacf83
BLAKE2b-256 4a20d13fc8735bf454ed2988716d0d914acf7a67034f32ab7ee289458999f696

See more details on using hashes here.

File details

Details for the file reddish-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: reddish-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.8 CPython/3.9.8 Linux/5.11.0-1020-azure

File hashes

Hashes for reddish-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 799dcebec75c4448bb0a816602b17f15912522ca5c2b00a1af7060c20a52e019
MD5 1dbe8f7bd17e63d6160344cdada480d9
BLAKE2b-256 d137d15ac433c18a6f15771f808ec5f0791b986594e6cd1d0370202aa3d12554

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page