{"id":23959631,"url":"https://github.com/otobrglez/dojodis","last_synced_at":"2025-04-13T08:13:01.960Z","repository":{"id":52141110,"uuid":"520788661","full_name":"otobrglez/dojodis","owner":"otobrglez","description":"High-performance Redis server implemented in Scala with ZIO.","archived":false,"fork":false,"pushed_at":"2022-09-20T12:01:27.000Z","size":42,"stargazers_count":25,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-13T08:12:57.805Z","etag":null,"topics":["redis","zio","zio-streams"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/otobrglez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-03T07:57:21.000Z","updated_at":"2024-10-25T10:43:41.000Z","dependencies_parsed_at":"2023-01-18T16:02:18.954Z","dependency_job_id":null,"html_url":"https://github.com/otobrglez/dojodis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otobrglez%2Fdojodis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otobrglez%2Fdojodis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otobrglez%2Fdojodis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otobrglez%2Fdojodis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/otobrglez","download_url":"https://codeload.github.com/otobrglez/dojodis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248681495,"owners_count":21144700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["redis","zio","zio-streams"],"created_at":"2025-01-06T18:50:01.251Z","updated_at":"2025-04-13T08:13:01.930Z","avatar_url":"https://github.com/otobrglez.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dojodis 🍤\n\n[dojodis] is an experimental high-performance [Redis][redis] clone written [Scala ZIO][zio].\n\n## Supported Commands\n\ndojodis server supports the following [Redis commands][commands]: [get], [set], [exists], [incr],\n[incrby], [ping], [del], [keys]\n\n## Development\n\n```bash\nsbt run\n\nredis-cli -p 6666 set my_name \"Oto Brglez\"\nredis-cli -p 6666 get my_name\ncat test.txt | redis-cli -h 127.0.0.1 -p 6666\n```\n\n## Silly benchmark\n\nAlthough this is considered to be a very experimental project I was really\ntempted to make it compliant with [redis-benchmark] to see how it will perform.\n\n![Simple dojodis vs. Redis v7 benchmark](redis-7_vs_dojodis.png)\n\nBenchmark was ran against `Redis server v=7.0.0 sha=00000000:0 malloc=libc bits=64 build=efafb97113670c08`\nand here are the results for the common test\nsuite. [Raw data can be found here.](https://docs.google.com/spreadsheets/d/1j7HTP2EndiljV50Twluc2WLb1pS3Nt9yf1puyMWETRo/edit?usp=sharing)\n\n```bash\nredis-benchmark -h 127.0.0.1 -p 6666 -t get,set,incr,incrby,del -n 100000 -c 4 --csv\n```\n\n## Resources\n\n- [Architecture Notes - Redis Explained](https://architecturenotes.co/redis/)\n- [RESP protocol spec](https://redis.io/docs/reference/protocol-spec/)\n- [A Java Parallel Server Through the Ages](https://www.cs.unh.edu/~charpov/programming-futures.html)\n- [Wrapping impure code with ZIO - Pierre Ricadat](https://medium.com/@ghostdogpr/wrapping-impure-code-with-zio-9265c219e2e)\n- [zio-tcp - Richard Searle](https://github.com/searler/zio-tcp)\n- [5 lessons learned from my continuing awesome journey with ZIO - Natan Silnitsky](https://medium.com/wix-engineering/5-lessons-learned-from-my-continuing-awesome-journey-with-zio-66319d12ed7c)\n- [Thread Pool Best Practices with ZIO - John A De Goes](https://degoes.net/articles/zio-threads)\n- [Detecting Client Disconnections Using Java Sockets - Zack West](https://www.alpharithms.com/detecting-client-disconnections-java-sockets-091416/)\n- [ZIO / ZIO](https://github.com/zio/zio/issues/3649#issuecomment-631541249)\n- [How to talk raw Redis](https://www.compose.com/articles/how-to-talk-raw-redis/)\n- [Processing ZIO effects through a pipeline - Steven Vroonland](https://medium.com/@svroonland/processing-zio-effects-through-a-pipeline-c469e28dff62)\n- [High-Concurrency Practices of Redis: Snap-Up System](https://www.alibabacloud.com/blog/high-concurrency-practices-of-redis-snap-up-system_597858)\n- [kpodsiad / yamlator](https://github.com/kpodsiad/yamlator)\n- [Inline your boilerplate – harnessing Scala 3 metaprogramming without macros](https://scalac.io/blog/inline-your-boilerplate-harnessing-scala3-metaprogramming-without-macros/)\n- [From Scala 2 shapeless to Scala 3](http://www.limansky.me/posts/2021-07-26-from-scala-2-shapeless-to-scala-3.html)\n- [Redis Protocol Compatibility](https://redis.pjam.me/post/chapter-5-redis-protocol-compatibility/)\n\n## Authors\n\n- [Oto Brglez / @otobrglez][otobrglez]\n\n![Twitter Follow](https://img.shields.io/twitter/follow/otobrglez?style=social)\n\n[dojodis]: https://github.com/otobrglez/dojodis\n\n[redis]: https://redis.io\n\n[zio]: https://zio.dev\n\n[otobrglez]: https://github.com/otobrglez\n\n[get]: https://redis.io/commands/get/\n\n[set]: https://redis.io/commands/set/\n\n[exists]: https://redis.io/commands/exists/\n\n[incr]: https://redis.io/commands/incr/\n\n[incrby]: https://redis.io/commands/incrby/\n\n[ping]: https://redis.io/commands/ping/\n\n[commands]: https://redis.io/commands/\n\n[del]: https://redis.io/del/\n\n[keys]: https://redis.io/commands/\n\n[redis-benchmark]: https://redis.io/docs/reference/optimization/benchmarks/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotobrglez%2Fdojodis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fotobrglez%2Fdojodis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotobrglez%2Fdojodis/lists"}