Delphi有任何缓存框架吗?

时间:2009-05-04 10:07:08

标签: delphi memory-management caching

问题: Delphi可用的缓存框架以及它们的开发情况如何?如果没有,那么是否有广泛接受的方法来实现同样的目标? 适用于Delphi的Win32目标版本。

问题详情:我所询问的框架类型主要存在于Web开发框架中,允许用户:

  • 检查缓存中以前存储的数据/对象
  • 检索数据/对象
  • 存储新数据/对象
  • 可选择标记数据/对象并标记它。
  • 根据某些条件(标签,标签,时间限制等)使数据/对象过期。

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

替代方法:作为原生Delphi库的替代方案:例如,是否有一组很好的memcached或类似的绑定?

6 个答案:

答案 0 :(得分:4)

我在Linux上使用过memcached(在Windows和MacOS上都有版本,以及几乎任何其他操作系统),这很简单。

我使用indy的TIDTelnet直接处理,通过阅读协议的documentation,我只使用设置获取删除退出

我使用了这种命令(我设置并获取“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 :(得分:4)

可以在谷歌代码上找到Memcached的Delphi客户端:

http://code.google.com/p/delphimemcache/

答案 2 :(得分:1)

缓存机制需要手动滚动。

Splay Trees是一种有用且直接的机制,用于存储缓存对象,还可以检测它们的陈旧程度。

答案 3 :(得分:1)

这些框架提供了一些缓存对象的方式

根据您的具体要求,这些可能会超出最高要求。如果您尝试实施自己的解决方案,我建议您查看Jedi VCL中的各种容器作为起点。

答案 4 :(得分:1)

如果你想建立自己的,你可能想在Freepascal中做,因为它有64位支持。而不是二元展开树,我建议使用k-ary。

答案 5 :(得分:1)

确定。我可能最终会对此感到愚蠢,但是TStringList的问题是什么?我一直在使用带有TStringList的动态数组相当结构化的数据来查找基于字符串ID的元素。最近,我将TStringList更新为THashedStringList。它可能会快一点,但没有什么真正值得注意的。到目前为止,StringList / Array安排在我的应用程序中提供了很好的性能。

到目前为止,我只缓存了100到150条记录,但我预计它可以正常工作,可能只有几千条记录。在我所从事的业务中,这是一项非常大的操作。