Radish is a super fast drop-in replacement of the in memory key-value store redis, built with golang.
Why? Redis recently (Last week, as of Mar 25 2024) changed their license to a dual 'source-available' license - which means that it can't be used for commercial purposes without paying for a license. Everyone hated it. This is a problem for many companies and developers who use redis in their projects.
And, I was kinda bored and wanted to learn golang properly, so I built this.
Should you use this in production? Probably, probably not. It's not battle tested yet, but i (as a single person team) have tried to do my best to make it as reliable as possible.
I even made a cute mascot (Godis crushing Redis)
Annddd all i ask in return is a little β so that i dont have to rely on twitter for my dopamine hit.
| Feature | Redis | Radish |
|---|---|---|
| In-memory key-value store | β | β |
| Strings | β | β |
| Lists | β | β |
| Sets | β | β |
| Sorted sets | β | β |
| Hashes | β | β |
| Streams | β | β |
| HyperLogLogs | β | β |
| Bitmaps | β | β |
| Persistence | β | β |
| Pub/Sub | β | β |
| Transactions | β | β |
| Lua scripting | β | β |
| LRU eviction | β | β |
| TTL | β | β |
| Clustering | β | β |
| Auth | β | β |
For now, these commands are available (more to come)
INFO PING FLUSHALL SHUTDOWN SAVE BGSAVE
DEL EXISTS KEYS EXPIRE TTL
SET GET APPEND INCR INCRBY DECR DECRBY MSET MGET
LPUSH LPOP RPUSH RPOP LRANGE LLEN
HSET HGET HMSET HMGET HGETALL HDEL
SADD SMEMBERS SISMEMBER SREM
ZADD ZRANGE ZREM
SUBSCRIBE PUBLISH UNSUBSCRIBE
MULTI EXEC DISCARD
To get it up and running instantly, you can use the docker image
docker run -d -p 6379:6379 dhravyashah/radish
go install github.com/dhravya/radish@latest && radish
and then just build and run the binary
Download the binary executables from ./bin/radish.
Click here to get it instantly.
This IS compatible with the existing redis tooling and client libraries! Try it out with some of them.
For eg.
npm i -g redis-cli
(make sure the server is running - docker is the easiest and fastest way)
β― rdcli
127.0.0.1:6379> incr mycounter
(integer) 1
127.0.0.1:6379> incr mycounter
(integer) 2
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
bar
127.0.0.1:6379> get bar
(nil)
radish is completely open source. If you want to contribute, please create an issue on the repo and I will assign the task to someone (or you).
Steps to contribute:
- Clone the repo
git clone https://github.com/dhravya/radish
-
Create a new branch
-
Make sure to build and test the code before creating a PR
go build -o ./bin
- Create a PR
If you need any help, or want to ask questions, or suggest features, please feel free to DM me on twitter - https://dm.new/dhravya or create an issue on the repo.
You can also join our Discord server where we have a community of developers ready to help you out.
Unlike redis, radish is licensed under the MIT license. You can use it for commercial purposes without any restrictions. Go wild!