使用memcached作为聊天消息的数据库缓冲区
|
我正在玩用PHP和CodeIgniter构建聊天应用程序。
为此,我实现了一个带有memcached的高速缓存“ buffer”,以将最新的聊天消息保存在内存中,从而减轻了数据库的负载。我想做的是这样的:
收到邮件后,我将使用当前分钟(YYYY-MM-DD-HH-MM)作为密钥将其保存在memcached中。不涉及数据库I / O。这样的想法是,来自同一分钟的所有消息都在同一密钥下收集。
用户还会收到从memcached获取的新聊天消息(目前,我正在使用长轮询,但是出于明显的性能原因,它将移至Node.js下的WebSockets)。同样,不涉及数据库I / O。
自动服务器脚本(cronjob)将每5分钟运行一次,收集最近5分钟的内存缓存数据,并将消息插入数据库。
memcached对象设置为在6分钟后过时,因此我们不必在内存中保留超过6分钟的消息数据
每5分钟总共执行一次数据库写操作,而对数据库执行零读操作。
这听起来可行吗?有没有更好的方法(甚至是内置的方法)将memcached用于此目的?
更新:我现在已经在做一些尝试,并且我有一个捷径的想法(阅读:hack)。我可以在Node.js服务器脚本中临时“缓冲”消息,直到准备好存储它们为止。 Node.js服务器中的Javascript对象/消息数组基本上是一种内存缓存。
因此:每隔N条消息/秒,我就可以使用所需的任何方法将缓冲的消息(JS数组的内容)传递到我的数据库,因为它不会被频繁调用。
但是,我担心这可能会破坏Node.js服务器进程,因为它可能不喜欢携带该200 KB数组。
对这个策略有什么想法吗?完全疯了吗?
没有找到相关结果
已邀请:
2 个回复
邦绊门蔽惩
寿柬窟年
?它为您提供几乎想要的功能,而无需使用memcached。 无论如何,您的解决方案看起来也不错。