gpt4 book ai didi

mysql - 使用 Redis 缓存实时单页应用程序中使用的数据

转载 作者:IT王子 更新时间:2023-10-29 06:11:16 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,它具有正常功能、用户设置等,这些都与用户等一起存储在 MYSQL 中......

应用程序的特定部分是供用户编辑的数据表。

我想在多个用户之间实时制作这张表。即多个用户可以打开页面编辑数据并实时查看其他用户编辑表格所做的更改。

我的想法是在 Redis 中缓存表的数据,然后在 Redis 中执行所有操作,比如让所有客户端保持最新状态。

一旦特定表的所有连接都关闭,将数据保存回 mysql 以实现持久性,我知道 Redis 可以用作持久性 NoSQL 数据库,但由于 RAM 有限并且我所有其他数据都存储在 MYSQL 中,mysql 似乎更好的选择。

这是 redis 的正确用例吗?我的想法对吗?

最佳答案

这取决于可扩展性。您要处理的记录数以及您要用于保存它的结构。

我将讨论使用 Redis 的优缺点。决定权在你。

使用redis的优势:

    1) It can handle heavy writes and reads in comparison with MYSQL
2) It has flexible structures (hashmap, sorted set etc) which can
localise your writes instead of blocking the whole table.
3) Read queries will be much faster as it is served from cache.

使用redis的缺点:

    1) Maintaining transactions. What happens if both users try to access a 
particular cell at a time? Do you have a right data structure in redis to
handle this case?
2) What if the data is huge? It will exceed the memory limit.
3) What happens if there is a outage?
4) If you plan for persistence of redis. Say using RDB or AOF. Will you
handle those 5-10 seconds of downtime?

需要关注的事情:

1) 您要处理多少数据?假设在 redis 中有 10000 行和 10 列的表需要 1 GB 的内存(只是假设实际内存会少得多)。如果你的 redis 是 10GB 集群那么你只能处理 10 个这样的表。计算一下您将使用多少个行 * 列 * 事件表以及它消耗的内存。

2) Redis 对 http://redis.io/topics/memory-optimization 范围内的数据使用压缩.假设您决定使用 HashMap 保存表,您有两个选择,对于每一列您都可以有一个 HashMap ,或者对于每一行您都可以有一个 HashMap 。第二种选择将是最佳选择。因为存储 1000 (hashmaps -> rows) * 20 (records in each hash map -> columns) 比以其他方式存储占用的内存少 10 倍。同样以这种方式,如果单元格发生更改,您可以在 20 个值以内的 HashMap 中进行本地化。

3) 将数据加载回您的 MYSQL。这将多久发生一次?如果您的工作负载很高,那么 MYSQL 开始对其他操作执行更差。

4) 您将如何处理通知更改的多个客户?你会加载整个表还是改变的部分?加载更改的部分将是最佳的。在这种情况下,您将在哪里维护已更改的单元格列表?

用这些问题评估你的系统,你会发现它是否可行。

关于mysql - 使用 Redis 缓存实时单页应用程序中使用的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com