Flask学习笔记(十七)-Memcached的基本使用
一、Flask中使用Memcached
1、什么是Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
2、安装步骤
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn python-memcached
安装成功以后,就可以在Flask中使用Memcached了。
windos安装Memcached详见:https://www.cnblogs.com/xfbk/p/16832916.html
二、常用Memcached基本命令。
1、set和set_multi命令的使用
1)set是将键值对(key-val)存储于缓存中的命令。
set命令用于将值val保存到指定的键key中,如果键名key在缓存中没有,则创建该键名并保存键的值,如果键名key已经存在,则用当前值替换先前的值。
命令格式如下:set(key, val, time=0, min_compress_len=0, noreply=False)
参数含义如下表:
参数 | 含义 |
key | 存储的键名 |
val | 存储的值 |
time | 用于设置超时,单位为秒,为0表示永久保存(服务器重启失效) |
min_compress_len | 用于设置zlib压缩 |
noreply | 服务器应答信息,该参数为False,告知服务器不需要应答 |
注意:time=0表示如果服务器不重启,这个键值一直有效,如果服务器重启了,该键值就失效了
2)set_multi是一次设定多个键值对保存在缓存中。
与set命令一样,如果键名key在缓存中没有,则创建该键名并保存键的值,如果键名key已经存在,则用当前值替换先前的值。命令格式如下:
set_multi(mapping, time=0, key_prefix=’’, min_compress_len=0, noreply=False)
参数中有2个新参数:mapping用于设置多个键值对,key_prefix是key的前缀,该值一般为空。
为了方便区分,新建app7-2-1.py文件用于测试,内容如下:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.set('name','zhangsan')
mc.set_multi({'key1':'wangyong','key2':'zhangsan'})
print("设置好了!")
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
在命令行运行该文件,可以看到下列内容:
说明此时已经将3个键值对添加到缓存中了。
2、get和get_multi命令的使用
1)get命令用于获取一个键值对的值,命令格式如下:
get(key)
参数key就是键值对中的键名,类似字典,用于存放或查找缓存值。
2)get_multi命令用于获取多个键值对的值,可以非同步地同时取多个键值,返回的数据对象为字典。其命令格式为:
get_multi(keys, key_prefix=’’)
参数含义与前面内容相同。新建app7-2-2.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.set('username','zhangsan',time=120)
username = mc.get('username')
print(username)
mc.delete('username')
print("已经删除!")
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
结果中可以看到输出了“username”的键值“zhangsan”。
3、add命令的使用
1)add命令为添加一条键值对命令,用于将键值val存储在制定的键名为key的单元中。
如果已经存在key,则重复执行add操作会出现异常。命令格式为:
add(key, val, time=0, min_compress_len=0, noreply=False)
参数含义与前面内容相同。新建app7-2-3.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.set('username','zhangsan',time=120)
username = mc.get('username')
print(username)
mc.add('username','lisi',time=120)
print(username)
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
从结果可以看出,当已经存在key=username时,对其重复添加值为“lisi”,结果会报错(NOT_STORED表示在保存失败后输出)。
4、replace命令的使用
1)replace命令为修改某个键名为key的值,如果key不存在,则抛出异常。
该命令实际为用当前值去替换先前键名为key的值,内部调用了set()方法。命令格式为:
replace(key, val, time=0, min_compress_len=0, noreply=False)
参数含义与前面内容相同。新建app7-2-4.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.add('key','zhangsan',time=120)
key = mc.get('key')
print(key)
mc.replace('key','lisi',time=120)
key1 = mc.get('key')
print(key1)
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
输出结果为“zhangsan”、“lisi”,表明之前的值被替换了。
5、append和prepend命令的使用
1)append命令用于向已存在key(键)的value(数据值)后面追加数据。
append命令的基本语法格式如下:
append(key, val, time=0, min_compress_len=0, noreply=False)
2)prepend命令用于向已存在key(键)的value(数据值)前面追加数据。
prepend命令的基本语法格式如下:
prepend(key, val, time=0, min_compress_len=0, noreply=False)
参数含义与前面内容相同。新建app7-2-5.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.delete('key')
mc.add('key','zhangsan|',time=120)
key = mc.get('key')
print(key)
mc.append('key','wangwu|',time=120)
key1 = mc.get('key')
print(key1)
mc.prepend('key','lisi|',time=120)
key2 = mc.get('key')
print(key2)
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
两个方法的作用相当于叠加,并不需要覆盖原有数据。
6、delete和delete_multi命令的使用
1)delete是用于删除指定键值对的命令。
delete命令的基本语法格式如下:
delete(key, val, time=0, noreply=False)
2)delete_multi为删除多个键值对的命令,基本格式如下:
delete_multi(keys, time=None, key_prefix=’’, noreply=False)
参数含义与前面内容相同。新建app7-2-6.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.delete('key')
mc.add('key','zhangsan|',time=120)
key = mc.get('key')
print(key)
mc.append('key','wangwu|',time=120)
key1 = mc.get('key')
print(key1)
mc.delete('key')
print(key)
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
第三次输出的结果中,“wangwu”被删除。
7、decr和incr命令的使用
1)decr为自减操作命令,将Memcached中的一个值减少N(N默认为1)。
decr命令的基本语法格式如下:
decr(key, delta=1, noreply=False)
参数说明如下:
参数 | 含义 |
key | 键值对中的键名 |
delta | 每次执行自动减1,默认为1,也可以设定每次减去的数 |
noreply | 服务器应答信息,该参数为False,告知服务器不需要应答 |
2)incr为自增操作命令,将Memcached中的一个值增加N(N默认为1)。
incr命令的基本语法格式如下:
incr (key, delta=1, noreply=False)
参数说明与decr相同。新建app7-2-7.py文件,输入下列内容并运行:
from flask import Flask
import memcache
app = Flask(__name__)
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
mc.add('num',99)
key = mc.get('num')
print(key)
mc.incr('num',1)
key1 = mc.get('num')
print(key1)
mc.decr('num',10)
key2 = mc.get('num')
print(key2)
@app.route('/')
def index():
return "Hello!"
if __name__ == '__main__':
app.run()
程序中先将99加1,再减去10,故最后得到结果90。
有了上面几种方法,我们在设置缓存时就方便多了。
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/16844853.html