Memcached入门

memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或者数据,保存的数据像一张巨大的hash表,该表示已key-value对的方式保存在内存中。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

为什么会有memcache和memcached两种名称呢?
memcache是这个项目的名称,而memcached是它服务器端的主程序的文件名。

memcached特征:

  • 协议简单
    它是基于文本行的协议,直接通过telnet在memcached服务器上可以进行存取数据的操作
  • 基于libevent事件处理
    libevent是一套利用c开发的程序库,它将BSD系统的kqueue,linux系统的epoll等事件处理功能封装成一个接口,与传统的select,提高了性能
  • 内置的内存管理方式
    所有的数据都是保存在内存中的,所以存取数据要比硬盘要快,当内存满了之后,会通过LRU算法自动删除不使用的缓存,但是没有考虑数据的容灾问题,重启问题,所有的数据会丢失
  • 分布式
    各个memcached服务器之间乎不同心,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcached客户端

memcache的安装
分为两个过程:

  1. memcache服务器端的安装
    就是在服务器(一般都是linux系统)上安装memcached实现数据的存储
  2. memcached客户端的安装
    在程序中去使用服务器端的memcache提供的函数

Memcache的工作流程:

先检查客户端的请求出具是否在memcached中,如果存在,则直接将数据返回,不再对数据库进行任何操作;如果请求的数据不再memcached中,就会先去查询数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(这个过程需要服务端程序去实现);每次更新数据库的同时 更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

memcached的内存算法:

memcached利用slab allocation机制来分配和管理内存,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,数据在存放时,根据键值大小去批判匹配slab大小,找就近的slab存放,所以存在空间浪费现象。

传统的内存管理方式:使用完通过maclloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效率。

memcached的缓存策略:

memcached的缓存策略是LRU(最近最少使用)加上到期失效策略。当你在memcached内存存储数据是,有可能会指定它在缓存的失效时间,默认为永久。当memcached服务器用完分配的内存是,失效的数据的数据首先被替换,然后是最近未使用的数据。在LRU中,memcached使用的是一种Lazy Expiration策略,自己不会监控存入的key/value对是否过期,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载。

分布式算法:

  1. 余数算法
    先球的键的整数散列值,再除以服务器台数,根据余数确定存取服务器,这种方法计算简单,高效,但在memcached服务器动态增减的时候,几乎所有的缓存都会失效
  2. 散列算法
    先算出memcached服务器的散列值,并将其分布到0到2的32次方的圆上,最后从数据映射到的位置开始顺时针查找,将数据保存到查找到的第一台服务器上,如果超过2的32次方,还是找不到服务器,就将数据保存到第一台memcached服务器上,如果添加一台memcached服务器,只在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响。

memcached安装
先安装libevent

# 下载libevent安装包
wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
# 解压
tar zxvf libevent-2.0.22-stable.tar.gz -C /usr/local/
# 进入到解压目录
cd /usr/local/libevent-2.0.22-stable
# 配置编译、安装
./configure -prefix=/usr/libevent
make
make install

安装memcached

# 下载memcached的安装包
wget http://memcached.org/files/memcached-1.4.24.tar.gz
# 解压安装包到指定的目录
tar zxvf memcached-1.4.24.tar.gz  -C /usr/local/
# 进入解压后的目录
cd /usr/local/memcached-1.4.24
# 配置、编译、安装,注:configure时需要指定libevent的安装路径
./configure -with-libevent=/usr/libevent/ -prefix=/usr/local/memcached 
make
make install

安装完成后,启动memcached

/usr/local/bin/memcached -d -m 10 -u root -l 192.168.100.126 -p 12000 -c 256 -P /tmp/memcached.pid
ps -ef|grep memcached # 查看memcached进程
kill cat /tmp/memcached.pid # 结束memcached进程

启动参数介绍如下:

  • -d 选项是启动一个守护进程,
  • -m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB,
  • -u 是运行Memcache的用户,这里是root,
  • -l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,
  • -p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,
  • -c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定,
  • -P 是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,也可以启动多个守护进程,不过端口不能重复。

测试memcached

[[email protected] memcached]# telnet 192.168.100.126 11211
Trying 192.168.100.126...
Connected to 192.168.100.126.
Escape character is ‘^]‘.
set key1 0 60 4
test
STORED
get key1
VALUE key1 0 4
test
END
quit
Connection closed by foreign host.

memcached安装完成!

时间: 2024-12-28 01:02:23

Memcached入门的相关文章

java操作memcached入门教程demo代码

原文:java操作memcached入门教程demo代码 源代码下载地址:http://www.zuidaima.com/share/1550463754996736.htm 参考地址: http://www.open-open.com/lib/view/open1357831114183.html http://tech.idv2.com/2008/07/10/memcached-001/ 感谢 京-java牛-ID号1  感谢 锡-SuperPrivate-195 在网上搜索了部分代码,一个

分布式缓存---Memcached 入门

[1]Memcached是使用基于Key-value值对形式的内存缓冲,它不是使用磁盘缓冲来充当缓冲,而是使用实实在在的物理内存. [2]Memcached需要在启动时就指定分配的内存大小.命令如:memcached -d -m 内存大小(M为单位) -l IP地址 -p 端口 [3]Memcached是一种单索引的结构化数据组织形式,所有数据项之间彼此独立(不想传统的数据是关系型的),每个数据项都以key为唯一索引,不要以关系型的思维来对待缓存 [4]Memcached使用基于key的hash

Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

【转载】Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

java高级软件架构师实战视频教程 Spring+Mybatis+SpringMVC+Ehcache+Memcached+Redis+Nginx+Varnish+ActiveMQ+Keepalived+MySQL+MongoDB

java高级软件架构师实战阶段1视频教程 迅雷下载  百度云 第001节:整体课程概览第002节:分模块.分工程管理第003节:多模块多Web应用合并War包第004节:Git基本原理和安装配置使用第005节:TortoiseGit的本地使用第006节:Egit的本地使用第007节:远程使用以及冲突解决第008节:基本业务功能和数据字典第009节:搭建基础的开发环境第010节:Spring+Mybatis实现DAO第011节:Mybatis的分页实现第012节:Service的实现以及模块化第0

【转】 Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

缓存算法–LRU

LRU LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,也就是说,LRU缓存把最近最少使用的数据移除,让给最新读取的数据.而往往最常读取的,也是读取次数最多的,所以,利用LRU缓存,我们能够提高系统的performance. LRU实现 1. 新数据插入到链表头部: 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部: 3. 当链表满的时候,将链表尾部的数据丢弃. LRU分析 [命中率] 当存在热点数据时,LRU的效率很好,但偶发性的.周期性的批量

Memcached快速入门

Memcached快速入门 What is Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. 安装 Ubuntu $ sudo apt-get install memcached $ ps aux | grep memcached memcache 26355 0.0 0.0 325400 1208 ? Sl 16:30 0:00 /usr/b

【Firefly入门教程】firefly、MySQL和Memcached共同使用

#coding:utf8 ###########firefly.MySQL和Memcached共同使用########### from firefly.dbentrust.dbpool import dbpool from firefly.dbentrust.memclient import mclient from firefly.dbentrust.mmode import MAdmin hostname = "localhost"#要连接的数据库主机名 user  = "