Redis:内存优化/性能策略

2024-04-25 04:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个应用程序,基本上可以嗅探以太网设备,并研究某些模式。我使用Python和Scapy来捕获数据。由于数据需要在数据库中为后代和模式研究捕获,我们正在考虑以下策略。在

1)我们希望使用高性能的键值存储来捕获基本数据。这基本上是一个关键:价值存储有大约200把钥匙。 2) 每隔一个小时我们将汇集密钥存储,根据一定的条件和模式,我们将根据存储在K:V store中的值填充Postgres数据库。在

我们计划在K:V上使用Redis,我们已经考虑过其他解决方案,包括数据库、基于文件的缓存等,但是存在性能瓶颈。例如,每分钟有数千个数据包被处理,而数据库中来回的SQL调用会减慢程序的速度。在

我从来没有用过Redis。但我听说它是最快和最有效的K:vno-SQL数据存储。redis PythonAPI使它非常Python。本质上数据库存储将有200个奇数个键和一个与80%的键相关联的长整型值,或者在某些情况下,字符字段少于200个字符。在

问题

1)这是正确的方法吗? 2) 还有哪些参数需要考虑? 3) 内存可以扩展多少?我该怎么做才能确保内存大小得到优化以获得更快的性能? 4) 如何计算内存大小?在

Python是我们唯一知道的语言。因此,任何像C/C++这样的建议可能都没有吸引力。在

我们可以偶尔丢失一些数据包,因为我们的想法是研究模式,而不是得出绝对准确的结果。键的数量将保持不变,它们的值可以上下浮动。。在

我们需要最终计算出的数据存储在RDBMS中,因为未来的维护是SQL密集型的。在


Tags: 数据redis数据库应用程序sql模式高性能性能
1条回答
网友
1楼 · 发布于 2024-04-25 04:01:25

1)这是正确的方法吗?

当然可以这样实现,Redis的速度足以支持这种工作负载。你的瓶颈将是你的Python代码,而不是Redis本身。在

2)还要考虑哪些其他参数?

您可能希望在内存(字典)而不是Redis中积累数据。除非您使用完整的fsync AOF配置Redis(这会使其速度变慢),否则Redis对系统崩溃的抵御能力不会比Python进程强多少。在

但是,如果您有多个捕获过程,并且需要在将数据存储在PostgreSQL中之前对其进行聚合,那么Redis是一个非常好的解决方案。在

3)内存会扩展多少?我该怎么做才能确保内存大小得到优化以获得更快的性能?

如果有200个值,那么内存消耗就不是问题(因为它可以忽略不计)。Redis对于这种工作负载已经足够快了,您不需要在这里使用任何花招。在

但是,您应该维护一个键列表(这样您就可以在不依赖keys命令的情况下访问它们),并使用管道以高效的方式检索数据(即不是逐个键地检索)。如果您有多个键,请考虑使用SORT命令在一次快照中获取所有内容,或者考虑定义一个唯一的哈希对象来存储200个键/值并在一次快照中检索它们。在

4)如何计算内存大小?

这里没用。但如果真的需要,可以启动一个Redis实例,放入数据,然后使用INFO命令获取统计信息。您还可以转储数据,并使用以下Python脚本从转储文件中获取统计信息:https://github.com/sripathikrishnan/redis-rdb-tools

相关问题 更多 >