Skip to main content

GredisQL

A GraphQL interface for Redis Database.

Version Information

Current Version: 0.0.9

Update History

Version 0.0.9 (Latest)

  • Added support for Redis Sorted Sets operations
  • Added support for Redis Hash operations
  • Improved type handling for GraphQL responses
  • Fixed GraphQL schema type definitions
  • Added comprehensive test suite

Version 0.0.8

  • Added support for Redis List operations
  • Added support for Redis Set operations
  • Improved error handling

Version 0.0.7

  • Initial release with basic Redis operations
  • Support for String operations
  • Basic GraphQL interface implementation

How To Install

pip install gredisql

If you find this project interesting, you can always appreciate it by giving it a Star. :D

A Background of GredisQL

background_image

Motivation

  1. I was bored, been sick for a while, had to lie on the bed. So I needed to create something.
  2. Redis has Web interface ( actually a REST interface), so I urged to build one in GraphQL.
  3. There are some pretty amazing GraphQL libraries around python echo system, I wanted to try them.
  4. Last but not least, jump into quick coding session, engage and nurture the human mind. LOL

Design Philosophy

  1. All the data mutation and query are not separated here by action and most probably all the actions are performed via query operation.
  2. Technically all the requests sent to the GraphQL server was in POST, so I was initially okay with the implementation.
  3. Strawberry-Graphql is kind of server agnostic so either you can use ASGI or WSGI counterpart.
  4. Currently limiting the implementation with WSGI server, but I've plan to adopt ASGI in the journey, to support subscription.
  5. Not all Redis commands are found in the implementation, I'll try to cover it in the process.

Inspiration and Tools I used

  1. redis==5.0.0 is used to communicate with the Redis database.
  2. strawberry-graphql is used to do the heavy lifting. Also, I tried ariadne which is also another cool tool to try with.

Features and Future Plans

  1. String Commands

    • GET, SET, MSET, MGET
    • INCRBY, DECRBY, INCRBYFLOAT
    • APPEND, GETEX, GETDEL
    • EXPIRE, EXPIREAT
    • KEYS, EXISTS, DELETE
  2. List Commands

    • LPUSH, RPUSH
    • LPOP, RPOP
    • LRANGE
    • LLEN
  3. Set Commands

    • SADD, SCARD
    • SDIFF, SDIFFSTORE
    • SINTER, SINTERSTORE
    • SISMEMBER, SMEMBERS
    • SMOVE, SPOP
  4. Hash Commands

    • HSET, HGET
    • HGETALL
    • HDEL
    • HLEN
    • HKEYS, HVALS
  5. Sorted Set Commands

    • ZADD
    • ZRANGE, ZREVRANGE
    • ZCARD
    • ZSCORE
    • ZREM
    • ZCOUNT

And many more to come in the future iteration.

Example GraphQL Queries

String Operations

query {
  set(name: "mykey", value: "myvalue")
  get(name: "mykey")
  mset(
    mappings: [
      { key: "key1", value: "value1" }
      { key: "key2", value: "value2" }
    ]
  )
  mget(keys: ["key1", "key2"])
}

List Operations

query {
  lpush(name: "mylist", values: ["one", "two", "three"])
  lrange(name: "mylist", start: 0, end: -1)
  llen(name: "mylist")
}

Hash Operations

query {
  hset(name: "myhash", key: "field1", value: "value1")
  hget(name: "myhash", key: "field1")
  hgetall(name: "myhash")
}

Sorted Set Operations

query {
  zadd(name: "myset", mapping: {"member1": 1.0, "member2": 2.0})
  zrange(name: "myset", start: 0, end: -1, withscores: true)
  zcard(name: "myset")
}

Quick Starting the GraphQL Server

if __name__ == "__main__":
    from gredisql.core import Server

    server = Server()
    server.run()

You can specify the host, port and debug mode in while instantiating the GraphQL server. Simply write,

if __name__ == "__main__":

    REDIS_HOST = 'redis-4343.c8.us-east-1-4.ec2.cloud.redislabs.com'
    REDIS_PORT = 16292
    REDIS_PASSWORD = 'your-secret-password'

    from gredisql.core import Server

    server = Server(
         REDIS_HOST=REDIS_HOST,
         REDIS_PORT=REDIS_PORT,
         REDIS_PASSWORD=REDIS_PASSWORD
    )
    server.run()

Now navigate to http://localhost:5055/graphql and voilà.

Release files for gredisql 0.0.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gredisql 0.0.11
File Size Uploaded
gredisql-0.0.11.tar.gz 6.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gredisql 0.0.11
File Interpreter ABI Platform
gredisql-0.0.11-py3-none-any.whl Python 3 none any Details

Total release size: 12.9 kB

Release files / gredisql-0.0.11.tar.gz

Download URL gredisql-0.0.11.tar.gz
Size 6.6 kB
Tags Source
SHA-256 checksum
How to use checksums
3b288dadcaf25a96895f6f19f6a73bf1c05ee057322d69ec6a43c41352c6e5d5
BLAKE2b-256 checksum
How to use checksums
6f1eaff49f5fee361daf695b1c89f67558449ca7fbac5d14e5624fdd065a3bf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.8.10

Release files / gredisql-0.0.11-py3-none-any.whl

Download URL gredisql-0.0.11-py3-none-any.whl
Size 6.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04f9aad50011783533c7920285750e27bca4edf3f8f6907106058ed32a5fba23
BLAKE2b-256 checksum
How to use checksums
e98dc32d65f098bf361ab00c0cf558593831e1b9fc385e87159950a1bc44a0ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.8.10

Release history Release notifications | RSS feed

This release

0.0.11 This release

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page