gpt4 book ai didi

php - redis 能否提高我的mysql 性能以及如何将数据存储在类似于db 表的redis 中?

转载 作者:可可西里 更新时间:2023-11-01 11:20:39 30 4
gpt4 key购买 nike

我有以下网站:

用户输入一些数据,服务器根据这些数据生成大量结果,这些结果需要显示给用户。我正在使用 php 计算数据,将其存储在 MySQL DB 中,并通过服务器端处理将其显示在 Datatables 中。 数据需要保存一段有限的时间——每隔一小时,整个表都会被删除并重新创建。

观察到的最大负载是:每天 7000 个 session /用户,单次最多 400 个用户。每小时我们都会在主表中插入超过 5000 万条记录。我们使用的是配备 Intel i7 和 24GB 内存、HDD 磁盘的专用服务器。

问题 是当更多人(一次>100)使用网站时,MySQL 无法处理负载,MySQL + 硬盘成为瓶颈。即使是几千个结果,用户也必须等待几分钟。磁盘是 HDD,目前没有安装 SSD 的选项。

问题(S):

  1. 用 Redis 代替 MySQL 能否提高性能,提高多少?

  2. 如何将生成的数据存储在 redis 中,以便我可以为 1 个用户检索它并按任何值对其进行排序并进行过滤?

我在 php 中有以下数据

$user_data = array (
array("id"=>1, "session"="3124", "set"=>"set1", "int1"=>1, "int2"=>11, "int3"=>111, "int4"=>1111),
array("id"=>2, "session"="1287", "set"=>"set2", "int1"=>2, "int2"=>22, "int3"=>222, "int4"=>2222)...
)

$user_data 可以是长度为 1 到 1-200 万的数组(我正在计算它并以 10000 block 为单位插入数据库)

我需要在 redis 中存储至少 400 个这样的用户的数据,并且能够以 10/20 的 block 为特定用户检索数据以进行分页。我还需要能够按任何字段集(字符串)、int1、int2...(我有大约 22 个 int 字段)进行排序,并按任何整数字段进行过滤(类似于 sql WHERE 子句 9000 < int4 < 100000 )。

  1. redis 也可以做类似于 SQL WHERE set LIKE '%value%' 的东西吗?

最佳答案

如果您可以将所有数据保存在内存中,Redis 可能很适合您的问题。但是您必须重新考虑您的数据结构。 Redis 与关系数据库有很大不同,没有直接迁移。

至于你的问题。

  1. 它可能有助于提高性能。多少取决于您的用例和数据结构。您的约束将不再是硬盘,而是其他东西。

  2. Redis 没有类似SQL 的ORDER BY 或WHERE 的概念。您将负责维护您的索引和过滤器。

我会为每个“记录”创建一个 HSET,然后使用多个 ZSET 为该记录创建索引。 (如果你真的需要在任何字段上排序,那么每个字段都需要一个 ZSET)

至于过滤器,用于索引的 ZSET 可能对过滤 int 值的范围很有用。

不幸的是,对于 LIKE 查询,我真的没有答案。当我需要高级搜索功能时,我通常使用 ElasticSearch(结合 redis 和/或 mysql)

关于php - redis 能否提高我的mysql 性能以及如何将数据存储在类似于db 表的redis 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302258/

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