【问题标题】:Tracking last image request using nginx and redis使用 nginx 和 redis 跟踪最后一个图像请求
【发布时间】:2014-06-10 05:37:23
【问题描述】:

我使用 nginx 来提供静态文件。对于每个文件,我想保存上次浏览器请求检索此文件时的时间戳。每个文件都有一个“唯一 ID”,由 1. 服务器名、2. 路径和 3. 文件名组成。文件名本身不是唯一的。

我想使用像 redis 这样的键值存储来存储这些信息,然后使用一个 cron 作业将这个时间戳信息推送到 mySQL 数据库。由于系统需要处理大量并发请求,因此我需要将 redis 放在两者之间。

最终目标是自动删除过去 6 个月左右未请求的所有文件。

您将如何配置/设置 nginx/redis 来实现这一点?

最好的 基连

【问题讨论】:

    标签: mysql nginx redis


    【解决方案1】:

    这有两个组成部分:1)如何在 Redis 中构造数据和 2)如何配置 Nginx 来更新它。

    除非您对 MySQL 有外部需求,否则我认为没有理由在此链中使用它。

    第一:Redis结构 我假设您将经常(例如每天)运行清理工作。如果您在固定时间(例如“每个月”)执行此操作,您的数据结构可能会有所不同。

    我认为您最好的结构可能是使用排序集。键名是“SERVER:PATH”,成员名是文件名,分数是 UNIX 时间戳。

    通过此设置,您无需知道他们的文件名就可以根据他们的分数拉取成员。这将允许您使用zrangebyscorezrevrangebyscore 提取“任何具有SCORE

    您为清理未使用文件而运行的作业将使用这些命令来拉取列表。删除它们后,您可以使用 zremrange 命令从 Redis 中清除它们。如果您的写入频率足够高,您可以运行一个只读从站来进行清理。

    如果您预计会有大量此类条目,您可能会看到很长一段时间会导致数据库更大。如果是这样,您可能需要将保存文件缓存的时间从六个月减少到更易于管理的时间。六个月的缓存时间太长了。

    第二个:配置 Nginx 更新排序集 这在很大程度上取决于您对使用 nginx 模块的舒适程度。它本身并没有这样做,但您可以使用lua-resty-redis 模块将功能直接添加到 Nginx 中。我已经将它用于类似的任务。

    希望这能让您入门。关键部分实际上是 Redis 中的数据结构,其余部分只是在您的设置中配置和测试 Nginx 部分。

    【讨论】:

      猜你喜欢
      • 2014-01-10
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2020-03-24
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多