I was confused because I know Redis already offers persistence. https://redis.io/docs/management/persistence/
The main difference here is how its runtime will shift from runtime data only in RAM to not storing as much data in RAM and looking up on disk. Current Redis persistence looks like the runtime is stored in RAM and changes are periodically or append only persisted to disk. I hope I got that right.
For those interested in an alternative to Redis on disk, compatible with the Redis protocol, have a look on Kvrocks[1] which was recently accepted in the Apache foundation. It is based on RocksDB and works quite nicely for us.
Thanks for this, it seems to even support redis' lua functionality with is essential for us. I wish I hadn't decided to use redis stack since even kvrocks isn't compatible with its extensions
> It is part of the drive to make Redis "more like your classic database," he said. In the future, support for natural language queries and enhanced vector and feature store capabilities will be added. This initiative aligns with Redis's ambition to be seen as more than just a fast, albeit expensive, cache
This sounds to me like not understanding your place in the market or why people use your product. I can name half a dozen classic SQL databases off hand. I can’t name a tool that competes with Redis at their niche. Why aim for an already oversaturated market when you already have a good profitable niche.
> Why aim for an already oversaturated market when you already have a good profitable niche.
Presumably because there are a lot of things that straddles the two, and where you risk losing people to databases or hybrid setups where the Redis use will be simple enough that people won't want to pay for support.
E.g. cases where you can't afford to keep it all in memory where you today might end up resorting to using Redis as just a dumb-ish in front of a database, or even avoiding Redis entirely in favour of in-memory tables or aggressive cache settings for your database even in cases where you might prefer Redis if it could intelligently handle a larger working set more cheaply.
And also to create a buffer given that the level of oversaturation in the classic database market may make their niche a tempting target to try to expand into for some of those to set themselves apart.
Assumedly, because they do know their place in the market and decided it's not great and that the outlook is worse.
Recently DHH of Rails fame gave a talk about Redis and how at their company it's being replaced in favor of long term storage on the now much faster and cheaper SSDs.
The takeaway was that the long caching it enables yields far better real world results in their products. He even had some charts.
> One main criticism of Redis had been its lack of support for SQL, the ubiquitous query language. Trollope said that was fixed now. A module RediSQL is available on GitHub.
I don't understand this. How can you want SQL for something that you are using because it's faster than SQL?
If your dataset fits in memory and you want relations then just use PostgreSQL/MySQL. Why would you pick the unique data structures and performance of redis sets/lists/pubsub/HLL and want SQL in front of it?
I've tried Redis-on-flash (enterprise version), and performance was very poor. Its just lsmt underneath and suffers from all the usual lsmt issues.
In the end we went with Aerospike which actually while backed by NVMe, outperforms redis backed by memory. Aerospike in memory is completely absurd speeds and throughput. Sadly the setup is a bit weird and query model is a bit wonky but we worked around it. A bit sad on how expensive the enterprise version is.
They mention both flash and disk, which finally gets explained as tiers 2 and 3. Also less clear though I assume this applies to their hosted service offering and not the core software.
> "We can take the lesser-used data that hasn't been touched in a while and shuttle it off to flash where it can sit for a while. When the user comes back eventually, it's very easy for us to seamlessly move it from flash back into memory. And that allows the company to save costs," he said.
> Redis is now planning to extend the concept to disk-based memory to offer support for a three-tiered architecture.
What about the stenographer tier? A simple terminal, a little transcription, and I bet we'd keep restore delay down under a few seconds + 5 minute file lookup of stored paperwork.
It's really bad. The problem is that the swapping of pages is constantly stalling the main Redis thread, which is not built for parallelism. Redis is built around a single highly efficient thread, so stalling it for 250us to pull a page from disk instantly reduces the throughput by an order of magnitude.
Anyone know how their plans differ from the Virtual Memory plans that antirez had about 13 years ago, implemented in Redis 2.6, and then (wisely) abandoned?
> Surely you need the sorted set in memory to derive rank/manipulate it etc?
If you store it as an augmented balanced tree, then you only need to load the path from root to leaf to get or change rank. For example, if each node stored the number of leafs of its subtree, then you can avoid visiting most branches by simple logic: if you want to find element with rank=14, and left subtree only has 10 elements in total, ignore it and go straight to the right subtree, searching for element with rank=4 there.
It is part of the drive to make Redis "more like your classic database," he said. In the future, support for natural language queries and enhanced vector and feature store capabilities will be added.
Seems way off the mark for why people use Redis. Developers use it precisely because it's not like their classic databases.
The lines between data "stores" are blurring. I've seen it before where x team needs a fast key value store, so the obvious choice is redis. A year down the line, the product is evolving and the devs want to do some "classic" queries. Maybe it makes sense to keep it in redis based on their support for the queries you need, rather than migrating/replicating to a whole other system.
I don’t think that’s necessarily always true. I was recently looking into using Redis as a regular database. Unfortunately data is still kept in memory even if it’s persisted on disk, so it was a no-go. You’d be surprised what people want!
I'll bite. I think with most relational and document databases, my view of the "classical world", you are often storing all of your data in tables or documents in a structured way. Normalizing the data where possible. You're then building indexes on that data to pull it out in a useful operational, optimizing for the most common operations. If a new use case comes up, you add some more tables, add some constraints, and create some new indexes.
I think with Redis, you are starting knowing that your use case needs to be fast. You start with the access patterns and fit that into key/value lookups (or search with modules). You're typically denormalizing the data, duplicating it or aggregating it from other places, so that you can serve operational data fast. Otherwise, just use in-memory SQL.
If what you want is persistent k/v, then there are already tons databases that can do that. Redis has a different use case, so what are you trying to say? That you want to misuse tools?
> If what you want is persistent k/v, then there are already tons databases that can do that.
Are there? What's a good, mainstream, persistent k/v for cheap single-node instances? PostgreSQL's KV support isn't good enough, Cassandra and MongoDB expect to be set up as a cluster and have all the overhead of that, BikeshedDB is alpha and I won't touch their upstream for obvious reasons, CouchDB is pretty much unmaintained, ....
This thread is my first time hearing of it, it doesn't seem particularly established/mature (e.g. I can't find cloud services offering managed instances, whereas there are plenty of those for Redis)
Are you suggesting that there's no need for Redis to integrate persistent-storage support because every user should download some library and patch the Redis source themselves? And that would somehow be better?
I'm suggesting you haven't read enough before replying, just like I did on my first comment. See "Myrocks" as an example of what the first user meant with lmdb. Replace "mysql -> redis" and "rocksdb -> lmdb".
I'm looking for a standard, well-known, drop-in product - that's what Redis is, that's why persistent storage support in Redis is interesting. If I have to search up some combination thing then it's already a non-starter.
I'm not looking for embedded, we're talking about a Redis substitute. etcd/consul feel oriented towards running as a cluster and I'd expect overhead for that. FoundationDB is potentially a good shout, but it's not that established, e.g. it doesn't seem to be available in a managed way in cloud hosting environments.
KV Stores seem to be in a kind of split place, existing either as embedded, or full cluster mode. There isn’t really a “sqlite” or “postgres” of persistent KV stores. Cloud providers ship their own proprietary KV-stores: Dynamo in AWS, Bigtable in GCP. If you are ok with hosted, Scylla is also an option.
I’m always shocked that people use Redis for anything other than an ephemeral cache.
Your second paragraph follows from your first - people use Redis in this space because it's the closest thing there is to an "sqlite" or "postgres" for KV. Which is why I think Redis with persistence actually makes a lot of sense and fills a gap in the market.