1

我需要一点理论建议。这是我的情况:我有一个搜索系统,它返回找到的项目列表。但是用户只能在一个页面上显示特定数量的项目,所以当他的第一个请求发送到我的 WCF 服务时,它会获取整个列表,然后测试列表是否长于我的用户的项目数量允许获取,如果列表不再长,则没有问题,我的服务会返回整个列表,但如果是,则有问题。我需要让用户选择他想要显示的页面,所以我让 javascript 知道用户应该选择页面并显示“页码对话框”,然后用户发送第二个请求带页码。并基于此请求,Web 服务选择相关项目并将其发送回用户。所以我需要做的是在第一个请求和第二个请求之间将整个列表存储在服务器上,我将不胜感激任何存储它的方法。我正在考虑会话,但我不知道是否可以仅将超时设置为特定会话(例如Session["list"]),因为该列表仅使用一次并且可以包含数千个项目,所以我不想保留它在服务器上要长。

PS。我不能使用标准分页,场景必须与上面描述的完全相同。

谢谢

4

1 回答 1

0

这听起来像是 memcached 的经典用例。它是一个基于网络的键值存储,用于存储临时值。与内存状态不同,它可用于在服务器之间共享临时缓存值(假设您有多个节点),并且它是跨请求保存状态的好方法(避免使用 cookie 导致的延迟,这是在每个 http 请求上传输到服务器/从服务器传输)。

基本方法是为每个请求创建一个唯一 ID,并将其与该用户请求的特定(一组)memcached 键相关联。然后,您将此唯一 ID 保存在 cookie(或类似机制)中。

但是,请注意,内存是易失性的,因此随时可能丢失。在实践中,这种情况并不常见,memcached 算法使用的是 LRU 队列。更多详情http://code.google.com/p/memcached/wiki/NewOverview

http://memcached.org/

Memcached 是一种内存键值存储,用于存储来自数据库调用、API 调用或页面渲染结果的任意数据(字符串、对象)的小块。

我不是 .net 程序员,但似乎有一些实现:

http://code.google.com/p/memcached/wiki/Clients

.Net memcached 客户端

https://sourceforge.net/projects/memcacheddotnet .Net 2.0 memcached 客户端

http://www.codeplex.com/EnyimMemcached客户端在 .NET 2.0 中开发,牢记性能和可扩展性。(支持一致性哈希。)http://www.codeplex.com/memcachedproviders BeIT Memcached 客户端(优化的 C# 2.0)

http://code.google.com/p/beitmemcached jehiah

http://jehiah.cz/projects/memcached-win32

于 2012-10-08T11:35:20.960 回答