【发布时间】:2019-05-04 21:40:39
【问题描述】:
我最近在我的一个 Laravel 项目中实现了 Redis。目前它更像是一种技术练习,而不是生产,因为我想看看它的能力。
我所做的是创建了一个付款交易列表。我要推送到列表中的是每次处理事务时我从 webhook 收到的有效负载。有效负载本质上是一个对象,其中包含与该特定事务有关的所有信息。
我创建了一个 VueJS 前端,然后在表格中显示所有数据并具有分页功能,因此一次显示 10 行。
最初这工作非常快,但现在列表包含 30,000 行,大约 11MB 的数据,请求大约需要 11 秒。
我认为这里的问题是我正在使用一个列表并使用 LRANGE 从列表中获取所有行。
我使用列表的原因是因为它有 LPUSH 命令,以便最新的事务转到列表的开头。
我决定做一个测试,从列表中获取所有数据并将值输出到空白页,这花费了大约相同的时间,所以这不是 Vue、Axios 等的问题。
首先,这个读取速度正常吗?我一直听说 Redis 非常快。
其次,在使用 Redis 时有没有更好的方法来提高读取性能?
第三,我是否使用了错误的数据类型?
我需要能够存储 1m 行数据。
【问题讨论】:
-
请使用国际公认的 SI 单位前缀。
MB=megabyteen.m.wikipedia.org/wiki/Megabyte 而mb=millibiten.m.wikipedia.org/wiki/Megabit -
@MarkSetchell 毫比特不存在。
[Bit (b)](https://en.wikipedia.org/wiki/Bit)是最小的基本度量,您不能将位划分为较小的部分。 -
@Tpojka 我就是这么说的。
mb一词在原始帖子中使用,我是说m是milli的 SI 前缀,b是位的 SI 单位,因此它将指定毫位 - 无论这样的东西是否存在或不是。 -
我没有太多使用 Redis 的经验,但是您可以查看现有的软件包以及它们是如何做到的。例如,Horizon 似乎对有效负载使用哈希图,对具有 TTL 的键使用排序集。查看他们的RedisJobRepository。即使有很多元素(100k+),感觉也很快(