我使用nginx来提供静态文件。对于每个文件,当浏览器请求最后撤回该文件时,我希望保存时间戳。每个文件都有一个“唯一ID”,由1.ServerName、2.path和3.filename组成。文件名本身并不是唯一的。
我想使用像redis这样的键值存储来存储这些信息,然后使用cron作业将这些时间戳信息推送到mySQL数据库中。我需要将redis放在中间,因为系统需要处理大量并发请求。
最终目标是自动删除所有在过去6个月左右没有被请求的文件。
您将如何配置/设置nginx/redis来实现这一点?
最佳麒麟
发布于 2014-04-28 19:24:57
它有两个组件: 1)如何构造Redis中的数据;2)如何配置Nginx来更新它。
除非您对MySQL有外部需求,否则我看不出有什么理由在这个链中使用它。
首先: Redis结构,我假设您将频繁地运行您的清理工作,比如每天。如果您是在固定的时间(如“每个月”)内这样做,您可能会以不同的方式构造您的数据。
我认为你最好的结构可能是使用排序集。键名为"SERVER:PATH",成员名为文件名,得分为UNIX时间戳。
使用这个设置,您可以不需要知道他们的文件名就可以拉出成员,并且可以根据他们的分数来这样做。这将允许您使用zrangebyscore或zrevrangebyscore在示例中提取“任何具有得分zrangebyscore时间戳的成员”,其中时间戳也是“六个月前”的UNIX时间戳。
您运行的清理未使用文件的作业将使用这些命令来提取列表。当它们被删除时,您可以使用锌靶场命令从Redis中清除它们。如果您的写操作足够频繁,您可以运行一个只读奴隶来执行清理。
如果您期望有大量这样的条目,您可能会看到一个较长的时间导致一个更大的数据库。如果是这样的话,您可能需要将文件缓存的时间从6个月缩短到更易于管理的地方。六个月是很长的时间来保存一个缓存。
第二:配置Nginx来更新排序集,这在很大程度上取决于您对使用nginx模块的满意程度。它本机不这样做,但您可以使用卢阿-瑞恩-雷迪斯模块直接将该功能添加到Nginx中。我也用过类似的任务。
希望这能让你开始。关键部分实际上是Redis中的数据结构,因为其他部分只是简单地在您的安装程序中配置和测试Nginx部分。
https://stackoverflow.com/questions/23277301
复制相似问题