memcache 随笔
第一次用可能有很多不足的地方 以后慢慢改进。
memcache 是一个简单的键/值对 是通过键和值储存信息到memcache中 ,通过特定的键请求来返回信息。
信息会无限期的保留在内存中 :除非发生以下情况
1 为缓存 分配的内存耗尽,这是memcache 会使用 LRU(最近最少使用)的方法从此 缓存删除条目 最近未曾使用的条目会此缓存中 先删除,最旧的最先访问。
2 条目被明显删除。
3 条目过期失效。 --- 各个条目均有一个有效的期限 一遍针对此键的信息太陈旧
在使用 memcached 时,
尽量从缓存加载信息
如果存在,使用信息的被缓存版本
如果它不存在:
1执行一个或多个查询来从数据库加载信息
2格式化适合于显示或进一步处理的信息
3将信息存储到缓存内
4使用格式化了的数据
数据加载成为了至多三个步骤的一个过程,从缓存加载数据或从数据库(视情况而定)加载数据并存储在缓存内。
当这个过程首次发生时,数据将正常地从数据库或其他数据源加载,然后再存储到 memcached 内。当下一次访问此信息时,它就会从 memcached 拉出,而不是从数据库加载,节省了时间和 CPU 循环。
问题的另一个方面是要确保如果更改了要存储在 memcached 内的信息,在更新后端信息的同时还要更新 memcached 的版本。
比如 修改了数据 :---
更新数据库内的类别列表=----》格式化信息----》将信息存储到 memcached 内-》将信息返回至客户机;
memcached 内的存储操作是原子的,所以信息的更新不会让客户机只获得部分数据;它们获得的或者是老版本,或者是新版本。
填充并使用memcached:
get(key) 从储存的特定的键的memcache获得信息。 如果没有就返回错误
set(key, value [, expiry]) — 使用缓存内的标识符键存储这个特定的值。如果键已经存在,那么它就会被更新。期满时间的单位为秒,并且如果值小于 30 天 (30*24*60*60),那么就用作相对时间,如果值大于 30 天,那么就用作绝对时间 (epoch)。
add(key, value [, expiry]) — 如果键不存在就将这个键添加到缓存内,如果键已经存在就返回错误。如果您想要显式地添加一个新键而又不会因它已经存在而更新它,那么这个函数将十分有用。
replace(key, value [, expiry]) — 更新此特定键的值,如果键不存在就返回一个错误。
delete(key [, time]) — 从缓存中删除此键/值对。如果您提供一个时间,那么添加具有此键的一个新值就会被阻塞这个特定的时期。超时让您可以确保此值总是可以重新读取自您的数据中心。
incr(key [, value]) — 为特定的键增 1 或特定的值。只适用于数值。
decr(key [, value]) — 为特定的键减 1 或特定的值,只适用于数值。
flush_all — 让缓存内的所有当前条目无效(或到期失效)
安全性:
为了确保最佳性能,memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。这意味着对 memcached 服务器的访问应该这么处理:一是通过将它们放到应用程序部署环境相同的私有侧,二是如果安全性是必须的,那么就使用 UNIX® socket 并只允许当前主机上的应用程序访问此 memcached 服务器。