

GitHub - alash3al/redix: a very simple pure key => value storage system that...
source link: https://github.com/alash3al/redix?_v=5.0.0
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Redix v5
redix
is a very simplekey => value
storage engine that speaks redis and even more simpler and flexible.
Why did I build this?
redis
is very simple, sometimes we abuse it, so I decided to build a purekey-value
storage system that introduces the core utilities for building any data structure you want based on thekey => value
model that is because I think that everything could be modeled easily using that model, so I decided to not to follow redis and all of its commands, you won't findlpush
,hset
,sadd
, ... etc you will find a new way to do the same job but more easier and flexable, i.e, the well-knownhset key field value
command could be replaced withset key/field value
, but sometimes you need to return a specific hashmap askey => value
, but you runhget key field
to get the key's value and also it could be replaced withget key/field
, but how could we replacehgetall key
? I will say "it is easy", let's make thehget
command work as a prefix scanner that scan the whole database using the specified prefix and return allkey => value
pairs as redis hashmap response!, soHGETALL
in redix means scan and return the result ashashmap
Features
- A really simple
key => value
store that speaksredis
protocol but with our rules!. - A real system that you can abuse! it isn't intedented for cache only but a "database system".
Async
(all writes happen in the background), orSync
it won't respond to the client before writing to the internal datastore.- Pluggable storage engines, currently it supports
postgresql
, and there may be more engines be introduced in the upcomning releases. - It could be used using
redis
clients easily, i.e: "the famouus redis-cli"
Core Commands
PING
QUIT
FLUSHALL
FLUSHDB
SELECT <DB index>
SET <key> <value> [EX seconds | KEEPTTL] [NX]
TTL <key>
GET <key> [DELETE]
, it has an alias for backward compatibility reasons calledGETDEL <key>
INCR <key> [<delta>]
, it has an alias for backward compatibility reasons calledINCRBY
DEL key [key ...]
HGETALL <prefix>
Fetches the whole data under the specified prefix as a hashmap result
$ 127.0.0.1:6380> set /users/u1 USER_1 OK $ 127.0.0.1:6380> set /users/u2 USER_2 OK $ 127.0.0.1:6380> set /users/u3 USER_3 OK $ 127.0.0.1:6380> hgetall /users/ 1) "u1" 2) "USER_1" 3) "u2" 4) "USER_2" 5) "u3" 6) "USER_3" ## in the hgetall response, redix removed the prefix you specified `/users/`
Configurations
redix
uses HCL for configurations, it is a very simple configuration language, Note thatredix
expands the environment vars in the config file, so you can use any osenv var
easily by wrapping it insize${}
, i.e:${LISTEN_ADDR}
// this is the server block // we may have multiple types of servers in future // for now we have "redis" only server { redis { // the listining address in the format "[hostname]:portnumber" listen = ":6380" // max connections to the same server // 0 means unlimited max_connections = 100 // let redix tries to be async as possible as it can while writing data // this means that the writes will be in background which means redix won't be able to tell // you whether the write succeeded or not! just use this if you will use it as if it were a log-file/streaming-service // this config will result in a very fast writes response as redix won't block until it make sure that the writes are 100% commited! async = false } } // here we select the storage engine engine "postgresql" { // here we define the required information to connect to the underlying datastore // you can pass use an env var here too i.e `dsn = "${PG_URI}"` dsn = "postgresql://postgres@localhost/redix" }
Usage
- Assuming you downloaded the official docker image via
docker pull ghcr.io/alash3al/redix
- Assuming that you have a configurations file called
./redix.hcl
- Just execute
docker run -v $(pwd)/redix.hcl:/etc/redix/redix.hcl -p 6380:6380 ghcr.io/alash3al/redix
- Assuming that the redix-server is listening on localhost on port
6380
- Connect to it using any redis client i.e
$ redis-cli -p 6380
- Nothing else!
TODOs
- Batch Write API via
hmset
?. - Embeded Engine Like
boltdb
.
Contributions
You're welcome!
Recommend
-
55
a super simple stupid event-loop kernel in pure PHP
-
43
README.md Redix a very fast persistent pure key - value store, that uses the same RESP prot...
-
47
a persistent real-time key-value store, with the same redis protocol with powerful features - alash3al/redix
-
43
README.md SQLer SQL-er is a tiny http server that applies the old CGI concept but for SQL queries,...
-
10
re-txt reformates a text file from a structure to another, i.e: convert from json to yaml, toml to json, ... etc Supported Source Formats Supported Target Formats Examples
-
6
xyr [WIP] xyr is a very lightweight, simple, and powerful data ETL platform that helps you to query available data sources using SQL. Example here we d...
-
8
About a very simple, tiny and intuitive ffmpeg wrapper with a cli interface for inspecting & transforming media files supported by the original ffmpeg software. I wanted to learn mo...
-
9
Simple Scraping Tool Scraply, is a very simple html scraping tool, if you know css & jQuery then you can use it! Overview you can use scraply within your stack via
-
8
katch! a very simple wrapper utility for headless chrome to easily export any webpage as png, jpeg, pdf or html (prerender), you can use it via http or...
-
6
alash3al/phoo master
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK