python-memcached安装和使用
Memcached:是一个免费开源的、高性能的、具有分布式内存对象的缓存系统,它通过减轻数据库负载加速动态Web应用
它和redis同样都像一个巨大的内存条,从内存条里面读取数据肯定比从硬盘里面读取数据库要快得多
安装
1.下载:
32bit:下载 memcached-win32-1.4.4-14.zip
64bit:如果需要win64版,下载 memcached-win64-1.4.4-14.zip
2.下载好之后,运行命令提示符(以管理员身份运行)
3.切到memcached目录下,执行安装memcached命令:
memcached memcached.exe -d install
4.再执行启动命令:
memcached.exe -d start
memcached -help是查看命令说明
memcached基本操作
连接:
import memcache
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
此后操作memcache需要用mc对象来点命令
1.set,get:存,取
mc.set('name','max',120) # 缓存只保存120秒
print(mc.get('name'))
# max
2.set_multi:一次性设置多个值,参数必须是一个字典。
get_multi:一次性拿多个值,参数必须是一个列表套存储值的键,这些键可以是通过set存入,也可以通过set_multi存入
mc.set('username','max',120)
# print(mc.get('name'))
mc.set_multi({'name':'jerry','age':19})
print(mc.get_multi(['name','age','username']))
3.delete:删除元素
delete_multi:一次性删除多个,参数是一个列表
4.incr:自增1;decr:自减1。参数都是数据对应的键
mc.set('age',18)
print(mc.get('age'))
mc.incr('age')
print(mc.get('age'))
mc.decr('age')
print(mc.get('age'))
5.add、replace、set都可以用来存数据,存储的参数都为('键','值','期限');
add:仅当存储空间中不存在键相同的数据时才保存
replace:仅当存储空间中存在键相同的数据时才保存
set:与add和replace不同,无论何时都保存
django中使用memcached
在django中使用memcached,通过cache.set和cache.get来获取缓存。其中cache.set第三个参数为存储时间,时间一过缓存立即失效
首先在settings.py中配置:
settings.py:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
views.py:
from django.core.cache import cache
import time
def index(request):
result = cache.get('book_list2')
if not result:
result = ['2','2','3']
cache.set('book_list2',result,3)
print('走了数据库')
print(result)
print(time.time())
return HttpResponse('hhh')
print('走了缓存')
print(result)
print(time.time())
return HttpResponse('hhh')
连接多个memcached
mc = memcache.Client(['127.0.0.1:11211','xxx.xxx.x.xxx:xxxxx'],debug=True)
这样,我们就连接了两个memcached,一个本机的,一个别人的ip地址的。我们还想要连接更多的,就只需要在列表中添加ip地址就行了。
但是,因为我们连接了多个memcached,而我们有没有设置存储算法(就是规定哪些变量往哪个ip地址存),所以我们设置的memcached变量就会随机的存储在我们连接的memcached中,并且只会在一个中存储。
注意:我们要想连接到别人的memcached,那么别人的memcached必须开启了的,而且还必须设置可连接的ip地址,像在局域网下就要设置-l参数为0.0.0.0。防火墙也要关闭