码迷,mamicode.com
首页 > 编程语言 > 详细

python第十一天-----补:缓存操作

时间:2016-09-27 13:18:58      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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 python
2 import memcache
3 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

 

python第十一天-----补:缓存操作

标签:

原文地址:http://www.cnblogs.com/bfmq/p/5912225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!