安装memcache
#源码安装memcached,依赖libevent
#需要提前安装:yum -y install libevent-devel
wget http://memcached.org/latest
tar -zxf memcached-1.5.7.tar.gz
cd memcached-1.5.7/
./configure && make && make install
#编译安装以后,启动memcached进程
memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid
#memcached参数说明:
-d :启动一个守护进程;
-m :分配给Memcache使用的内存数量,单位是MB;
-u :运行memcache的用户;
-l :监听的服务器IP地址;
-p :设置Memcache监听的端口,最好是1024以上的端口;
-c :选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定;
-P :设置保存Memcache的pid文件。
使用pip安装memcache的库
[root@shanwu memcached-1.5.7]# pip3 install python-memcached
Collecting python-memcached
Downloading https://files.pythonhosted.org/packages/f5/90/19d3908048f70c120ec66a39e61b92c253e834e6e895cd104ce5e46cbe53/python_memcached-1.59-py2.py3-none-any.whl
Collecting six>=1.4.0 (from python-memcached)
Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Installing collected packages: six, python-memcached
使用python-memcached库连接memcached
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import memcache
mc = memcache.Client(['127.0.0.1:12000'], debug=True)
mc.set("foo", "bar")
ret = mc.get('foo')
print(ret)
#输出
#结果:
bar
上面例子我们通过调用memcache模块来实现对memcached进行存取数据,debug=True表示运行中出现错误时,显示错误信息,上线后移除该参数。
- add:
添加一条键值对,如果已经存在的key,重复执行add操作会报异常。
ret = mc.add('name','shan')
print(ret)
#输出
[root@shanwu python]# python3 me.py
True
- replace:
replace修改某个key的值,如果key不存在,则异常。
mc.replace('foo','999')
ret=mc.get('foo')
print(ret)
#输出
[root@shanwu python]# python3 me.py
999
- set和set_multi:
set :设置一个键值对,如果key不存在,则创建,如果key存在,则修改;
set_multi:设置多个键值对,如果key不存在,则创建,如果key存在,则修改。
mc.set('key0','jack')
mc.set_multi({'key1':'val1','key2':'val2'})
ret=mc.get('key0')
ret1=mc.get('key1')
ret2=mc.get('key2')
print(ret)
print(ret1)
print(ret2)
#输出
[root@shanwu python]# python3 me.py
jack
val1
val2
- delete和delete_multi:
delete:在Memcached中删除指定的一个键值对;
delete_multi:在Memcached中删除指定的多个键值对。
mc.delete('key0')
mc.delete_multi(['key1','key2'])
print(ret)
print(ret1)
print(ret2)
#输出
[root@shanwu python]# python3 me.py
Traceback (most recent call last):
File "me.py", line 14, in <module>
print(ret)
NameError: name 'ret' is not defined
get和get_multi:
get : 获取一个键值对;
get_multi:获取多个键值对。
前面的例子里用到append和prepend:
append:修改指定key的值,在该值后面追加内容;
prepend:修改指定key的值,在该值前面插入内容。
mc.set('k0','jack')
mc.set_multi({'k1':'val1','k2':'val2'})
mc.append('k1','after')
val1 = mc.get('k1')
print(val1)
mc.prepend('k1','brefore')
val2 = mc.get('k1')
print(val2)
#输出
val1after
breforeval1after
- decr和incr:
incr:自增,将Memcached中的某一个值增加N(N默认为1);
decr:自减,将Memcached中的某一个值减少N(N默认为1)。
mc.set('k1','777')
#mc.incr('k1') #778,默认自增1
mc.incr('k1',10)
val1 = mc.get('k1')
print(val1)
mc.decr('k1',20)
val2 = mc.get('k1')
print(val2)
#输出
[root@shanwu python]# python3 me.py
787
767