Delphi有哪些缓存框架?

6
问题: 有哪些可用于Delphi的缓存框架?它们的开发程度如何?如果没有,那么是否有一种被广泛接受的方法来实现相同的目标?适用于面向Win32版本的Delphi。 问题详情: 我所询问的类型的框架在Web开发框架中存在,允许用户执行以下操作:
  • 检查缓存中以前存储的数据/对象
  • 检索数据/对象
  • 存储新的数据/对象
  • 可选地对数据/对象进行标记并加以标注。
  • 根据某些条件(标签、标记、时间限制等)过期数据/对象。

我知道由于Delphi对象没有RTTI,缺少反射服务意味着它们可能不会以完全相同的方式存在,但是是否有一种类似的方式以更Delphi的方式实现至少部分相同的最终结果?

替代方法: 作为本机Delphi库的替代方法:例如,是否有memcached或类似内容的良好绑定集?
6个回答

4
我在Linux上使用了memcached(Windows和MacOS以及几乎所有其他操作系统都有版本),非常简单。
我直接使用indy的TIDTelnet处理它,通过阅读协议的文档,我仅使用了setgetdeletequit
我使用了这种类型的命令(我设置并获取“name”,14是要存储的字节数):
osama@osama:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set name 0 0 14
Osama Alassiry
STORED
get name
VALUE name 0 14
Osama Alassiry
END
quit

memcached允许您每个缓存键存储高达1MB的数据,我使用了类似于“Person | 17 | name”、“Person | 17 | picture”、“Employee | 7 | Salary | Basic”这样的组合键(这些是与我实际所做的无关的虚构名称)...我已经将一些二进制文件以base64格式存储在缓存中,这允许使用高达768k的二进制数据。

memcached还可以通过对键进行哈希并基于哈希选择多个服务器之一来进行分布式。


1
+1,我认为这是很好的建议。memcached是一个稳定且优化的解决方案,不仅适用于Linux,还适用于Windows和Mac OS X。如果在协议级别上进行操作太困难,可以使用客户端库(如libmemcached),它们可以作为Delphi程序的DLL使用。 - mghie
1
很容易,我添加了一个例子。我只使用了set和get、delete和quit。我有自己的函数来完成这个任务。我不喜欢添加dlls。 - Osama Al-Maadeed
我同意mghie的看法——从协议来看,使用现有的DLL包装器或自己创建一个快速的Delphi包装器并不需要太多的工作。 - jamiei

4

1
缓存机制需要手动编写。
Splay Trees 是一种有用且简单的机制,用于存储缓存对象,并检测它们的陈旧程度。

1

这些框架对于已经使用上述框架的应用程序可能会有所帮助,但正如您正确指出的那样,否则可能有点过头了。 - jamiei
1
kbmw,中间件,数不尽。 - Marco van de Voort

1

如果你想要建立自己的编程项目,我建议使用Freepascal,因为它支持64位操作系统。在使用二叉搜索树时,我建议使用k-ary。


1

好的。我可能最终会感到愚蠢,但是TStringList有什么问题吗?我一直在使用一个相当结构化数据的动态数组和TStringList来根据字符串ID查找元素。最近,我将TStringList更新为THashedStringList。它可能会快一点,但还没有什么特别显著的变化。到目前为止,StringList/Array的安排在我的应用程序上提供了很好的性能。

到目前为止,我只缓存了100到150条记录,但我希望它能正常工作,直到大约几千条记录。在我所从事的业务中,这是一个相当大的操作。


3
它不可扩展。你的(32位)机器中有2 GByte RAM。这意味着可以处理几百万条记录。在一个包含一百万记录的排序字符串列表中,插入操作平均需要移动500000个指针(2 MByte)。对字符串进行哈希处理的时间复杂度为O(length(s))。 - Stephan Eggermont
TStringList的实际限制取决于精确需求、增长模式和代码,通常在40000-200000左右。 - Marco van de Voort
感谢您的评论。正如我所说,我正在一个工资程序中缓存大约150个员工记录。如果我达到了40,000名员工,我可能不得不考虑其他选择,但是对于我认为可能会看到的记录数量,StringList是一个很好的缓存机制。 - jrodenhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接