The Redis extension adds a minimal client for Redis-compatible servers using the hiredis C library. It currently exposes a simple synchronous API; Async I/O through Fun’s event loop will be added later.

Requirements

  • Build-time option: -DFUN_WITH_REDIS=ON
  • System libraries: hiredis headers and library available (via pkg-config or default linker search paths)
  • Runtime: a Redis-compatible server (e.g., on 127.0.0.1:6379)

Enabling the extension

Example CMake configure line enabling Redis along with other options:

cmake -S . -B build_release -DCMAKE_BUILD_TYPE=Release \
  -DFUN_WITH_REDIS=ON -DFUN_WITH_OPENSSL=ON

When configured, the build summary will include a line:

Redis (FUN_WITH_REDIS): ENABLED

Provided builtins/opcodes

  • redis_connect(host: string, port: int) -> int
    • Establishes a TCP connection and returns a positive handle id on success, or 0 on error.
    • Example: h = redis_connect('127.0.0.1', 6379)
  • redis_cmd(handle: int, cmd: string) -> Value
    • Executes a Redis inline command string and returns the reply as a Fun value.
    • Reply mapping:
      • Status/String -> string
      • Integer -> number
      • Nil -> nil
      • Array -> array of recursively converted values
    • Example: print(redis_cmd(h, 'PING'))PONG
  • redis_close(handle: int) -> Nil
    • Closes the connection associated with the handle and frees resources.

Notes and limitations

  • Error handling: invalid handles or failed commands yield nil or an empty/neutral value depending on context.
  • Security: this initial version does not include TLS; TLS support may be added in a future iteration once hiredis SSL is wired in.
  • Async: the current API is synchronous. Integration with Fun’s asyncio is planned.

Examples

Runnable examples are included in the source tree:

  • examples/extensions/redis/basic_ping.fun
  • examples/extensions/redis/kv_set_get.fun
  • examples/extensions/redis/list_ops.fun
  • examples/extensions/redis/hash_ops.fun

Quick start (from repo root, using a built Fun executable):

build_debug/fun examples/extensions/redis/basic_ping.fun

Troubleshooting

  • Ensure a Redis server is reachable at the host/port you pass to redis_connect.
  • If redis_connect returns 0, verify the hiredis library and headers are installed and that Fun was configured with -DFUN_WITH_REDIS=ON.

Comments