思考(六十六):无状态服务的数据存取与事务处理

本文讨论了无状态服务在处理大量数据存取和事务时遇到的挑战。通过内置LRUCache和数据版本号,优化了数据读取性能,并提出了一种利用LRUCache实现事务处理的方案,同时指出了这种方法可能存在的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

痛点一

每次存取数据量太大,影响性能

比如,背包数据,每次请求操作都存取背包数据,会影响机房内流量与数据库性能

痛点二

一次请求,通常会涉及多次数据存取,程序 panic 会导致只提交部分数据到数据库

这涉及到无状态服务如何让便利的逻辑编写同时兼具事务

内置 LRUCache 解决大数量量存取

无状态服务,主要是解绑数据与服务进程间的一一对应关系

即请求到达任何一个服务进程,都能正确处理该请求

因此,本质上与无状态服务上是否有缓存无直接关系

比如,引入 LRUCache ,并做如下规范,还是拿背包数据做例子:

  • 背包数据有版本号字段
  • 如果 LRUCache 中无对应背包数据,则从数据库加载
  • 如果 LRUCache 中有背包数据,则只需要从数据库读取背包数据的版本号
  • 如果版本号一致,则直接使用 LRUCache 中的

那么上述操作,就把一次从数据库读取背包数据的操作,替换为读取一个整数值的操作

对于写数据库,则可以根据数据库特点,来实现不需要全量覆盖的背包数据保存方法

另外,为了能提高 LRUCache 的命中率,可以把同个玩家的请求路由到同个服务进程上

(另外玩家请求的并发问题,不属于本文相关。请参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值