【问题标题】:Are there any Caching Frameworks for Delphi?Delphi 有缓存框架吗?
【发布时间】:2010-10-23 14:28:02
【问题描述】:

问题:哪些缓存框架可用于 Delphi,它们的开发程度如何?如果没有,那么是否有一种被广泛接受的方式来实现相同的目标? 适用于 Delphi 的 Win32 目标版本。

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

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

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

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

【问题讨论】:

    标签: delphi memory-management caching


    【解决方案1】:

    缓存机制需要手动滚动。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这些框架可能对已经使用上述之一的应用程序很有用,但正如您正确指出的那样,这些框架可能有点过头了。
      • - kbmw,中间件,不胜枚举。
      【解决方案3】:

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

      我直接处理,使用indy的TIDTelnet,通过读取协议的documentation,我只使用了 setgetdelete ,然后退出

      我使用了这种命令(我设置并获取“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,我认为这是个好建议。 memcached 是一种稳定且经过优化的解决方案,不仅适用于 Linux,还适用于 Windows 和 Mac OS X。如果在协议级别上做这件事太难了,有一些客户端库(如 libmemcached)可以被 Delphi 程序用作 DLL。
      • 很简单,我加了一个例子。我只使用了 set 和 get、delete 和 quit。我有自己的功能来做到这一点。我不喜欢添加 dll。
      • 我同意 mghie - 迄今为止最好的建议,看看协议,使用现有的包装器作为 DLL 或自己创建一个快速的 Delphi 包装器不会太多工作。
      【解决方案4】:

      如果您想构建自己的,您可能希望在 Freepascal 中进行,因为它支持 64 位工作。我建议使用 k-ary,而不是二叉树。

      【讨论】:

        【解决方案5】:

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

        到目前为止,我只缓存了 100 到 150 条记录,但我希望它可以正常工作,最多可能有几千条。在我从事的业务中,这是一项相当大的业务。

        【讨论】:

        • 它无法扩展。您的(32 位)机器中有 2 GB 的内存。这产生了几百万条记录。在具有一百万条记录的排序字符串列表中,插入意味着平均移动 500000 个指针(2 MByte)的块移动。散列一个字符串是 O(length(s))。
        • tstringlist 的实际限制在 40000-200000 左右,具体取决于具体要求和增长模式和代码。
        • 感谢您的评论。正如我所说,我在工资单程序中缓存了大约 150 条员工记录。如果我有多达 40,000 名员工,我可能不得不考虑替代方案,但 StringList 为我认为可能会看到的记录数量提供了一个很好的缓存机制。
        【解决方案6】:

        可以在 google 代码上找到一个用于 Memcached 的 Delphi 客户端:

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

        【讨论】:

          猜你喜欢
          • 2011-04-05
          • 2012-11-16
          • 1970-01-01
          • 1970-01-01
          • 2015-03-11
          • 1970-01-01
          • 2011-01-23
          • 2012-12-13
          • 1970-01-01
          相关资源
          最近更新 更多