首页 > 其他分享 >Flask学习笔记(十七)-Memcached的基本使用

Flask学习笔记(十七)-Memcached的基本使用

时间:2022-10-31 17:56:48浏览次数:38  
标签:__ mc Flask app 笔记 键值 key time Memcached

一、Flask中使用Memcached

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。

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

标签:__,mc,Flask,app,笔记,键值,key,time,Memcached
From: https://www.cnblogs.com/xfbk/p/16844853.html

相关文章

  • 笔记2:HTML介绍
    开始学习HTML块级元素和内联元素在HTML中有两个需要知道的元素类别,块级元素和内联元素.块级元素在页面中以块的形式展现----相对于前面的内容它会出现在新的一行,其后......
  • 代码大全2 阅读笔记02
    第三章:三思而后行:前期准备1、核对表(细节可参考文中描述的原则核对)①是否辨明了自己所从事的软件的类型,并对所用的开发方法做出相应的剪裁?(许多项目是高度迭代的,某些则应该......
  • spring学习笔记
    2022-10-31java历程:“Java之父”JamesoslinSUN公司Oak(橡树)机顶盒一个小型万维网浏览器WebRunner(后来改名为Hot-2)1997日,JavaOne会议召开,参与者逾万人,创......
  • Task Similarity Aware Meta Learning for Cold-Start Recommendation阅读笔记
    动机本文是2022年CIKM上的一篇论文。目前解决物品冷启动的方法通常有两种:1.通过物品的特征补充信息。2.元学习。前者通常只考虑到利用物品的属性,而后者旨在为所有新物品生......
  • 【Kubernetes】K8s笔记(十四):PersistentVolume 使用网络共享存储(NFS)
    目录0.安装NFS服务器及客户端1.在Kubernetes中使用NFS存储卷2.动态存储卷Provisioner3.使用NFS动态存储卷要想让存储卷真正能被Pod任意挂载,我们需要变更存......
  • 国赛 2020C 做题笔记
    第一问:多种数据,首先先设置几个评价指标,然后使用主成分分析/熵权法+topsis求出指标值变异系数:单位不同/平均值不同时,不能直接比较方差,使用变异系数\(C.V.=S/X\)(标准差......
  • ssrfme(flask代码审计)
    源码#!/usr/bin/envpython##encoding=utf-8fromflaskimportFlaskfromflaskimportrequestimportsocketimporthashlibimporturllibimportsysimportos......
  • 狂神说javaweb笔记
    1、基本概念1.1前言静态web:提供给所有人看到的数据不会发生变化HTML,CSS动态web:有数据交互,登录账号密码等,网站访问人数等技术栈:severlet、jsp,asp,php在java中,动......
  • 深入理解css 笔记(7)
      前面讲了几种控制网页布局的方式,flex,gird和float。这下我们初略讲下position.这个我日常中用到的已经挺多了。定位和其他控制文档流的行为不同。它将元素彻底从文......
  • 狂神说mybatis笔记
    1、简介1.1什么是mybatisMyBatis是一款优秀的持久层框架它支持自定义SQL、存储过程以及高级映射MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工......