【发布时间】:2021-01-22 10:41:51
【问题描述】:
尊敬的 StackOverflow 社区,
对于我的一个项目,我需要将(临时)数据存储在数据库以外的其他地方。其实它有点复杂。我在 NopCommerce 中有一个结帐页面,用户可以在其中选择交货时间甚至位置,例如取货。在用户付款之前,这些数据必须临时存储。只有这样我才会请求数据并存储在数据库中。以便稍后我可以检索数据并显示在我的仪表板中,以便我知道包裹何时发货。
要求:
- 持续时间:12-24 小时。
- 存储为用户特定数据。
- 必须在很多会话中保护数据。取决于用户。例如。如果用户选择了交货时间,但想在付款前查看其他地方。这些数据必须存储在所有这些会话中。
- 如果可能,服务器端。
在 Microsoft 之后,我有很多选择: Session and state management in ASP.NET Core
现在我尝试使用“MemoryCacheEntryOptions”将数据存储在内存中(缓存数据)。问题在于它的应用范围很广。并且很难维护数百个用户。
其他选项是'会话状态'。 问题是这些数据只存在一个会话。我需要将数据保存至少 12 到 24 小时。
然后我们有'临时数据'。这似乎是一个很有前途的选择。它很棒,因为它一直保存到它被使用/读取。您甚至可以使用“Peek”和“Keep”方法在查看时保留数据。问题:它需要一个控制器。而请求数据是一个回调方法,不需要Controller。
'Query Strings' 那么它不多,不是吗?这可能不是用户关键数据,但似乎查询字符串不是我要找的。p>
'隐藏字段'也不太适合。因此它不是表单数据。
'HttpContext.Items' 绝对不适合。数据仅针对单个请求存储。
“缓存”很难维护用户特定数据。
所以我的问题是。如果可能的话,如何将所有这些数据临时保存在服务器端至少一天,同时有数百名用户。并稍后在回调中请求数据,将其存储在 DB 中,直到订单发货。
【问题讨论】:
-
为什么不使用不同的数据库来存储临时数据?但另一种选择是将文件写入具有特定 ID 的磁盘?
-
临时数据库可能不是一个坏主意。我已经考虑过了。但是我必须安排在 x 时间后清除数据库数据的任务。文件到磁盘?而不是。
-
清除数据库表可以通过代理中的作业完成
-
de Agent 的工作是什么意思?
-
SQL Server 有一个 SQL Server 代理(不在 Express 中)。在那里你可以安排备份、执行存储过程等。
标签: asp.net caching nopcommerce tempdata