83-高性能,分布式缓存memcache简析

一. memcached简介

memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in      speeding up dynamic web applications by alleviating database load.

(由 LiveJournal旗下的Danga Interactive研发)

#高性能,分布式缓存系统

缓存服务器:

缓存:cache,无持久存储功能;

bypass缓存 # 旁挂式缓存

k/v cache,仅支持存储流式化数据;

特性:

k/v cache:仅可序列化数据;存储项:k/v (key:value)

智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;

分布式缓存:互不通信的分布式集群;

分布式系统请求路由方法:取模法(对机器数量取模来决定发往哪台机器),

一致性哈希算法(顺时针哈希环);

算法复杂度:O(1)

清理过期缓存项:

缓存耗尽:LRU

缓存项过期:惰性清理机制

#即会定期检查缓存,当缓存失效时候并不做清理,而是有新缓存写入时

候,直接覆盖原有的旧缓存内容

二. 安装配置:

由CentOS 7 base仓库直接提供:

监听的端口:

11211/tcp, 11211/udp

主程序:/usr/bin/memcached

配置文件:/etc/sysconfig/memcached

Unit File:memcached.service

管理工具:memcached-tool

协议格式:memcached协议

文本格式

二进制格式

三.memcache 命令详解

详细协议帮助 :  /usr/share/doc/memcached-1.4.15/protocol.txt

命令:

统计类:stats, stats items, stats slabs, stats sizes

存储类:set, add, replace, append, prepend

命令格式:<command name> <key> <flags> <exptime> <bytes>

额外信息  过期时间  大小

<cas unique>        #回车后才能输入值

key    key 用于查找缓存值

flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息

# 默认用1 即可

expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永

远)

bytes 在缓存中存储的字节点

value 存储的值(始终位于第二行)

检索类:get, delete, incr/decr

清空:flush_all

示例:

telnet> add KEY <flags> <expiretime> <bytes> \r

telnet> VALUE参数 用法

memcached程序的常用选项:

-m <num>:Use <num> MB memory max to use for object storage; the

default is 64 megabytes.

-c <num>:Use <num> max simultaneous connections; the default is 1024.

-u <username>:以指定的用户身份来运行进程;

-l <ip_addr>:监听的IP地址,默认为本机所有地址;

-p <num>:监听的TCP端口, the default is port 11211.

-U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.

-M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空

间可用时为止;

-f <factor>:增长因子(内存分块的大小增长倍数);默认是1.25;

-t <threads>:启动的用于响应用户请求的线程数;

memcached默认没有认证机制,可借用于SASL进行认证;

SASL:Simple Authentication Secure Layer

三.   API:

php-pecl-memcache

php-pecl-memcached

python-memcached

libmemcached

#此工具包中包含多个memcache的命令行管理工具

libmemcached-devel

命令行工具:

memcached-tool  SERVER:PORT  COMMAND

-------------------------------------------------

[[email protected] ~]# rpm -ql libmemcached

/usr/bin/memaslap

/usr/bin/memcapable

/usr/bin/memcat

/usr/bin/memcp

/usr/bin/memdump

/usr/bin/memerror

/usr/bin/memexist

/usr/bin/memflush

/usr/bin/memparse

/usr/bin/memping

/usr/bin/memrm

/usr/bin/memslap

/usr/bin/memstat

/usr/bin/memtouch

--------------------------------------------------

四. 利用 telnet 管理memcache 示例

1. yum install telnet

--> telnet localhost 11211

stats:

五. nginx 对memcache 的支持

所需模块:  ngx_http_memcached_module

Syntax: memcached_bind address [transparent] | off;

Default: —

Context: http, server, location

#用于绑定 memcache 服务器

Syntax: memcached_pass address;

Default: —

Context: location, if in location

#绑定memcache 集群

eg:

server {

location / {

set $memcached_key "$uri?$args";

#将指定的key 放入memcache 生成缓存;

memcached_pass host:11211;

error_page     404 502 504 = @fallback;

}

location @fallback {

proxy_pass  http://backend;

}

}

============================================================

时间: 2024-08-09 06:27:04

83-高性能,分布式缓存memcache简析的相关文章

php5.4之分布式缓存memcache(windows7下安装配置)

一.安装memcache memcached在windows7上的安装问题 现在安装包:http://www.jb51.net/softs/44843.html   memcache的安装包 错误: 通过cmd命令行进入到D:\webEve\memcached(下载后的解压目录) 运行 memcached.exe -d install 报错" failed to install service or service already installed" 解决方法: www.2cto.c

分布式缓存Memcache和Redis

引言 针对于现在计算机的CPU和网络设施,对应用程序来说,执行效率的瓶颈,已经不是代码的长度(实现同一个功能)和带宽了,而是,代码访问资源的过程,即:让我们的程序慢下来的罪魁祸首就是IO操作. 程序从硬盘上读取数据是一个非常花费时间的操作,因为我们现在所使用的硬盘是机械式的,你想机械的运行速度和电的速度,那是一个级别上的选手吗? 为了解决程序的瓶颈,人们提出了一种想法:使用空间换取时间.程序访问硬盘用的时间长,那就让数据放到内存中,让程序访问内存,这样不就节省了时间.这样确实剩下了我们程序获取数

分布式缓存——memcache原理

内容:1.什么是Memcached 2.MemCache和MemCached的区别 3.memcache访问模型 4.Memcached作为高速运行的分布式缓存服务器具有以下特点 5.Memcached的内存算法 6.Memcached的缓存策略             7.分布式算法(Consistent Hashing)             8. MemCache的特性和限制总结 1.什么是Memcached        MemCache是一个自由.源码开放.高性能.分布式的分布式内存

分布式缓存Memcache

Memcached是分布式的,也就是说它不是本地的.它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式). Memcached使用libevent库实现网络连接服务.libevent是个程序库,它将Linux的epoll.BSD类操作系统的kqueue等事件处理功能封装成统一的接口.即使对服务器的连接数增加,也能发挥O(1)的性能. Memcached是“分布式”的内存对象缓存系统,那些不需要“分布”的,不需要共享的,或者干

分布式缓存-Memcache定义

Memcache 是一款开源的高性能的分布式内存对象缓存系统,用于在应用中减少对数据库的访问,提高应用的访问速度,降低数据库负载. 为了在内存中提供高速的数据查找能力,Memcache使用Key-value的形式存储和访问数据,在内存中维护了一张巨大的HashTable,是的对数据的查找的时间复杂度降低到了O(1),保证了对数据的高速访问. 由于内存的大小是有限的,当内存中没有过多的空间来存储新的数据时,Memcache会使用LRU(Least Recently Used)算法,将最近最少未使用

分布式缓存Memcache学习笔记

Memcache的使用 使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让 Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取.那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的.我这里简单提出我的个人看法,未经实践,权当参考. 分布式应用 Memcache本来支持分布式,我们客户端稍加改造,更好的支持.我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有User I

memcache 分布式缓存

转载地址:http://www.cnblogs.com/phpstudy2015-6/p/6713164.html 作者:那一叶随风 1.memcached分布式简介 memcached虽然称为"分布式"缓存服务器,但服务器端并没有"分布式"功能.Memcache集群主机不能够相互通信传输数据,它的"分布式"是基于客户端的程序逻辑算法进一步实现的. 请看下面简图: 根据上图我们简述分析分布式memcached的set与get的过程 set过程:

MemCache分布式缓存的一个bug

Memcached分布式缓存策略不是由服务器端至支持的,多台服务器之间并不知道彼此的存在.分布式的实现是由客户端代码(Memcached.ClientLibrary)通过缓存key-server映射来实现的,基本原理就是对缓存key求hash值,用hash值对服务器数量进行模运算,该key值被分配到模运算结果为索引的那台server上. Memcached.ClientLibrary对缓存key计算hashcode的核心算法如下: 1 /// <summary> 2 /// Returns a

Memcached 高性能分布式对象缓存系统

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议. 因此,通过telnet也能在memcached上