php - 具有快速转储数据能力的计数器键值存储

标签 php redis storage counter key-value

让我们想象一下,我们有 30 万个键,在我们的存储计数器键名中有简单的计数器,例如: counter1_2014-03-25_00:01 counter2_2014-03-25_00:01 counter3_2014-03-25_00:01

每个计数器收集 1 分钟的数据,因此每分钟一个键:counter1_2014-03-25_00:01、counter1_2014-03-25_00:02、counter1_2014-03-25_00:03 等

每隔一分钟,我必须转储前一分钟的所有计数器并将它们从存储中删除。我当前的实现非常简单,并且使用 Redis 哈希(HINCR、HGETALL、DEL)。

//递增计数器 $Redis->hincr('counters_2014-03-25_00:02', 'counter1');

//转储和删除 $result = $Redis->multi() ->hgetall('counters_2014-03-25_00:02')//倾销 ->del('counters_2014-03-25_00:02')//删除散列 ->exec()

Redis 的一切都很好,但是使用 HGETALL 进行转储对于大量计数器来说变得非常非常慢,因为 HGETALLO(N) 复杂性。

现在我正在寻找允许的方法:

  • 原子递增的计数器与 Redis 一样快
  • 快速转储前一分钟收集的计数器值
  • 从存储中删除前一分钟收集的计数器
  • 不需要 100% 的坚持,但这将是一个很好的加分项

更新:需要快速转储,因为我需要将所有本地收集的数据从后端服务器传输到主服务器。

最佳答案

一个解决方案是创建简单的 key ,使用 INCR 递增,每次创建 key 时使用 EXPIRE 设置一个到期时间。

关于php - 具有快速转储数据能力的计数器键值存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626492/

相关文章:

javascript - 如何将 XMLHttpRequest 发送到特定的 php 函数?

Django、socket.io、node.js - 管理私有(private)消息和群组对话

Android,存储自定义ArrayList

php - 使用 Laravel ORM 的较大查询中的 SQL Union 1 列?

php - 有没有办法在 MySQL 更新查询中使用变量

PHP - 独特的哈希函数,只有 4 位数字(不需要精确)

python - Redis 缓存不适用于 Django

python - 在 Python-RQ 中减少机器上的 worker 数量?

laravel - Php电子表格: How to save the spreadsheet with a Laravel storage disk?

docker - Docker Swarm 的文件存储