我是redis的新手,我认为我有一个很好的redis用例。我要做的是暂时缓存一个mp3文件。这些MP3的侧面都是> 2M,但我也只是说任何时刻都可以存储5-10个。它们上面的TTL也会很短,分钟,而不是几小时等等。
(磁盘持久性不是一种选择)。
所以,我想知道的是,我是否需要得到花哨的和Base64的mp3来存储它?或者我可以简单地设置keyvalue = bytearray []?
此redis命中将来自Web服务,而Web服务又从具有磁盘命中的下游服务获取数据。所以我要做的就是如果你愿意的话,在我的中间件上短时间缓存mp3文件。我不需要为每个文件执行此操作,只需要> 2M,因此我不必继续向下游服务器执行bak并再次从磁盘请求文件。
谢谢!
尼克
答案 0 :(得分:2)
你当然可以存储它们,并且2MB对于redis来说并不存储。
Redis是二进制安全的,你不需要base64你的数据,只需通过字节数组存储在你最喜欢的客户端。
我考虑做的一件事(用2Mb数据可能不值得,但如果我要存储视频文件)是将文件存储为一系列块,而不是一次加载所有内容。如果您的应用程序不会同时在内存中保存多个文件,并且文件不是那么大,那么可能不值得。但是,如果您期望高并发性,请考虑这一点,因为它将节省应用程序内存,而不是redis内存。
您可以通过多种方式执行此操作:
您可以将每个块存储为序列号为分数的有序集合的元素,并逐个读取它们,因此您不必一次将所有内容加载到内存中。
您可以将文件存储为完整的字符串,但可以使用GETRANGE
读取块。
e.g。
GETRANGE myfile.mp3 0 10000
GETRANGE myfile.mp3 100000 200000
... #until you read nothing of course