所以我正在开发一个消息传递应用程序来学习这个过程,我实际上使用Redis作为缓存,并使用websockets来推送实时消息。
然后,这个问题出现在我脑海中:
是否可以使用Redis仅运行整个服务(例如消息应用程序)?
注意:这意味着删除任何形式的数据库(我们只保留字符串)
我知道你可以设置Redis是持久的,但这还够吗?它够健壮吗?这是一个足够安全的举动吗?还是完全疯了?
你有什么想法?我真的很想知道,如果你认为有可能,我会试一试。
谢谢!
答案 0 :(得分:1)
一些公司使用Redis作为其独特或主要数据库,因此绝对不会疯狂。
只要您理解并接受它所暗示的权衡,您就可以使用Redis作为后端开发和运行全面服务。
我的意思是:
只要整个数据可以驻留在内存中,就可以将Redis服务器用作高性能数据库。这可能意味着您减少了数据的大小,或者选择不存储其中一些可能由您的应用程序在读取访问时计算或从其他来源导入的数据;
如果您无法将所有数据存储在单个服务器的内存中,则可以使用Redis cluster,但这会限制可用的Redis功能(请参阅implemented subset
您必须考虑服务器崩溃时潜在的数据丢失,并确定它们是否可接受。如果生成它们的过程是健壮的并且在数据库重新启动时再次创建它们(例如,当Redis中存储的数据来自导入过程时,将从最后导入的项目重新开始),可能会丢失一些数据。 。您还可以使用具有不同持久性配置的多个Redis实例:一个在每次修改密钥时写入磁盘,避免潜在的数据丢失,但性能低得多;另一个存储非关键数据,每隔几秒写在磁盘上。
Redis可用于存储结构化数据,而不仅仅是字符串,使用哈希值。每次在关系模型中创建索引时,都必须在Redis中创建数据结构。例如,如果要存储Person对象,则为每个对象创建一个HASH,以存储其属性,包括唯一ID。如果您希望能够按城市获取人员,则为每个城市创建一个SET,并在相应的SET中插入每个新创建的Person的ID。因此,您将能够获得特定城市中的人员列表。这只是一个例子,你必须根据你的应用定义要使用的模型和数据结构。