Redcon – Fast Redis-compatible server framework for Go
github.com
github.com
This can be used coupled with a backend storage to provide custom redis servers.
It's not a redis implementation by itself.
redis is already very bare-bones and dead simple to set up and maintain, what more does one want? Wouldn't adding more logic into a redis-like environment be a little cumbersome from an architecture perspective?
You could expose a memcached cluster as a redis server using this. (Not sure why would you want to do that.. Maybe if you have an existing memcached cluster and have redis client code?)
Or you could go crazy and implement the entire set of redis commands on top of sqlite and call it a "strongly persistent redis" or something like that.
It's just a nice building block, I'm sure people would find ways to abuse it :)
Of course the existing benchmark shows that the example Go implementation is faster. For one, the Go implementation provided avoids a lot of functionality that the Redis server implements, such as TTL checking.
I believe disque, the distributed message broker [2] uses the redis protocol for client server communication.
[1] http://redis.io/topics/protocol [2] https://github.com/antirez/disque
If what you are looking for is a Redis implementation, I did create a Redis v1 clone in Go a while back. It's is only a proof-of-concept and lead to the development of Redcon.
Everyone should at one point write their own compiler. And maybe their own OS.
(I'm only half kidding here)
Capability systems? Network transparent message passing? Dynamic load-balancing of running processes across machines? What if you tried to let users script their workflows in a less ad-hoc way than they can now? How about trying to replace the concept of a filesystem, at the same time as trying to encourage applications to share data with each other?
OS development research died a couple of decades ago, and now we have an entire generation of developers who believe the Linux/POSIX model to be the one true system. But IMHO, that's just a quirk of fate, and a local maxima, and it keeps people in the dark about alternative solutions to their problems. For example, capability system advocates will point out that their system almost implements Docker/containerization by default. There have been tons of experiments with efficient message-passing under microkernels which would likely benefit anyone attempting to design Yet Another IPC Framework in the Linux kernel. And so on and so forth.
AFAIK redis has tests, you don't need to rewrite tests for redis in Java. Mocking implies test assertions in the Mock. I'm sure redis driver for Java has tests too. That's what you should mock.
Of course I simplified things by only implementing keys and sets, rather than all the operations such as hashes, etc. But allowing pluggable storage back-ends made it useful for my use-case(s).
Just because the language is really hyped right now?
Basically - Go had a very strong focus on web servers from the start, making it easy to pick up and develop web servers with. Web developers make good early adopters - they'll pick up new tools faster than almost any other group of developers. Rust was released without any of those tools, and they're still changing as the ecosystem develops (especially around async frameworks). And even with that, there's a fair few companies using it for all sorts of cool things: https://www.rust-lang.org/en-US/friends.html
The only reason it gained any traction is the big name of the mothership...
No at all. It's very far from even remotely decent implementation, the interface is too inconsistent and full of implicit behaviors and the performance is an order of magnitude slower than anything acceptable. But anyone actually using it already knows..
I liked the goroutine related apis though.
What I remember being PAINFULLY slow is reflection. Which is very inconvenient for certain tasks (building objects from db queries, (json) serializing,...). Macros could help here, but alas, code generation is the only alternative available. Which I'm not a fan of.
---
What's are your gripes with Gos CSP?
I initially really liked it. But the languages designers just skipped over countless years of achievements in language design and implemented a C with garbage collection, with interfaces and a baked in CSP runtime.
If you read a bit in the groups / release notes, they were just too lazy to implement generics. Or it was too hard.
Go's ecosystem is really weak (for example, barely any library does proper versioning or any release procedure at all).
I think that is at least part due to the difficulty of writing clean, generic code. And the lack of proper packaging.
The lack of features is not a selling point, even if they try.
At least Go can generate it's own hype, and doesn't need to piggyback on others.