小编典典

Web服务体系结构:Redis(作为缓存)和PostgreSQL的持久性

redis

我正在开发一个Java REST API,它使用来自postgreSQL数据库的客户端数据。

数字: 。开始时大约有600个客户。他们中的一些人每隔几秒钟就会发出请求

因为客户是按请求付费,所以我们需要控制成功请求的数量是否达到限制,并且由于每个请求在性能差之后查询PostgreSQL数据(更新’hitsCounter’字段的值),我们正在考虑实施具有redis的缓存系统。

想法:
客户端发出第一个请求后,我们从postgresql检索他的数据并将其存储到redis缓存中。然后使用此缓存数据,例如增加’hitsCounter’键值,直到客户端停止执行请求。
同时,每隔几分钟,后台进程就会将数据从Redis缓存持久化到db表,因此最后,我们将更新后的数据返回给postgresql,我们可以在将来处理它们。

我认为它显然可以提高性能,但是我不确定这个“后台过程”。一种选择是检查缓存元素的TTL,如果它小于某个值(这意味着客户端已完成请求),则将数据持久化。

我很想听听对此的一些意见。这是一个好主意吗?你知道更好的选择吗?


阅读 567

收藏
2020-06-20

共1个答案

小编典典

完全合理的想法,但您没有提及您进行的任何测量。目标交易级别在目标硬件中的瓶颈是什么?不知道这一点,就不能说。

您可以使用未记录的表。只需在每个查询中插入一行,然后每5分钟进行一次汇总,即可清除旧数据。再说一次,用HOT更新,并说75%填充因子也许更新更有效。我不知道(也不是你)我们还没有测量。

不够?将其粘贴在ssd上自己的表空间上。

不够?将其粘贴在自己的vm / machine上。

不够?只需将该死的东西写到每个前端盒上的平面文件中,然后每分钟一次将数据批处理到数据库中即可。

另外-他们为每个查询支付多少费用?您是否担心电源故障而丢失五秒钟的查询日志?您是否需要能够为每个查询复制带有原始详细信息和时间戳的收据?

2020-06-20