草庐IT

c++ - 有限状态机 : Bad design?

有限状态机通常被认为是OOP中的糟糕设计吗?我经常听到这样的话。而且,在我不得不使用它来处理一个非常古老的、未记录的C++片段之后,我倾向于同意。调试起来很痛苦。可读性/可维护性问题如何? 最佳答案 FSM永远不应该被认为是坏的。它们太有用了,但不习惯它们的人通常会认为它们很麻烦。有许多方法可以使用OOP实现其中之一。有些比其他的更丑。您的底层人员将使用switch语句、跳转表甚至“goto”。如果您正在寻找一种更简洁的方法,我建议您使用Boost'sStateChartlibrary,它专为在C++中实现UML状态图而构建。它利用

design-patterns - 如何限制使用 redis 的登录尝试?

我正在对我的登录实现阻止,因此如果发生多次(10次?)登录失败(比如有人试图暴力破解密码),该帐户在几分钟内无法尝试登录(即使使用有效密码))...我想到了使用Redis的速率限制模式,在redis.io中他们提供了两种可能的实现:Pattern:Ratelimiter但它们会给两者带来问题,尤其是在并发或丢失命令的情况下。您推荐什么解决方案? 最佳答案 我找到了一个可能的解决方案。这是伪代码:FUNCTIONLIMIT_API_CALL(key):value=INCR(key)IFvalue>10THENERROR"toomany

design-patterns - 里兹模式

任何人都可以列出像TDG(表数据网关)这样的redis模式吗?其实我试过TDG,但我不满意。 最佳答案 表数据网关描述了用作数据库中表的接口(interface)或网关的对象。单独的Redis相当于数据库存储,因此您需要一个对象(可能使用ruby​​或php创建)作为redis数据集中一个键或一组键的接口(interface)。最接近的模型是一个对象,它充当保存数据集合(如集合或列表)的键的接口(interface)。希望对您有所帮助。 关于design-patterns-里兹模式,我们

design-patterns - 通过 redis 与推拉共享状态

我想通过Redis共享具有以下要求的状态:解耦:解耦发布者和订阅者单一所有权:每个状态都由一个发布者设置推送:一旦状态发生变化,必须立即通知相关订阅者拉取:订阅者初始化后应立即拉取相关状态如果在没有PULL的情况下需要PUSH,pub\sub将是最优的如果在没有PUSH的情况下需要PULL,一个简单的redis键和值就可以很好地工作支持所有需求的最佳设计模式是什么? 最佳答案 一个解决方案是同时使用pub\sub来发布(推送)状态更改,并使用散列来保持订阅者可以从中读取(拉取)的每种最新发布状态唯一的障碍是您需要按如下方式处理竞争条

database-design - 我应该检查还是只在 Redis 中设置记录?

当用户玩我的一个应用程序时,我会将他们的session保存到每日、每周、每月和所有时间表中。我想知道在插入之前查看用户是否已经在表中是否明智。假设它们不在表中,则无论只有写入什么,都需要以另一种方式进行读取和写入。 最佳答案 这基本上取决于您的要求。由于缺乏信息,我假设当您说每日、每周、每月和所有时间表时,您指的是TTL值。那么有两种情况如果用户最近一次访问必须延长key的过期时间因此,如果您需要覆盖这些key的TTL,则不需要读取(如果用户最近一次访问必须延长key的到期时间)后续访问不得更改TTL否则,如果session过期时间

design-patterns - 使用Step Function同步Primay Data Source和Secondary Data Sources并根据数据更新触发Actions

我有一个充当数据层的应用程序,负责对数据库执行所有CRUD操作。由于可用性问题,我们在其上维护Redis缓存,最终将充当辅助数据源。频繁访问主要数据源会导致节流和延迟问题。某些操作也会根据发布到数据库的更新而触发。我试图将辅助数据源更新和基于这些更新触发的操作从数据访问层抽象到serverlessarchitecture.步进函数是否最适合上述用例?或者我应该考虑不同的架构?CurrentArchitecture 最佳答案 根据您提出的如下所示的架构,我认为步骤功能不是必需的。我会使用SNS将更新分散到多个SQS队列:队列#1触发一

database-design - Redis 是这个模型的正确选择吗

我有以下模型:|string(uniquekey)|about10otherstrings,thathaveallafixedlengthandmaybeempty|通常查询是使用“唯一键并查看其他字符串”。使用Redis应该没问题。但另一个查询是“显示n列为空的键”。我不确定Redis是否可以处理这种性能!? 最佳答案 要在Redis中解决这个问题,您需要维护一些元数据。一种解决方案是为每个“列”添加一个集合类型键,该键将保存该“列”为空白的所有元素的唯一键。显然,在您的应用程序逻辑中,您需要在主哈希中添加和删除值时从这些集合中添

database-design - 使用 Redis 的通知和新闻区

我有一个相册系统,人们可以上传照片并与其他用户互动。我使用mySql和Redis来处理流量和存储数据。在我的系统中,用户可以关注其他用户,如照片、评论和上传新照片。在这种情况下,我想在他们的墙上显示用户关注者的所有事件(如facebook时间线)。比如我关注用户30、40、50、60、70、80id。每当他们添加新照片时,我都希望在我的墙上看到它们。问题是这样的:用户30(他的ID)添加了3张新照片,我将此信息添加到photoevents:30:photoids->[55,56,57]。它在我的墙上是这样的:User30added3newphotos[55,56,57]然后用户40添加

database-design - Redis schema设计——传感器数据流的滑动窗口如何存储?

这是我的第一个传感器数据流模式设计,其N-past读数应该可以从Redis客户端查询(何时将数据客户端保存在循环缓冲区中而不是查询?由于某些传感器每周频率为100Hz,其他传感器每周频率为1x,因此客户端不是慢速传感器的选项,使用本地/远程混合设计可能会带来复杂性?基本上可以归结为大量序列化或大量查询,这是我在初稿中注意到的两种模式:它从一个排序集开始,以按时间戳快速筛选,然后该值是一个字符串化对象(例如5x属性id/temp/humid..)或将对象放入由唯一值引用的外部哈希集中以检索哈希集在第二个查询中。左侧选项一中的工作流会生成大的反序列化对象,但会生成一个查询,而后者会生成大量

database-design - 基于游戏服务器日志事件的玩家统计数据的 MongoDB 架构设计?

我们有几个游戏服务器根据玩家的Action产生事件。我们想保存其中一些事件来构建统计数据;既是为了玩家的乐趣,也是为了分析行为。出于多种原因,我们决定使用MongoDB,主要是性能。但是,我们在架构设计方面遇到了一些困难。使用RDBMS数据库太多年是有代价的。无论如何,生成的事件看起来像这样:玩家1用武器1杀死了玩家2。在捕获这些事件的同时,我还知道服务器ID、正在运行的map等。我显然知道现在几点,并且我可以模拟玩家关系以生成组/团队。但是,这在文档模型中看起来如何?我是否只是将所有事件放在一个集合中,然后将我想在搜索中使用的属性添加为字段?或者创建包含文档的层次结构以获得性能优势(