ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - heroku/redo: pipelined erlang redis client
pipelined erlang redis client. Contribute to heroku/redo development by creating an account on GitHub.
Visit Site

GitHub - heroku/redo: pipelined erlang redis client

GitHub - heroku/redo: pipelined erlang redis client

Philosophy

If you wish to write a redis client from scratch, you must first invent the universe.

About

Redo is a pipelined redis client written in Erlang. It lacks any sort of syntactic sugar. The only API function is redo:cmd, which takes a raw redis command.

Build

$ make

Test

Unit tests

$ ./rebar eunit suite=redo

Local read benchmark

$ erl -pa ebin
1> bench:sync(1000).
91ms
10989 req/sec

2> bench:async(1000, 100).
38ms
26315 req/sec

Concurrency test

$ erl -pa ebin
1> redo_concurrency_test:run(20, 100). %% 20 pids, 100 random operations performed per pid

Start

No arguments: register process as "redo"

$ erl -pa ebin
1> redo:start_link().
{ok, <0.33.0>
2> whereis(redo).
<0.33.0>
3> redo:cmd(["PING"]).  
<<"PONG">>

Register with custom name

erl -pa ebin
1> redo:start_link(myclient).
{ok,<0.33.0>}
2> whereis(myclient).
<0.33.0>
8> redo:cmd(myclient, ["PING"]).  
<<"PONG">>

Start anonymous Redo process

erl -pa ebin
1> {ok, Pid} = redo:start_link(undefined).
{ok,<0.33.0>}
2> redo:cmd(Pid, ["PING"]).
<<"PONG">>

Specifying connection options

erl -pa ebin
1> redo:start_link([{host, "localhost"}, {port, 6379}]).
{ok,<0.33.0>}
2> redo:cmd(["PING"]).
<<"PONG">>

3> redo:start_link(myclient, [{host, "localhost"}, {port, 6379}]).
{ok,<0.37.0>}
4> redo:cmd(myclient, ["PING"]).
<<"PONG">>

Commands

erl -pa ebin
1> redo:start_link().
<0.33.0>
2> redo:cmd(["SET", "foo"]).
{error,<<"ERR wrong number of arguments for 'set' command">>}
3> redo:cmd(["SET", "foo", "bar"]).
<<"OK">>
4> redo:cmd(["GET", "foo"]).
<<"bar">>
5> redo:cmd(["HMSET", "hfoo", "ONE", "ABC", "TWO", "DEF"]).
<<"OK">>
6> redo:cmd(["HGETALL", "hfoo"]).
[<<"ONE">>,<<"ABC">>,<<"TWO">>,<<"DEF">>]

Pipelined commands

1> redo:start_link().
<0.33.>
2> redo:cmd([["GET", "foo"], ["HGETALL", "hfoo"]]).
[<<"bar">>, [<<"ONE">>,<<"ABC">>,<<"TWO">>,<<"DEF">>]]

Pub/Sub

$ erl -pa ebin
1> redo:start_link().
{ok,<0.33.0>}
2> Ref = redo:subscribe("chfoo").
#Ref<0.0.0.42>
3> (fun() -> receive {Ref, Res} -> Res after 10000 -> timeout end end)().
[<<"subscribe">>,<<"chfoo">>,1]
4> redo:start_link(client).  
{ok,<0.39.0>}
5> redo:cmd(client, ["PUBLISH", "chfoo", "hello"]).
1
6> (fun() -> receive {Ref, Res} -> Res after 10000 -> timeout end end)().
[<<"message">>,<<"chfoo">>,<<"hello">>]

%% restart redis server...

7> (fun() -> receive {Ref, Res} -> Res after 10000 -> timeout end end)().
closed
8> f(Ref).
ok
9> Ref = redo:subscribe("chfoo").                                        
#Ref<0.0.0.68>
10> (fun() -> receive {Ref, Res} -> Res after 10000 -> timeout end end)().
[<<"subscribe">>,<<"chfoo">>,1]
11> redo:cmd(client, ["PUBLISH", "chfoo", "hello again"]).
1
12> (fun() -> receive {Ref, Res} -> Res after 10000 -> timeout end end)().
[<<"message">>,<<"chfoo">>,<<"hello again">>]

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory