Are there any Caching Frameworks for Delphi?

2019-02-13 22:58发布

Question: What Caching Frameworks available for Delphi and how well developed are they? If there aren't any then is there a widely-accepted way of achieving the same objective? Applicable to Win32 targeting versions of Delphi.

Question Detail: The type of framework that I'm enquiring about exists largely in Web Development frameworks allowing the user to:

  • Check the Cache for previously stored Data/Object
  • Retrieve the Data/Object
  • Store the new Data/Object
  • Optionally tag the Data/Object and label it.
  • Expire Data/Objects based on some criteria (labels, tags, time limits etc).

I understand that a lack of reflection services for Delphi Objects without RTTI means that they probably won't exist in quite the same way but is there a similar way of achieving at least part of same end result in a more Delphi way?

Alternative Approach: As an alternative to a native Delphi library: Is there for example a good set of bindings for memcached or something similar?

6条回答
成全新的幸福
2楼-- · 2019-02-13 23:29

These frameworks provide some way of caching objects

Depending on your exact requirements, these might be over the top. If you try to implement a solution of your own, I'd suggest you take a look at the various containers in the Jedi VCL as a starting point.

查看更多
再贱就再见
3楼-- · 2019-02-13 23:31

The caching mechanism needs hand-rolling.

Splay Trees are a useful and straightforward mechanism for storing cached objects, and also detecting how stale they are.

查看更多
我想做一个坏孩纸
4楼-- · 2019-02-13 23:35

A Delphi client for Memcached can be found on google code:

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

查看更多
Root(大扎)
5楼-- · 2019-02-13 23:35

Ok. I will probably end up feeling foolish about this, but what's the problem with the TStringList? I had been using a dynamic array of fairly structured data with a TStringList to find an element based on a string ID. Recently, I updated the TStringList to a THashedStringList. It may be a little faster, but nothing really remarkable yet. The StringList/Array arrangement has provided great performance on my application so far.

I have only been caching 100 to 150 records so far, but I expect it will work fine up to maybe a couple of thousand. In the business I am in, that is a pretty big operation.

查看更多
劳资没心,怎么记你
6楼-- · 2019-02-13 23:37

I have used memcached on Linux (there are versions on Windows and MacOS, as well as almost any other OS), It's quite simple.

I dealt with it directly, using indy's TIDTelnet, by reading the protocol's documentation, I only used set , get, delete, and quit.

I used this kind of commands (I set and get "name", 14 is the number of bytes to be stored):

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 allows you to store up to 1MB per cache key, I used composite keys like 'Person|17|name', 'Person|17|picture', 'Employee|7|Salary|Basic' (these are fictitious names unrelated to what I really did) ... I have stored some binary files in the cache as base64 which allows to use up to 768k of binary data.

memcached can also be distributed on several servers by hashing the keys, and selecting one of several servers based on they hash.

查看更多
成全新的幸福
7楼-- · 2019-02-13 23:55

If you want to build your own, you probably want to do it in Freepascal, as that has working 64 bit support. Instead of binary splay trees, I'd suggest a k-ary.

查看更多
登录 后发表回答