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
docker
To get it up and running instantly, you can use the docker image
docker run -d -p 6379:6379 dhravyashah/radish
go
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:
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
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!