有人曾经在redis缓存中存储过mp3吗?

时间:2016-02-23 02:28:48

标签: redis

我是redis的新手,我认为我有一个很好的redis用例。我要做的是暂时缓存一个mp3文件。这些MP3的侧面都是> 2M,但我也只是说任何时刻都可以存储5-10个。它们上面的TTL也会很短,分钟,而不是几小时等等。

(磁盘持久性不是一种选择)。

所以,我想知道的是,我是否需要得到花哨的和Base64的mp3来存储它?或者我可以简单地设置keyvalue = bytearray []?

此redis命中将来自Web服务,而Web服务又从具有磁盘命中的下游服务获取数据。所以我要做的就是如果你愿意的话,在我的中间件上短时间缓存mp3文件。我不需要为每个文件执行此操作,只需要> 2M,因此我不必继续向下游服务器执行bak并再次从磁盘请求文件。

谢谢!

尼克

1 个答案:

答案 0 :(得分:2)

你当然可以存储它们,并且2MB对于redis来说并不存储。

Redis是二进制安全的,你不需要base64你的数据,只需通过字节数组存储在你最喜欢的客户端。

我考虑做的一件事(用2Mb数据可能不值得,但如果我要存储视频文件)是将文件存储为一系列块,而不是一次加载所有内容。如果您的应用程序不会同时在内存中保存多个文件,并且文件不是那么大,那么可能不值得。但是,如果您期望高并发性,请考虑这一点,因为它将节省应用程序内存,而不是redis内存。

您可以通过多种方式执行此操作:

  1. 您可以将每个块存储为序列号为分数的有序集合的元素,并逐个读取它们,因此您不必一次将所有内容加载到内存中。

  2. 您可以将文件存储为完整的字符串,但可以使用GETRANGE读取块。

  3. e.g。

    GETRANGE myfile.mp3 0 10000
    GETRANGE myfile.mp3 100000 200000
    ... #until you read nothing of course