小编典典

这是ServiceStack REST API上Redis的一个好用例吗?

redis

我正在创建一个移动应用程序,它需要一个API服务后端才能获取/输入每个用户的信息。我将在ServiceStack上开发Web服务,但想知道存储。我喜欢像Redis这样的快速内存缓存系统的想法,但是我有几个问题:

  1. 我创建了一个示例架构,说明了数据存储的外观。相对于MySQL DB或类似的东西,这似乎是使用Redis的一个好案例吗?

架构http://www.miles3.com/uploads/redis.png

  1. 将Redis存储持久保存到磁盘的设置有多困难,或者在写入存储时是内置的?(我是NoSQL方面的新手)

  2. 我目前使用Linux微型实例在AWS上进行设置(因为一年免费)。我知道这个答案有很多因素,但是总的来说,这足以满足我的Web服务和Redis的需求吗?由于Redis处于内存中,这就足够了吗?我想如果我的移动应用程序飞速发展(嘿,我们可以做梦吗?),那么我将开始达到实例的极限。


阅读 520

收藏
2020-06-20

共1个答案

小编典典

设计NoSQL Redis应用程序时的注意事项

1)为了在Redis中正确开发,您应该更多地考虑如何构造C#程序中的关系,即使用C#集合类,而不是用于RDBMS的关系模型。更好的思路是更多地考虑像文档数据库这样的数据存储,而不是RDBMS表。本质上,所有内容都通过键(索引)在Redis中泛滥,因此您只需要弄清楚将保留在其自己的“键名称空间”中的主要实体(即聚合根)是什么,或者它是否是非主要实体,即元数据应仅保留其父实体。

Redis作为主要数据存储的示例

这是一篇很好的文章,介绍了使用Redis创建一个简单的博客应用程序的过程:

http://www.servicestack.net/docs/redis-client/designing-nosql-
database

基本上,您需要分别存储和获取每种类型的项目。

var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);

您存储实体之间关系的方式是利用Redis的集合,例如:您可以使用以下方式从概念上存储“用户/观察者”关系:

SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]

Redis是无架构且幂等的

将id存储到redis集是幂等的,即,您可以多次将 watcherId1
添加到同一set中,并且只会出现一次。这很不错,因为它意味着您不需要检查关系的存在,并且可以自由地添加相关ID,就像它们从未存在过一样。

相关:写入或读取不存在的Redis集合(例如,列表)与写入空集合相同,即,当您在访问非Redis集合时将一个项目添加到列表时,即刻创建列表现有列表将仅返回0个结果。这是无摩擦且生产率高的胜利,因为您无需预先定义架构即可使用它们。尽管您需要Redis提供EXISTS操作来确定键是否存在或TYPE操作,所以您可以确定其类型。

在您的文章上创建您的关系/索引

要记住的一件事是,由于Redis中没有隐式索引,因此通常需要设置在写入过程中读取自己所需的索引/关系。基本上,您需要预先考虑所有查询要求,并确保在编写时设置必要的关系。上面的RedisStackOverflow源代码是一个很好的例子,展示了这一点。

注意:ServiceStack.Redis C#提供程序假定您有一个称为 Id 的唯一字段,它是其主键。您可以使用
ModelConfig.Id() 配置映射将其配置为使用其他字段。

Redis持久性

2)Redis支持开箱即用的RDB和仅附加文件(AOF)两种类型的持久性模式。RDB编写例行快照,而“仅追加文件”的作用就像一个事务日志,记录了快照之间的所有更改-
我建议同时添加这两个快照,直到您对每个快照的功能和应用程序的需求感到满意为止。您可以在http://redis.io/topics/persistence上阅读所有Redis持久性。

注意Redis还支持琐碎的复制,您可以在以下位置了解更多信息:http :
//redis.io/topics/replication

Redis喜欢RAM

3)由于Redis主要在内存中运行,因此最重要的资源是您有足够的RAM来将整个数据集保存在内存中,还有一个用于快照到磁盘的缓冲区。Redis的效率很高,因此即使是很小的AWS实例也可以处理很多负载-
您要查找的是拥有足够的RAM。

使用Redis Admin UI可视化数据

最后,如果您使用的是ServiceStack
C#Redis客户端,
我建议您安装Redis
Admin
UI
,该UI可以很好地显示您的实体。您可以在以下位置查看其实时演示:http
:
//servicestack.net/RedisAdminUI/AjaxClient/

2020-06-20