<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Memcached</id>
	<title>Memcached - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Memcached"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Memcached&amp;action=history"/>
	<updated>2026-07-06T06:42:04Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Memcached&amp;diff=226520&amp;oldid=prev</id>
		<title>imported&gt;Ohtashinichiro 来自 2026年5月6日 (三) 11:30</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Memcached&amp;diff=226520&amp;oldid=prev"/>
		<updated>2026-05-06T11:30:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
{{lowercase}}&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|name = memcached&lt;br /&gt;
|author = [[Brad Fitzpatrick]]&lt;br /&gt;
|released = {{start date|2003|5|22}}&lt;br /&gt;
|latest release version = {{LSR/wikidata}}&lt;br /&gt;
|language = [[C語言]]&lt;br /&gt;
|genre = [[快取]][[伺服器]]&lt;br /&gt;
|license = [[BSD許可證]]&amp;lt;ref name=&amp;quot;Memcached license&amp;quot;&amp;gt;{{cite web | url=https://github.com/memcached/memcached/blob/master/COPYING | title=Memcached license | publisher=[[GitHub]] | accessdate=2014-06-27 | archive-date=2018-12-21 | archive-url=https://web.archive.org/web/20181221184147/https://github.com/memcached/memcached/blob/master/COPYING | dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;memcached&amp;#039;&amp;#039;&amp;#039;是一套[[分布式缓存|分布式的高速缓存系統]]，由[[LiveJournal]]的Brad Fitzpatrick开发，但目前被許多网站使用。這是一套[[開放原始碼]][[軟體]]，以[[BSD license]]授權釋出。&lt;br /&gt;
&lt;br /&gt;
memcached缺乏[[認證]]以及[[计算机安全|安全]]管制，這代表應該將memcached伺服器放置在[[防火牆]]後。&amp;lt;ref&amp;gt;{{Cite web|title=memcached - a distributed memory object caching system|url=https://memcached.org/about|access-date=2022-05-18|work=memcached.org|archive-date=2022-07-07|archive-url=https://web.archive.org/web/20220707091304/https://www.memcached.org/about|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
memcached的[[API]]使用三十二位元的[[循環冗余校驗]]（CRC-32）計算[[鍵值]]後，將資料分散在不同的機器上。當表格滿了以後，接下來新增的資料會以[[快取文件置换机制|LRU]]機制替換掉。由於memcached通常只是當作快取系統使用，所以使用memcached的應用程式在寫回較慢的系統時（像是後端的[[資料庫]]）需要額外的程式碼更新memcached內的資料。&lt;br /&gt;
&lt;br /&gt;
== 使用單位 ==&lt;br /&gt;
&lt;br /&gt;
* [[Digg]]&lt;br /&gt;
* [[Facebook]]（同時也回饋了許多程式碼）&lt;br /&gt;
* Meetup.com（提供memcached對[[Java]]的連線函式庫）&lt;br /&gt;
* [[Slashdot]]&lt;br /&gt;
* [[Wikipedia]]&lt;br /&gt;
* [[Netflix]](亦為贊助者)&lt;br /&gt;
&lt;br /&gt;
== 範例 ==&lt;br /&gt;
&lt;br /&gt;
將純粹使用資料庫查詢的程式碼加上memcached支援是很簡單的，假設這是原來的程式碼：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
function get_foo (int userid) {&lt;br /&gt;
   result = db_select(&amp;quot;SELECT * FROM users WHERE userid = ?&amp;quot;, userid);&lt;br /&gt;
   return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
加上memcached的快取機制後：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
function get_foo (int userid) {&lt;br /&gt;
    result = memcached_fetch(&amp;quot;userrow:&amp;quot; + userid);&lt;br /&gt;
    if (!result) {&lt;br /&gt;
        result = db_select(&amp;quot;SELECT * FROM users WHERE userid = ?&amp;quot;, userid);&lt;br /&gt;
        memcached_add(&amp;quot;userrow:&amp;quot; + userid,  result);&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上述的程式會先到memcached檢查是否有&amp;lt;code&amp;gt;userrow:userid&amp;lt;/code&amp;gt;的資料，如果有則直接傳回結果，如果不存在時再去資料庫查詢，並將結果放到memcached內。&lt;br /&gt;
&lt;br /&gt;
在memcached內已經有快取資訊時將資料庫的資料更新後，上述的程式會抓到舊的資料，這是屬於[[Cache coherency]]的問題。其中一種解決的方法是在更新資料庫時，同時更新memcached內的資訊：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
function update_foo(int userid, string dbUpdateString) {&lt;br /&gt;
    result = db_execute(dbUpdateString);&lt;br /&gt;
    if (result) {&lt;br /&gt;
        data = createUserDataFromDBString(dbUpdateString);&lt;br /&gt;
        memcached_set(&amp;quot;userrow:&amp;quot;+userid, data);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==參考資料==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
* [http://memcached.org/ memcached 官方站台] {{Wayback|url=http://memcached.org/ |date=20210128161107 }}&lt;br /&gt;
* [http://github.com/memcached/memcached memcached 通訊協定] {{Wayback|url=http://github.com/memcached/memcached |date=20201112020123 }}，連結至 [[協作版本系統|CVS]]。&lt;br /&gt;
&lt;br /&gt;
{{NoSQL}}&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
&lt;br /&gt;
[[Category:資料庫快取]]&lt;br /&gt;
[[Category:键-值数据库]]&lt;br /&gt;
[[Category:内存管理软件]]&lt;br /&gt;
[[Category:2003年软件]]&lt;br /&gt;
[[Category:跨平台軟體]]&lt;br /&gt;
[[Category:使用BSD许可证的软件]]&lt;br /&gt;
[[Category:结构化存储]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ohtashinichiro</name></author>
	</entry>
</feed>