memcached是高性能的分布式内存缓存数据库。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
memcached的特点
一、memcached的服务器客户端通信使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。
$ telnet localhost 11211
二、基于libevent的事件处理
三、内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。
四、 各个memcached不会互相通信以共享信息。分布式算法完全由客户端实现。
memcached的使用
默认情况下memcached安装到/usr/local/bin下。
启动命令
-p | 使用的TCP端口。默认为11211 |
-m | 最大内存大小。默认为64M |
保存数据命令与方法
向memcached保存数据时可以指定期限(秒)。不指定期限时,memcached按照LRU算法保存数据。
选项 | 说明 |
add | 仅当存储空间中不存在键相同的数据时才保存 |
replace | 仅当存储空间中存在键相同的数据时才保存 |
set | 与add和replace不同,无论何时都保存 |
数据操作
command <key> <flags> <expiration time> <bytes> <value>
参数 | 用法 |
---|---|
key | key 用于查找缓存值 |
flags | 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 |
expiration time | 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) |
bytes | 在缓存中存储的字节点 |
value | 存储的值(始终位于第二行) |
1.获取数据可以使用get和get_multi方法。
2.删除数据使用delete方法。
数值加减
incr <key> <num>
decr <key> <num>
增添内容
在数据末尾添加内容
append <key> <flags> <expiration time> <bytes>
<value>
在数据开头添加内容
prepend
缓存管理命令
stats
flush_all 清理缓存中的所有名称/值对。
缓存工作性能
memcached 不能进行模糊查询,只能进行完全匹配查询。
多台memcached并行工作
memcached通过一致性散列算法来分散数据,数据会根据服务器的台数进行自动分散。
memcached与MySQL协同工作
1.读取
从 Web 层获取请求(需要执行一次数据库查询)并检查之前在缓存中存储的查询结果。如果我找到所需的值,则返回它。如果未找到,则执行查询并将结果存储在缓存中,然后再将结果返回给 Web 层。
2.写入
将数据写入到数据库中时,首先需要执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效。此过程有助于防止缓存和数据库之间出现数据不一致性。