Radish
Super fast drop-in replacement of the in memory key-value store redis in golang
Try it out instantly
π What is this? Why?
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.
π Features
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 |
β
|
β |
Available commands
For now, these commands are available (more to come)
MISC
INFO
PING
FLUSHALL
SHUTDOWN
SAVE
BGSAVE
Keys
DEL
EXISTS
KEYS
EXPIRE
TTL
Strings
SET
GET
APPEND
INCR
INCRBY
DECR
DECRBY
MSET
MGET
Lists
LPUSH
LPOP
RPUSH
RPOP
LRANGE
LLEN
Hashes
HSET
HGET
HMSET
HMGET
HGETALL
HDEL
Sets
SADD
SMEMBERS
SISMEMBER
SREM
Sorted Sets
ZADD
ZRANGE
ZREM
Pub/Sub
SUBSCRIBE
PUBLISH
UNSUBSCRIBE
Transactions
MULTI
EXEC
DISCARD
Installation
Using docker
To get it up and running instantly, you can use the docker image
docker run -d -p 6379:6379 dhravyashah/radish
Using go
go install github.com/dhravya/radish@latest && radish
and then just build and run the binary
Using the binary
Download the binary executables from ./bin/radish
.
Click here to get it instantly.
Having fun
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)
Contributing
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
Help and the community
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.
License
Unlike redis, radish is licensed under the MIT license. You can use it for commercial purposes without any restrictions. Go wild!