Memcached是免费的,开源的,高性能的,分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态Web应用程序的使用。
Memcached是由布拉德·菲茨帕特里克(Brad Fitzpatrick)在2003年为LiveJournal 开发的,现在有很多知名网站都在使用,包括:Netlog, Facebook, Flickr, Wikipedia, Twitter, YouTube等。
memcached 主要特点是:
-
开源
-
memcached服务器是一个很大的哈希表
-
显著减少数据库负载。
-
非常适合高负载的数据库网站。
-
在BSD许可下发布
-
从技术上来说,它是在通过TCP或UDP在服务器和客户端之间来访问。
在Ubuntu上安装Memcached
要在Ubuntu上安装Memcached,打开终端,然后输入以下命令:
$sudo apt-get update
$sudo apt-get install memcached
确认memcached是否安装
要确认memcached安装与否,需要运行下面的命令:
$ps aux | grep memcached
上面的命令将显示Memcached是默认端口11211上,如运行在其它端口,那么运行以下命令来启动memcached服务器:
$memcached -p 11111 -U 11111 -d
上面的命令将启动服务器上的TCP端口11111并监听UDP端口11111作为守护进程。可以从一个安装memcached服务器上运行多个实例。
要连接到memcache服务器,需要使用telnet命令到主机和端口名称。
语法
memcached 的 telnet 命令的基本语法如下所示:
$telnet HOST PORT
在这里,Host 和Port 是memcached服务器运行的IP和端口
例子
下面给出的示例演示如何连接到memcached服务器,并运行一个简单的set和get命令。在这个例子中,假定memcached服务器在主机IP是127.0.0.1,端口11211上运行
$telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
// now store some data and get it from memcached server
set yiibai 0 900 9
memcached
STORED
get yiibai
VALUE yiibai 0 9
memcached
END
memcached 的 set 命令用于一个新的值,为一个新的或现有的键(key)设置一个值。
语法
memcached set 命令的基本语法如下所示:
set key flags exptime bytes [noreply]
value
如下图所示以上关键字的含义:
key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。
flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),并沿数据返回服务器存储。
exptime 以秒过期时间,0表示没有延迟,如果exptime大于30天,Memcached将使用它作为UNIX时间戳过期。
bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储在memcached的数据的长度。
noreply (可选) 参数告知服务器不发送回复
value 是一个需要存储的数据。数据需要与上述选项执行命令后,将通过新的一行。
输出
上述命令的输出如下所示:
STORED
STORED 表示成功。
ERROR 以表明有问题,同时保存数据或错误的语法。
示例
set yiibai 0 900 9
memcached
STORED
get yiibai
VALUE yiibai 0 9
memcached
END
在上面的例子中,我们使用yiibai作为键,memcached在其900秒失效时间并设定值。
Memcached的replace 命令用来替换现有键的值。如果该键不存在,那么它输出NOT_STORED
语法
memcached的replace命令的基本语法如下所示:
replace key flags exptime bytes [noreply]
value
以上关键字的含义,如下图所示:
key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。
flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),并沿数据返回服务器存储。
exptime 以秒为过期时间,0表示没有延迟,如果exptime大于30天,Memcached将使用它作为UNIX时间戳过期。
bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储在memcached的数据的长度。
noreply (optional) 参数告知服务器不发送回复
value 是一个需要存储的数据。数据需要将通过在新的一行后,执行命令上述选项。
输出
上述命令的输出如下所示:
STORED
STORED 用来表示成功。
NOT_STORED, 如果数据没有被存储在memcached。
示例
add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
memcached
END
replace key 0 900 5
redis
get key
VALUE key 0 5
redis
END
在上面的例子中,我们已经使用key作为键,并存储memcached在900秒失效时间之前。同样的键替换值为Redis。
memcached的append 命令是用来添加一些数据到现有键(key)。数据是存储在键的现有数据之后。
语法
memcached的append命令的基本语法如下所示:
append key flags exptime bytes [noreply]
value
以上关键字的含义,如下图所示:
key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。
flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),并沿数据返回服务器存储。
exptime 以秒过期时间,0表示没有延迟,如果 exptime 大于30天,Memcached将使用它作为UNIX时间戳过期。
bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储在memcached的数据的长度。
noreply (optional) 参数告知服务器不发送回复
value 是一个需要存储的数据。数据需要将通过在新的一行后,执行命令上述选项。
输出
上述命令的输出如下所示:
STORED
STORED 表示成功。
NOT_STORED, 如果key不存在于memcached服务器。
CLIENT_ERROR, 如果有一些错误。
示例
append tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
append tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
memcachedredis
END
在上面的例子中,我们添加一些数据在键中,如果它不存在,则 memcached 返回NOT_STORED,我们已经建立一个键并附加数据到其中。
Memcached的prepend命令用于添加一些数据到现有的键(key)。数据将存储在键的现有的数据之前。
语法
memcached的prepend命令的基本语法如下所示:
prepend key flags exptime bytes [noreply]
value
以上关键字的含义,如下图所示:
key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。
flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),并沿数据返回服务器存储。
exptime 以秒为过期时间,0表示没有延迟,如果exptime大于30天,Memcached将使用它作为UNIX时间戳过期。
bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储在memcached的数据的长度。
noreply (optional) 参数告知服务器不发送回复
value 是一个需要存储的数据。数据需要将通过在新的一行后,执行命令上述选项。
输出
上述命令的输出如下所示:
STORED
STORED 表示成功。
NOT_STORED, 如果key不存在于memcached服务器。
CLIENT_ERROR, 如果有一些错误。
示例
prepend tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
prepend tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
redismemcached
END
在上面的例子中,我们将一些数据添加一个键,它不存在,memcached返回NOT_STORED ,之后我们已经建立一个键和预先添加数据到其中。
Memcached 的 cas 命令用于设置数据,如果自上一次获取没有人更新。如果该键不在memcached中,那么它返回NOT_FOUND。
语法
memcached的cas命令的基本语法如下所示:
set key flags exptime bytes unique_cas_key [noreply]
value
以上关键字的含义,如下图所示:
key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。
flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),并沿数据返回服务器存储。
exptime 以秒过期时间,0表示没有延迟,如果exptime大于30天,Memcached将使用它作为UNIX时间戳过期。
bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储在memcached的数据的长度。
unique_cas_key 从gets命令的获得唯一键。
noreply (optional) 参数告知服务器不发送回复
value 是一个需要存储的数据。数据需要将通过在新的一行后,执行命令上述选项。
输出
上述命令的输出如下所示:
STORED
STORED 表示成功。
ERROR 以表明有问题,同时保存数据或错误的语法。
EXISTS 以表明自上一次获取起已有人修改了CAS数据。
EXISTS 以表示该键不存在于memcached服务器。
示例
要运行memcached的cas命令,需要从gets命令得到memcached令牌。
cas tp 0 900 9
ERROR
cas tp 0 900 9 2
memcached
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 2
redis
EXISTS
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END
Memcached 的 get 命令用于获取存储在键的值。如果该键在memcached 中不存在,那么它没有返回值。
语法
memcached 的 get 命令的基本语法如下所示:
get key
示例
set yiibai 0 900 9
memcached
STORED
get yiibai
VALUE yiibai 0 9
memcached
END
在上面的例子中,我们已经使用yiibai作为键,并存储在memcached设置900秒失效的时间。
memcached的基本gets命令的语法如下:
gets key
示例
set yiibai 0 900 9
memcached
STORED
gets yiibai
VALUE yiibai 0 9 1
memcached
END
在上面的例子中,我们已经使用 yiibai 作为键,并存储在memcached 设置900秒失效的时间。
Memcached的delete命令用于删除memcached服务器现有的键。
语法
memcached delete命令的基本语法如下所示:
delete key
如果键成功删除,则返回DELETED,如果key没有找到则返回NOT_FOUND,否则返回ERROR。
示例
set yiibai 0 900 9
memcached
STORED
get yiibai
VALUE yiibai 0 9
memcached
END
delete yiibai
DELETED
get yiibai
END
delete yiibai
NOT_FOUND
在上面的例子中,我们已经使用yiibai作为键,并存储在memcached其900秒后失效,之后删除所存储的键。
Memcached的 flush_all 命令用于删除memcached服务器中的所有数据(键值对)。它接受一个叫做time可选参数,表示这个时间后的所有memcached数据会被清除。
语法
memcached 的 flush_all 命令的基本语法如下所示:
flush_all [time] [noreply]
上面的命令总是返回OK
示例
在下面给出的例子中,我们存储一些数据到 memcached 服务器,然后清除所有数据。
set yiibai 0 900 9
memcached
STORED
get yiibai
VALUE yiibai 0 9
memcached
END
flush_all
OK
get yiibai
END