首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis:内存优化/性能策略

Redis:内存优化/性能策略
EN

Stack Overflow用户
提问于 2012-06-06 18:19:01
回答 1查看 2K关注 0票数 3

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

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

我们计划将Redis用于K:V。我们曾考虑过其他解决方案,包括数据库、基于文件的缓存等,但存在性能瓶颈。首先,每分钟要处理几千个数据包,而从数据库来回调用SQL会降低程序的运行速度。

我从来没有用过Redis。但我被告知这是最快最有效的K:V No SQL数据存储。redis python APi让它变得非常Pythonic.Essentially数据库存储将有200个奇数键和一个长整数形式的值与80%的键相关,或者在某些情况下,字符字段少于200个字符。

问题

1)这是正确的方法吗? 2)需要考虑的其他参数是什么? 3)内存规模有多大?我应该做什么来确保内存大小被优化以获得更快的性能? 4)我如何计算内存大小?

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-07 02:44:52

1)这是正确的方法吗?

当然,它可以像这样实现,而且Redis的速度足以承受这种工作负载。您的瓶颈将是您的Python代码,而不是Redis本身。

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

您可能希望在内存(字典)而不是Redis中积累数据。除非您使用full-fsync AOF配置Redis (这会使其变得很慢),否则Redis对系统崩溃的恢复能力并不比您的Python进程强。

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

3)内存的大小是多少?要确保优化内存大小以获得更快的性能,我应该做些什么?

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

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

4)如何计算内存大小?

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10912281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档