我有一个照片托管网站,我想跟踪照片的观看次数。由于我获得了大量的流量,因此在每次点击时增加MySQL中的列会产生太多的开销。
我目前有一个使用Memcache实现的系统,但它几乎只是一个黑客。
每次查看照片时,我都会在Memcache中增加photo-hits_uuid键。另外,我将一个包含uuid的行添加到也存储在Memcache中的失效数组中。每隔一段时间我就会获取失效数组,然后循环遍历其中的行,将照片命中推送到MySQL并递减其Memcache键。
这种方法有效,并且比直接使用MySQL快得多,但有更好的方法吗?
答案 0 :(得分:2)
我做了一些研究,看起来Redis可能是我的解决方案。看起来它本质上是具有更多功能的Memcache - 对我来说最有价值的是列表,这几乎解决了我的问题。
答案 1 :(得分:0)
我有一种使用方式。
方法1 :(文件大小) 每次有人点击页面时,我都会向文件添加一个字节。然后在x秒左右(我设置600)后,我将计算我文件中的字节数,删除我的文件,然后将其更新到MySQL数据库。如果多个服务器添加到缓存服务器中的小文件,这也将允许可伸缩性。使用fwrite附加到文件,您将永远不必读取该缓存文件。
方法2 :(存储在文件中的数字) 另一种方法是在包含命中数的文本文件中存储一个数字,但我建议使用它,因为如果两个进程同时更新,数据可能会关闭(可能与method1相同)。
我会使用方法1,因为虽然文件大小更大,但速度更快。
答案 2 :(得分:0)
我假设您要在服务器上保留访问日志以获取此解决方案。