Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 3.84 KB

introduce_install.md

File metadata and controls

112 lines (82 loc) · 3.84 KB

memcached简介

memcached作为高性能的分布式缓存系统,它的用户有Twitter、Flickr、Wikipedia、weibo等等,但凡数据量达到一定量级的厂商都在使用,它的作用就是通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度。它可以应对任意多个连接,用非阻塞网络I/O实现,客户端调用也非常简单,常用的方法也就是set,get,delete,replace等
####安装:

  1. 下载:libevent

  2. 下载:memcached

  3. 安装

     #安装libevent
     ./configure --prefix=/usr
     make
     sudo make install
    
     #安装memcached:
     ./configure --with-libevent=/usr
     make
     sudo make install
    
  4. 启动memcache:

      memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
      或者
      memcached -p 11211 -m 64m -d
    
  • -d 作为守护(daemon)进程在后台启动

  • -u 运行memcache的用户

  • -p 小写, TCP端口,默认是11211

  • -m 最大使用内存,默认64M。memcached是基于内存的缓存系统

  • -c 最大并发连接数

  • -l 监听的服务器IP地址

  • -P 保存memcache的pid文件

####memcached调试

  • -v 输出error/warning
  • -vv 输出命令和响应
  • -vvv 输出内部状态

使用非阻塞网络IO,在内存中开辟一块空间,建立一个HashTable,Memcached进程管理这些HashTable。

####memcached的Python客户端:

  • pylibmc:它是对libemcached的一个封装,在github fork数量是最多的。既然是依赖的libemcached,那么还需下载libmemecached
    导入 pylibmc的时候抛异常:

      ImportError: libmemcached.so.11: cannot open shared object file: No such file or directory
    
  • python-libmemcached:看名字就知道也是对libmemcached的封装,与pylibmc不同的是它还需要依赖Pyrex

  • cmemcache

  • python-memcache:这个是纯python实现的客户端,

折腾了下决定还是用python-memcache,安装

pip install python-memcache

花点时间来学习下源代码:memcache.py

基本的使用方法:

import memcache
    mc = memcache.Client(['127.0.0.1:11211'], debug=0)

    mc.set("some_key", "Some value")
    #set方法还有个默认的过期时间为0,表示没有过期时间,最大值是60*60*24*30 也就是一个月
    value = mc.get("some_key")

    mc.set("another_key", 3)
    mc.delete("another_key")

    mc.set("key", "1")   # note that the key used for incr/decr must be a string.
    mc.incr("key")
    mc.decr("key")       #这里的decr方法减到0就不往下减了

The standard way to use memcache with a database is like this::

    key = derive_key(obj)
    obj = mc.get(key)
    if not obj:
        obj = backend_api.get(...)
        mc.set(key, obj)

    # we now have obj, and future passes through this code
    # will use the object from the cache.

Client对象代表memcache servers 池,从构造方法接收的是一个数组就可以看出是一个pool。

key 的值必须是:

  1. 简单的哈稀类型(string,integer等)
  2. 数组

它的方法可以划分为一下几组:
设置:__init__, set_servers, forget_dead_hosts, disconnect_all, debuglog
插入:set, add, replace, set_muti
获取:get, get_multi
整数:incr, decr
移除:delete, delete_multi
####pyramid_beaker Beaker是Pyramid的后端session工厂,同是也是缓存配置器
#####安装

pip install pyramid_beaker
#也可以在setup.py的requires中加上pyramid_beaker

#####配置 在__init__.py文件中加入

config = Configurator()
config.inlucde('pyramid_beaker')

更多参考文章:
http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/ http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/