memcache如何存储数据?

19

我对缓存不太了解,也不知道数据是如何被储存在缓存中的。我尝试过阅读一些在线示例,但每个人都只提供了代码片段来存储和获取数据,而没有解释如何使用memcache进行缓存。我已经了解到它是将数据储存在键值对中,但我无法理解这些键值对储存在哪里?

同时,能否有人解释为什么进入缓存的数据会被散列或加密?我有点混淆序列化数据和哈希数据之间的区别。

3个回答

22

Memcached维基页面中的两句名言:

Memcached的API提供了一个跨多台机器的巨型哈希表。当哈希表已满时,进一步插入会按最近最少使用(LRU)顺序清除旧数据。

以及

服务器将值保留在RAM中;如果服务器的RAM用完了,则丢弃最老的值。因此,客户端必须将Memcached视为短暂缓存;他们不能假设存储在Memcached中的数据在需要时仍然存在。

维基百科页面的其余部分非常有信息量,这可能会帮助您入门。


你所说的“加密”可能是二进制协议的结果:http://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol。 - bhamby

2

它们存储在服务器的内存中,如果您经常使用相同的密钥/值并且知道它们在一段时间内不会更改,那么您可以将它们存储在内存中以便更快地访问。


1
好的,稍微具体一些,这些键值对会存储在服务器的 RAM 上还是 ROM 上?请不要有其他想法,我只是想把这个东西从我的脑海中拿出来,不是在测试任何人。 - macha

2
我不是很熟悉Memcached,所以请带着怀疑的态度听我说 :-) Memcached 是一个单独的进程或一组进程,在内存中存储键值对,以便稍后可以轻松访问。从某种意义上说,它们提供了另外一个全局范围,可以被程序的不同方面共享,使得某个值只需计算一次,就可以在程序的许多不同和独立的区域中使用。从另一方面来说,它们提供了一个快速短暂的数据库,可用于存储暂时性数据。数据不是永久存储的,但通常会在特定请求的生命周期之外存储(如果Memcached从未存储您的数据,则可能每个读取都会失败,但这通常表明您没有为您的用例正确设置它)。
缓存中输入的数据不必进行哈希或加密(但根据缓存机制,数据可能会被哈希或加密)。
“序列化”实际上与这两个概念都没有关系——相反,它是将数据从一种格式(通常适合于内存存储)转换为另一种格式的过程(通常适合于持久性媒介存储)。这个过程的另一个术语是“编组”和“解组”。

1
-1 是因为维基百科上的Memcached页面说:“因此,客户端必须将Memcached视为短暂缓存;当他们需要数据时,他们不能假设存储在Memcached中的数据仍然存在。” - Lasse Bunk
@LasseBunk - 感谢您的评论和投票 :-) - 我已经调整了答案,明确指出Memcached是一个短暂的数据存储。如果还有改进的地方,请告诉我! - Sean Vieira
1
好的 :-) 谢谢。我已经取消了我的 -1。 - Lasse Bunk

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