Skip to content
/ radish Public

Super fast drop-in replacement of the in memory key-value store Redis, made in Golang

License

Notifications You must be signed in to change notification settings

Dhravya/radish

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

17 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Radish

License: MIT
Super fast drop-in replacement of the in memory key-value store redis in golang

Contributor Covenant 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.

Godis

πŸ“œ 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:

  1. Clone the repo
git clone https://github.com/dhravya/radish
  1. Create a new branch

  2. Make sure to build and test the code before creating a PR

go build -o ./bin
  1. 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!