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)

 

posted @ 2017-12-08 09:42  依哈  阅读(135)  评论(0编辑  收藏  举报