Recommendations on the structure of the project?

There is a project, where the authors publish their articles/news/notes (news parsed and added manually).
Users subscribe to their favorite authors and read their news. In addition, users can adjust the filters and read the entries with a specific tag. Users can also read only "unwatched" news, and more for every user of tape is formed on the basis of its date of registration (registration date minus 3 months).
A project in MySQL and work out intricate queries with different conditions.
Thus it turns out absolutely unique content for each user: a unique set of authors, a unique set of filters, the unique depth of the tape and a different number of read news.
I would like to hear recommendations on the organization of such a project, for example, the issue with cache, I don't see how it can be applied here, because the news feed is different for everyone.
News a lot more than 5 million and the number is growing (about a million per month). As long as it works quickly, but visitors to the website a little. Trying to prepare for a larger volume of data and number of users.
I recently watched the reports with highload++, where one of the speakers told how they in the online shop kept all sorts of combinations of filters in redis and received the goods on ajtishnikam. When updating/adding/deleting item this cache in redis just restated. This is a very good idea, but could we apply something similar in my project? I have a lot of queries to the database and there is almost nothing to save, the content is very dynamic, new records are constantly appearing.
NoSQL is not suitable, the idea of the project crude, often changing the structure and it is important not to lose data. With NoSQL it would be hell.
Summarize: performance issues there, but to me the project is seen as resource intensive because of the inability to cache anything. What would you suggest and do a project with this structure it is complicated or am I worrying needlessly?
Thank you.
August 19th 19 at 22:59
2 answers
August 19th 19 at 23:01
Not necessarily something really optimized, but you can just assume some sets of keys in an array to store the radish, to choose and to do in(1,2,7,4,21,222,324) - this will greatly speed up fetching, the cache is not only available results, it can be prepared for sets of samples, for example, to speed up selects. A lot of things in radish to Panipat, no wonder the cache levels are shared.
August 19th 19 at 23:03
For this project, the cache is actually 3 type of finished renderings for the same material, which should be cached:
1. HTML-render each individual post
2. HTML-render a single element in the list ribbon (with the time of publication, tags, views, likes and other things).
3. HTML-render a single element to display in the bar (similar publications, most viewed, most commented, etc.)

Everything else is a manipulation of ID-shnik in the database.

Most important: the binding table materials (id) to users ("dynamic ribbon") when they are created(+ subscribe/unsubscribe to the tag(s)/author(s), etc.) based on preferences! It saves a lot of time to form (sample) tape (list id-shnikov) for a specific user.

UPD: On the choice of the framework - see here.

Find more questions by tags Web Development