base on Super fast drop-in replacement of the in memory key-value store Redis, made in Golang <div align="center"> <!-- logo --> <img src = "assets/icon.png" width="300"> <h1 align="center">Radish</h1> <img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg" /><br> Super fast drop-in replacement of the in memory key-value store redis in golang </div> --- [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md) [Try it out instantly](#installation) ## šŸ‘€ 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](https://news.ycombinator.com/item?id=39772562) - 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](assets/godis.png) ## šŸ“œ 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](https://github.com/dhrvyashah/radish/releases/download/v0.1.0/radish-0.1.0-linux-amd64.tar.gz). ## 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 ``` 2. Create a new branch 3. Make sure to build and test the code before creating a PR ``` go build -o ./bin ``` 4. 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](https://dm.new/dhravya) or create an issue on the repo. You can also join our [Discord server](https://discord.gg/z7MZYhmx6w) 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! ", Assign "at most 3 tags" to the expected json: {"id":"9653","tags":[]} "only from the tags list I provide: []" returns me the "expected json"