Redis 3.2.0 is out
antirez.com
antirez.com
Kudos to antirez on everything before this and another great release.
EDIT: Many marketing/business people basically don't understand that you cannot over-sell to developers. The effect is the contrary, you turn people down when you try to say you did something too cool to be true, so this strategy also does not work in the long run.
So many other DBs, caches, or whatever will promise that they can solve all my problems, making me quite angry when I spend weeks developing around them and find out that I've just wasted all that time because their marketing people lied to me.
Riak 1.x. Anyone remember Riak Search? Not the one in 2.x that offloads it to Solr (I don't know if that actually works), but the one before that, the one they deprecated before there was anything to replace it with.
Any database that promises that you can solve your problems with MapReduce. The developers do not actually want you to MapReduce inside their database. It will probably stall your database so hard it makes it unavailable. Their sales people made them put it on the feature checklist.
So much open source is the result of, as is traditionally said, developers scratching their own itch. That's not to say that the developers don't start a project to "fix all the things wrong with the current options", but this is a more pragmatic view than the "this software is the final ultimate solution to problem X" that things eventually grow into having attached to them. I think a lot of proposing things as silver bullets grows out of the community as it gets more popular and is more the users proselytizing their flavor of the week rather than the core developers presenting it as something it's not.
The commercial side is, of course, a different beast, where salesmenship is required for any kind of longevity.
What I like about Redis is that, like a mechanical watch, the insides are as elegant and nice as the user experience.
I love redis.
The answer to this question is one of the reasons I like Redis so much. It's not one thing, it's many things!
I've used it for a "dumb" cache (key => bytes), a "smart" cache (key => data structure), a message queue, a pub/sub engine, and even a lock manager.
For many of these use cases it's the best, for others, it's more than good enough and not having to add additional infrastructure components to a system is always a plus.
Here is a JavaScript library I wrote for it, along with some scripts for munging the GeoNames dataset:
https://github.com/lucaspiller/offline-geocoder/
If you need higher granularity, take a look at this OSM project:
I think most free datasets are probably just the areas that Census derived for TIGER (or at the very least, rely heavily on that data).
It may be worth downloading it from github.
My problem with many existing geo implementations is they assume that a circular radius is the query type I care about, and longitude and latitude is sufficient to know where I actually am in terms of jurisdiction, etc.
Being able to add fine grained polygons to represent national, state, county or town boundaries and being able to identify the relationships between my co-ordinates and those entities is still far more complex than I would like.
Adding polygon support might be an interesting exercise, actually.
UPDATE: found it https://github.com/RedisLabs/geo.lua
Solution was to add a hidden column for each administrative category (e.g. for US: region, state, county, zcta) to each point record to replace spatial searches with filtering.
Would something like that work for you? What kind of numbers of points and polygons are you looking at and how quickly do you need to solve the problem?
Really? Wouldn't most GIS implement something like OGC Simple Features? AFAIK all SQL GIS implementations follow that (to various levels of completeness, but even MySQL has shapes support since 5.6)
On my wish list would be adding a bounding box query to return results within a map displayed on the current screen: e.g.: https://www.algolia.com/doc/javascript#search__inside-boundi... or e.g.: http://postgis.refractions.net/docs/ST_MakeEnvelope.html
From what I read, BITFIELD behaves differently -- it treats your data as a series of "packed" bits. So while with BITSET you operate on each bit individually, with BITFIELD you operate on a series of bits with a starting offset, and you have to be mindful of the length.
Could build it myself but if the official image will be out in a day or so id rather wait I think.
In fact I already updated the Redis Docker image once. You can see the full process there [3].
[1] https://hub.docker.com/_/redis/ [2] https://github.com/docker-library/official-images/pulls [3] https://github.com/docker-library/redis/pull/25