user3490755
user3490755

Reputation: 995

Searching in redis

I've got a small real-time chat application and would now like to store message history in Redis instead of MySQL, simply because it is much, much faster.

However, I would like my users to be able to search the message history. How could I achieve that in Redis?

After some Googling I found that I would have to create a index of all words in Redis, but this seems to be a bit overkill.

Would a better approach be to sync data back to MySQL and have users search a table there instead?

I really would like to use Redis for the history part as my tests have shown it is a lot faster in my case.

Any ideas of another approach?

Upvotes: 0

Views: 1262

Answers (2)

Barış Uşaklı
Barış Uşaklı

Reputation: 13532

Redis isn't really the best tool for this but it's possible, check out https://github.com/tj/reds for an example.

Upvotes: 0

bitoiu
bitoiu

Reputation: 7474

I'm going to go out on a limb and say, Redis is the wrong choice for your particular use case. Check the stackoverflow post on the Use Cases of Redis for some insight.

You say that redis is much much faster, but how can you say that if we have no solution to compare with? Redis commands will be much faster than the equivalent SQL ones, but as soon as you start creating off-purpose data structures you're killing what Redis is good at.

Some more reasons:

1. Unstructured content

If you have a fixed structure to search that would be somewhat plausible to consider, for example, you only allow for user/data search. Your keys could look like

user:message_time

Do you a proper search on free form text, you'll probably better off with something that is good at analyzing metadata and finding out what you need, probably something similar to elasticsearch (not an expert myself).

2. Redis is not a decent archive

For a chat app I would imagine using Redis as a cache for recent conversations, but in the end you don't want Redis to be storing all your messages and metadata for searching and indexing, do you? If your replication is not pristine you might lose all your data, in the end Redis is an In-Memory Database.

3. Key scan nightmare

I cannot even imagine how this can be done using Redis, maybe some other users do. What kind of scan would you do on the keys? You would probably need to do multiple queries to get something decent.

Upvotes: 2

Related Questions