zoukankan      html  css  js  c++  java
  • python第十一天-----补:缓存操作

    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实现测试中常用的脚本(待完善)
    python使用mysql数据库(虫师)
    jQuery中动画animate(上)
    jQuery事件对象的属性和方法
    扩展欧几里得算法详解
    jQuery事件对象的作用(利用冒泡事件优化)
    卸载事件off()方法
    on()的高级用法
    三种快速排序以及快速排序的优化
    on()的多事件绑定
  • 原文地址:https://www.cnblogs.com/bfmq/p/5912225.html
Copyright © 2011-2022 走看看