memcache(2)
1 # Memcache常用命令 2 # 存储命令: set/add/replace/append/prepend/cas 3 # 获取命令: get/gets 4 # 其他命令: delete/stats.. 5 # 6 # add方法 7 # 添加一条键值对,如果已经存在的key,重复执行add操作会报异常。 8 import memcache 9 mc = memcache.Client(['192.168.48.128:11211'], debug=True) 10 mc.add('k1','v1') 11 mc.add('k1','v1') 12 13 # 14 # replace方法 15 # replace修改某个key的值,如果key不存在,则异常。 16 17 mc.add('k1','v1') 18 mc.replace("k1", "666") 19 print(mc.get("k1")) 20 21 # set和set_multi方法 22 # set :设置一个键值对,如果key不存在,则创建,如果key存在,则修改; 23 # set_multi:设置多个键值对,如果key不存在,则创建,如果key存在,则修改。 24 25 mc.set("k10", "v10") 26 mc.set_multi({"k11": "v11", "k12": "v12"}) 27 28 # set方法和add方法的区别 29 # set = add + replace 30 # 1、memcache::add 方法:add方法用于向memcache服务器添加一个要缓存的数据。 31 # 32 # 注意:如果memcache服务器中已经存在要存储的key,此时add方法调用失败。 33 # 34 # 2、memcache::set 方法:set方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体。 35 # 36 # 注意: 37 # 38 # 1)、如果要设置的key不存在时,则set方法与add方法的效果一致; 39 # 40 # 2)、如果要设置的key已经存在时,则set方法与replace方法效果一样。 41 # 42 # 3、 mmecache::replace方法: replace方法用于替换一个指定key的缓存内容,如果key不存在则返回false 43 # 44 # 45 # delete和delete_multi方法 46 # delete:在Memcached中删除指定的一个键值对; 47 # delete_multi:在Memcached中删除指定的多个键值对。 48 c.delete("k10") 49 mc.delete_multi(["k11", "k12"]) 50 51 # get和get_multi方法 52 # get : 获取一个键值对; 53 # get_multi:获取多个键值对。 54 55 mc.set("k10", "v10") 56 mc.set_multi({"k11": "v11", "k12": "v12"}) 57 58 val = mc.get('k1') 59 print(val) 60 61 item_dict = mc.get_multi(['k11', 'k12']) 62 print(item_dict) 63 64 # append和prepend方法 65 # append:修改指定key的值,在该值后面追加内容; 66 # prepend:修改指定key的值,在该值前面插入内容。 67 68 mc.append('k1','after') 69 val1 = mc.get('k1') 70 print(val1) 71 72 mc.prepend('k1','brefore') 73 val2 = mc.get('k1') 74 print(val2) 75 76 77 # 78 # incr:自增,将Memcached中的某一个值增加N(N默认为1); 79 # decr:自减,将Memcached中的某一个值减少N(N默认为1)。 80 81 82 mc.incr('k1',10) 83 val1 = mc.get('k1') 84 print(val1) 85 86 mc.decr('k1',20) 87 val2 = mc.get('k1') 88 print(val2) 89 90 # gets和cas: 91 # 如商城商品剩余个数,假设改值保存在memcache中,product_count =9000 92 # A用户刷新页面从memcache中读取到product_count = 900 93 # B用户刷新页面从memcache中读取到product_count = 900 94 # 如果A、B用户均购买商品: 95 # A用户修改商品剩余个数 product_count = 899 96 # B用户修改商品剩余个数product_count = 899 97 # 如此一来缓存内的数据便不再正确,两个用户购买商品后,商品剩余还是899,如果使用python的set和get来操作以上过程,那么程序就会如上述所示情况,数据不准确。 98 # 如果想要避免此情况的发生,只要使用gets和cas即可,如: 99 v = mc.gets('product_count') 100 print(v) 101 #如果有人在gets之后和cas之前修改了product_count,那么下面的设置将会执行失败,抛出异常,从而避免非正常数据的产出 102 v1 = mc.cas('product_count',"899") 103 print(v1)