博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python第十一天-----补:缓存操作
阅读量:6368 次
发布时间:2019-06-23

本文共 2522 字,大约阅读时间需要 8 分钟。

memcached,首先下载python-memcached模块,在cmd中执行pip install python-memcached即可

memcached比较简单,默认情况仅支持简单的kv存储,并且缓存写于内存当中,具体不做介绍了

服务器开启服务后,简单操作下

1 #!/usr/bin/env python 2 import memcache 3  4  5 mc = memcache.Client(['172.16.5.7:11211'], debug=True) 6 mc.add('k1', 'v1')                          #添加一条新kv 7 mc.add('k1', 'v2')                          #key存在则报错 8 ret = mc.get('k1') 9 print(ret)10 11 mc.replace('k1', '999')                     #替换原有的key的value,如果key不存在则报错12 ret = mc.get('k1')13 print(ret)14 15 mc.set('test', 'test')                      #设置一个kv对16 mc.set_multi({
'test': 'test', 'xxx': 'ooo'}) #设置多个kv对17 18 # mc.delete('test') #删除一个kv对19 # mc.delete_multi(['test', 'xxx']) #删除多个kv对20 21 val = mc.get('test') #获取一个kv对22 dic_val = mc.get_multi(['test', 'xxx']) #获取多个kv对23 24 mc.append('k1', 'after') #修改指定key的值,在该值后面追加内容25 mc.prepend('k1', 'before') #修改指定key的值,在该值前面插入内容26 ret = mc.get('k1')27 print(ret)

防止脏数据时使用cas,gets

1 #!/usr/bin/env python2 import memcache3 mc = memcache.Client(['172.16.5.7:11211'], debug=True, cache_cas=True)4 v = mc.gets('product_count')5 mc.cas('product_count', "899")

本质上每次执行gets时,会从memcache中获取一个自增的数字,通过cas去修改gets的值时,会携带之前获取的自增值和memcache中的自增值进行比较,如果相等,则可以提交,如果不想等,那表示在gets和cas执行之间,又有其他人执行了gets(获取了缓冲的指定值), 如此一来有可能出现非正常数据,则不允许修改

 

redis,首先下载python-redis模块,在cmd中执行pip install python-redis即可

redis支持string、list、set、zset、hash,支持缓存持久化

http://www.cnblogs.com/wupeiqi/articles/5132791.html

1 #!/usr/bin/env python 2 import redis 3  4 # r = redis.Redis(host='172.16.5.7', port=6379) 5 # r.set('foo', 'Bar') 6 # print(r.get('foo').decode()) 7  8 pool = redis.ConnectionPool(host='172.16.5.7', port=6379) 9 #建立一个连接池,可以省去每次创建,释放连接时的开销10 r = redis.Redis(connection_pool=pool)11 # r.set(name, value, ex=None, px=None, nx=False, xx=False))12 # ex,过期时间(秒)13 # px,过期时间(毫秒)14 # nx,如果设置为True,则只有name不存在时,当前set操作才执行15 #xx,如果设置为True,则只有name存在时,当前set操作才执行16 r.set('foo', 'Bar')17 print(r.get('foo').decode())18 19 r.mset(k1='v1', k2='v2')            #一次设置多个kv,也可以写成r.mset({'k1': 'v1', 'k2': 'v2'})20 print(r.mget('k1', 'k2'))           #一次获取多个kv,也可以写成r.mget(['k1', 'k2'])21 22 r.getset('k1', 'new')               #获取原值并替换成新的23 24 r.getrange('k1', 1, 3)              #获取子序列(根据字节获取,非字符)25 r.setrange('k1', 1, 'new')          #修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)26 27 r.append('k1', 'value')             #在redis name对应的值后面追加内容

set,hash,zset都差不多,就是参赛前面加s,z,h

 

转载于:https://www.cnblogs.com/bfmq/p/5912225.html

你可能感兴趣的文章
[转]Ubuntu安装Python3.6
查看>>
20172313 2017-2018-2 《程序设计与数据结构》第七周学习总结
查看>>
jquery中trigger引发自定义方法
查看>>
Delphi中有关窗口绘制
查看>>
LinkedList实现队列和堆栈的代码
查看>>
微信群红包
查看>>
雨燕框架一次服务调用过程
查看>>
使用POI操作EXCEl
查看>>
面试自我介绍
查看>>
TC++PL's Advices(1)
查看>>
Java核心技术 卷1 基础知识-第一天
查看>>
iOS开发-进程与线程概念以及iOS的三种多线程技术
查看>>
Java中的HashMap 浅析
查看>>
2016-11-30
查看>>
app store 增量更新
查看>>
词霸英语积累
查看>>
位运算符——管理事务的开关状态
查看>>
Java日志组件1---Jdk自带Logger(java.util.logging.Logger)
查看>>
php 与 ajax 获取123的案例
查看>>
PHP2014.5.14的总结:
查看>>