Memcache与python

来源:互联网 发布:淘宝的电子商务系统 编辑:程序博客网 时间:2024/06/11 17:29

理解一些概念:
Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这 些HashTable。Memcached是简单而强大的。它简单的设计促进迅速部署,易于发展所面临的问题,解决了很多大型数据缓存。它的API可供最流行的语言。Memcache是该系统的项目名称,Memcached是该系统的主程序文件,以守护程序方式运行于一个或多个服务器中,随时接受客 户端的连接操作,使用共享内存存取数据。
Memcached最吸引人的一个特性就是支持分布式部署;也就是说可以在一群机器上建立一堆Memcached服务,每个服务可以根据具体服务器的硬件配置使用不同大小的内存块,这样一来,理论上可以建立一个无限巨大的基于内存的cache storage系统。

1.分别把memcached和libevent下载回来,放到 /tmp 目录下
Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent。

1cd /tmp
2$ wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
3$ wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安装libevent

1tar zxvf libevent-1.2.tar.gz
2cd libevent-1.2
3$ ./configure –prefix=/usr
4make
5make install


3.测试libevent是否安装成功

1ls -al /usr/lib | grep libevent
2lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
3-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
4-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
5-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
6lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3

还不错,都安装上了。
4.安装memcached,同时需要安装中指定libevent的安装位置

1cd /tmp
2tar zxvf memcached-1.2.0.tar.gz
3cd memcached-1.2.0
4$ ./configure –with-libevent=/usr   # 注意这个配置跟着libevent走
5make
6make install

如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,
5.测试是否成功安装memcached

1ls -al /usr/local/bin/mem*
2-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
3-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

6 安装python-memcached安装

1sudo apt-get install python-memcache

memcached运行参数:

1/usr/local/memcached/bin/memcached -d -m 128 -u root -l 192.168.0.97 -c 256 -P /tmp/memcached.pid

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

python使用例子:

1#!/usr/bin/env python
2import memcache
3mc = memcache.Client(['127.0.0.1:12000'],debug=0)
4mc.set("foo","bar")
5value = mc.get("foo")
6print value

Python-memcached API总结
整个memcache.py只有1241行,相当精简
主要方法如下:
@set(key,val,time=0,min_compress_len=0)
无条件键值对的设置,其中的time用于设置超时,单位是秒,而min_compress_len则用于设置zlib压缩(注:zlib是提供数据压缩用的函式库)
@set_multi(mapping,time=0,key_prefix=”,min_compress_len=0)
设置多个键值对,key_prefix是key的前缀,完整的键名是key_prefix+key, 使用方法如下
>>> mc.set_multi({‘k1′ : 1, ‘k2′ : 2}, key_prefix=’pfx_’) == []
>>> mc.get_multi(['k1', 'k2', 'nonexist'], key_prefix=’pfx_’) == {‘k1′ : 1, ‘k2′ : 2}
@add(key,val,time=0,min_compress_len=0)
添加一个键值对,内部调用_set()方法
@replace(key,val,time=0,min_compress_len=0)
替换value,内部调用_set()方法
@get(key)
根据key去获取value,出错返回None
@get_multi(keys,key_prefix=”)
获取多个key的值,返回的是字典。keys为key的列表
@delete(key,time=0)
删除某个key。time的单位为秒,用于确保在特定时间内的set和update操作会失败。如果返回非0则代表成功
@incr(key,delta=1)
自增变量加上delta,默认加1,使用如下
>>> mc.set(“counter”, “20″)
>>> mc.incr(“counter”)
@decr(key,delta=1)
自减变量减去delta,默认减1

0 0