Fork me on GitHub

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。

有了上面几种方法,我们在设置缓存时就方便多了。

posted @ 2022-10-31 17:48  橘子偏爱橙子  阅读(147)  评论(0编辑  收藏  举报