Cache::Reddit 或:如何将社交媒体用作临时数据存储

有时疯狂的想法是天才的,但大多数时候它们只是疯狂的。我最近向 CPAN 上传了一个新的模块:Cache::Reddit。它是一个具有特色的缓存模块:它将缓存数据保存为 Reddit 上的文本帖子。这是个好主意吗?可能不是,这肯定很疯狂。

设置

你可能不想这样做,但如果你在考虑使用此模块,以下是如何操作。首先,你需要一个拥有足够 karma 使用 API 的 Reddit 账户(通常 handful 个点赞链接和评论就足够了)。其次,你应该创建自己的 subreddit 来发布。使用命令行客户端 cpan 或 cpanm 安装 Cache::Reddit

$ cpan Cache::Reddit

或者

$ cpanm Cache::Reddit

最后设置环境变量:reddit_usernamereddit_passwordreddit_subreddit(数据将发布的 subreddit 名称)。在 Linux / OSX 上,你可以在终端中这样做

$ export reddit_username=somename
$ export reddit_password=itsasecret
$ export reddit_subreddit=mycache

要在 Windows 8 上设置环境变量,这些 步骤 可能适用。

使用 Cache::Reddit

该模块导出你期望的典型缓存函数:用于保存数据的 set、用于检索数据的 get 和用于删除数据的 remove。例如

use Cache::Reddit; #exports get, set, remove

my $monthly_revenues = { jan => 25000, feb => 23500, mar => 31000, apr => 15000 };
my $key = set($monthly_revenues); # serialize and save on reddit
...
my $revenue_data = get($key);
remove($key);

限制

尽管数据存储在云中安全、冗余、备份的环境中,但 Reddit 的频繁用户会欣赏到该服务可能每天多次不可用几秒钟。

使用 get 从缓存检索数据不使用哈希查找;相反,Cache::Reddit 会迭代 subreddit 上的所有可用帖子,直到找到匹配项。这产生了 0(n) 性能,这意味着当缓存的项目越来越多时,get 函数会变得越来越慢。但这不太可能成为性能瓶颈,因为 subreddit 通常在链接丢失到云层之前只保存 1,000 个链接。

数据使用 Storable 进行序列化和反序列化,这可能会在缓存数据被 mod 编辑时带来安全风险。一次可以存储多达 40,000 个字符的数据。除非 subreddit 允许链接和文本帖子,在这种情况下,限制为 10,000 个字符。但 Cache::Reddit 确实拥有 100% 的测试覆盖率。

展望未来

未来,我想利用 Reddit 的投票系统来实现一个简单的 LRU 缓存。评论可能证明是一种强大的版本控制系统。欢迎提交补丁,源代码在 Instagram 上。


本文最初发布在 PerlTricks.com

标签

David Farrell

David 是一位专业程序员,他经常 推文博客 关于代码和编程艺术。

浏览他们的文章

反馈

这篇文章有问题吗?通过在 GitHub 上打开问题或拉取请求来帮助我们。