我有一个 Node.js 应用程序,它通过 Websocket 连接接收数据并将每条消息推送到 Azure Redis 缓存。它将持久的消息数组存储在变量中供下游使用,并定期从缓存同步该数组。有点令人费解,但稍后我想将写入缓存的应用程序的一半与读取缓存的应用程序的一半分开..
在 GMT 02:00 左右,根据 Azure 门户统计数据,我似乎开始在该同步中遇到“缓存未命中”情况,这种情况持续了几个小时,然后在 05 点左右的某个时间再次开始出现“缓存命中”情况:00。
缓存未命中对应于 CPU 使用率的突然增加,在 05:00 左右达到峰值。当我说峰值时,我的意思是它达到了 81%,而之前的最大值约为 6%。
因此,在 05:00 左右的某个时间,CPU 达到峰值,然后恢复正常,“缓存未命中”消失,但查看缓存内存使用情况,我从使用的约 37.4mb 下降到使用的约 3.85mb(这我怀疑是“空”状态),并且该应用程序正在使用的列表已被清空。
应用程序在缓存上运行的唯一函数是 LPUSH 和 LRANGE,没有任何功能可以删除数据,如果有人想知道,当 CPU 增加内存使用量时,内存使用量并没有增加,所以没有什么可以删除的。表明出现了恶意添加数据的情况。
它仅在基本计划中,所以我并不期望它是无懈可击的或任何东西,但即使没有标准计划的复制功能,我也预计它不会完全删除自身 -我的印象是,Redis 会定期将自身写入磁盘,并在从错误中恢复时从中恢复。
所有这些都是我的提问方式:
有人知道这里可能发生了什么吗?
如果这是其他人能够意外触发的事情,那么我是否应该注意在使用相同缓存的其他应用程序中可能遇到的问题,这些问题可能导致它发生灾难性的失败?
我欢迎大家齐声告诉我,标准计划不会遇到此类问题,因为我已经为此付费了,如果感觉这是正确的,那就太好了打电话。
提前非常感谢..
最佳答案
这是我的想法:
Azure Redis 缓存将信息存储在内存中。默认情况下,它不会在磁盘上保存“备份”,因此,您的内存中有信息,但由于某种原因服务器重新启动,您丢失了数据。
PS:请参阅此反馈,目前还没有使用 azure-redis 缓存将信息保留在磁盘上的选项 http://feedback.azure.com/forums/169382-cache/suggestions/6022838-redis-cache-should-also-support-persistence
关于node.js - Azure Redis 缓存数据丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547885/