Skip to main content

Functional Redis

A simple Redis client in tune with Functional Programming principles in JavaScript for Deno.

deno land deno version GitHub release GitHub licence

Redis Request

The RedisRequest represents a Redis request. It has three attributes: the first is the Redis command, the second is a typed array named β€œraw”, the last is an array of arguments. The RedisRequest type is mostly interoperable with Resource, File, (HTTP) Request and (HTTP) Response.

The RedisRequest type implements the following algebras:

  • Group
  • Comonad
  • Monad

Example

import RedisRequest from "https://deno.land/x/functional-redis@v0.1.1/library/RedisRequest.js";

const redisRequest = RedisRequest("GET", new Uint8Array([]), [ "hoge" ]);

assert(RedisRequest.is(redisRequest));

A Symbol named rawPlaceholder may be used as a placeholder for the buffer. In the following example, the request will resolve to: SET hoge piyo.

import { encodeText } from "https://deno.land/x/functional@v1.2.1/library/utilities.js";
import RedisRequest from "https://deno.land/x/functional-redis@v0.1.1/library/RedisRequest.js";
import { $$rawPlaceholder } from "https://deno.land/x/functional-redis@v0.1.1/library/Symbol.js";

const redisRequest = RedisRequest("SET", encodeText("piyo"), [ "hoge", $$rawPlaceholder ]);

assert(RedisRequest.is(redisRequest));

The placeholder can be used multiple times if the buffer has multiple values separated by CLRF (\r\n).

import { encodeText } from "https://deno.land/x/functional@v1.2.1/library/utilities.js";
import RedisRequest from "https://deno.land/x/functional-redis@v0.1.1/library/RedisRequest.js";
import { $$rawPlaceholder } from "https://deno.land/x/functional-redis@v0.1.1/library/Symbol.js";

const redisRequest = RedisRequest(
  "MSET",
  encodeText("piyo\r\nfuga"),
  [ "hoge", $$rawPlaceholder, "hogefuga", $$rawPlaceholder ]
);

assert(RedisRequest.is(redisRequest));

Utilities

The RedisRequest namespace comes with methods for convenience to create an instance of RedisRequest with various commands. The methods are curried.

RedisRequest.append πŸ“•

RedisRequest ~> append :: String -> String|Uint8Array -> RedisRequest

RedisRequest.bitcount πŸ“•

RedisRequest ~> bitcount :: String -> Number[] -> RedisRequest

RedisRequest.bitop πŸ“•

RedisRequest ~> bitop :: String -> String -> String[] -> RedisRequest

RedisRequest.bitpos πŸ“•

RedisRequest ~> bitpos :: String -> Number[] -> RedisRequest

RedisRequest.decr πŸ“•

RedisRequest ~> decr :: String -> RedisRequest

RedisRequest.decrby πŸ“•

RedisRequest ~> decrby :: String -> Number -> RedisRequest

RedisRequest.get πŸ“•

RedisRequest ~> get :: String -> RedisRequest

RedisRequest.getbit πŸ“•

RedisRequest ~> getbit :: String -> Number -> RedisRequest

RedisRequest.getrange πŸ“•

RedisRequest ~> getrange :: String -> Number[] -> RedisRequest

RedisRequest.getset πŸ“•

RedisRequest ~> getset :: String -> String|Uint8Array -> RedisRequest

RedisRequest.incr πŸ“•

RedisRequest ~> incr :: String -> RedisRequest

RedisRequest.incrby πŸ“•

RedisRequest ~> incrby :: String -> Number -> RedisRequest

RedisRequest.incrbyfloat πŸ“•

RedisRequest ~> incrbyfloat :: String -> Number -> RedisRequest

RedisRequest.mget πŸ“•

RedisRequest ~> mget :: (...String) -> RedisRequest

RedisRequest.mset πŸ“•

RedisRequest ~> mset :: String[] -> [Uint8Array ->] RedisRequest

RedisRequest.msetnx πŸ“•

RedisRequest ~> msetnx :: String[] -> [Uint8Array ->] RedisRequest

RedisRequest.psetex πŸ“•

RedisRequest ~> psetex :: Number -> String -> String|Uint8Array -> RedisRequest

RedisRequest.set πŸ“•

RedisRequest ~> set :: String -> String|Uin8Array -> RedisRequest

RedisRequest.setbit πŸ“•

RedisRequest ~> setbit :: String -> Number -> String|Uin8Array -> RedisRequest

RedisRequest.setex πŸ“•

RedisRequest ~> setex :: Number -> String -> String|Uint8Array -> RedisRequest

RedisRequest.setnx πŸ“•

RedisRequest ~> setnx :: String -> String|Uint8Array -> RedisRequest

RedisRequest.setrange πŸ“•

RedisRequest ~> setrange :: String -> Number -> String|Uint8Array -> RedisRequest

RedisRequest.stralgo πŸ“•

RedisRequest ~> stralgo :: String[] -> RedisRequest

RedisRequest.strlen πŸ“•

RedisRequest ~> strlen :: String -> RedisRequest