zoukankan      html  css  js  c++  java
  • redis和memcached缓存

    memcached

    memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群

    memcached下载地址:

    http://memcached.org/downloads

    python实现memcached缓存

    pip3 install python-memcached

    import memcache
    aa=memcache.Client(["10.0.0.20:11211"],debug=True)
    aa.set("k1","v1")
    print(aa.get("k1"))

    memcached方法使用

    import memcache
    aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True)   #会存到11212中
    aa.set("k1","v1")
    aa.replace("k1","hahaha")
    aa.set('k2', '1')
    aa.incr('k2',100)
    print(aa.get("k2"))
    aa.decr('k2',50)
    print(aa.get("k2"))
    import memcache
    aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True,cache_cas=True)
    print(aa.gets("product_count"))
    #aa.set("product_count","111")
    #在gets和最后的cas之间,如果修改值,就会抛出异常
    aa.cas("product_count","899")

    redis

    redis持久化存储系统,全称remote directory server,是基于key-value的持久化数据库存储系统。redis和memcached很相似,redis的数据类型更丰富:string,list,set,hash,sorted set,redis,支持主从同步,把更新的数据写到磁盘

    下载地址: http://download.redis.io/releases/redis-2.8.9.tar.gz

    python实现redis缓存

    服务器要开启redis,python安装redis模块:pip3 install redis

    基本操作:

    import redis
    aa=redis.Redis(host="10.0.0.20",port=7777)
    aa.set("k1","v1",ex=2)
    print(aa.get("k1"))

    管理连接的连接池:

    import redis
    pool=redis.ConnectionPool(host="10.0.0.20",port=7777)
    aa=redis.Redis(connection_pool=pool)

    redis构造方法:

        def __init__(self, host='localhost', port=6379,
                     db=0, password=None, socket_timeout=None,
                     socket_connect_timeout=None,
                     socket_keepalive=None, socket_keepalive_options=None,
                     connection_pool=None, unix_socket_path=None,
                     encoding='utf-8', encoding_errors='strict',
                     charset=None, errors=None,
                     decode_responses=False, retry_on_timeout=False,
                     ssl=False, ssl_keyfile=None, ssl_certfile=None,
                     ssl_cert_reqs=None, ssl_ca_certs=None,
                     max_connections=None):
    db:数据库号
    password:输入redis设置的密码

    redis数据类型:

    1,string类型

    2,list

    3,hash

    4,set

    5,sorted set

    string

    set(name, value, ex=None, px=None, nx=False, xx=False)

    ex:设置此数据的超时时间

    nx:如果设置为True,只有当name不存在时,set执行

    xx:如果设置为True,只有当name存在时,set执行

    setnx(name, value)

    只有当name不存在时,set执行

    setex(name, value, time)

    设置数据有效期

    mset(*args, **kwargs)

    设置多个数据

    get(name)

    strlen(name)

    获取name的值的字节长度

    incr(name, amount=1)

    整数自增

    incrbyfloat(name, amount=1.0)

    以小数自增

    decr(name, amount=1)

    整数自减

    aa.flushdb()
    aa.set("k1","v1")
    aa.mset({"aa":22,"vv":"22"})
    print(aa.get("k1"))
    print(aa.mget("k1","aa"))     #[b'v1', b'11']
    print(aa.strlen("k1"))
    aa.append("","")
    print(aa.keys()[0].decode())    #
    print(aa.incr("aa"))            #23
    print(aa.decr("aa",amount="10"))            #13
    exit()

    hash

    hset(name, key, value)

    name:redis的key

    key:name下的一个key

    value:key的value

    hmset(name, mapping)

    一次性创建hash

    hget(name, key)

    获取name的key的value

    hkeys(name)

    获取name下的所有的key

    hvals(name)

    取name下的所有value

    hexists(name, key)

    是否存在此hash

    hlen(name)

    查看name下的hash数

    hdel(name, *keys)

    删除name下的hash,可删除多个

     

    aa.flushdb()
    aa.hset("rdi1","k1","v1")
    aa.hset("rdi1","k2","v2")           #rdi1={"k1":"v1","k2":"v2"}
    aa.hmset("rdi2",{"k1":"v1","k2":"v2"})
    aa.hmset("rdi3",{"k1":"v1","k2":"v2"})
    print(aa.hmget("rdi2","k2","k1"))
    print(aa.hkeys("rdi2"))
    print(aa.hvals("rdi2"))
    print(aa.keys())
    print(aa.hdel("rdi2","k1","k2"))
    print(aa.hkeys("rdi2"))

    list

    lpush(name, *values)

    在左边压入一个或多个值

    lpop(name)

    从左边弹出一个值,并从列表中删除

    lset(name, index, value)

    设置已有索引的值,若指定从左边开始的索引无值,则报错

    lrange(name, start, end)

    从左边开始,切片

    lrem(name, value, num=0)

    从左边开始取指定值删除,num指定删除几个,0表示所有删除

    rpoplpush(src, dst)

    从一个列表的最右边取出数放到另一个的最左边

    aa.flushdb()
    aa.lpush("k1",11,22)            #k1=[22,11]
    aa.lpush("k1",33)                #k1.lappend(33)
    aa.rpush("k1",11)               #k1.rappend(33)
    aa.lrem("k1",11,num=1)
    
    print(aa.type("k1"))
    print(aa.llen("k1"))
    aa.lset("k1",2,"hello")
    aa.rpoplpush("k1","k2")
    print(aa.lpop("k2"))
    print(aa.lrange("k1",0,aa.llen("k1")))
    
    print(aa.lpop("k1"))
    print(aa.lpop("k1"))

    Set

    sadd(name, *values)

    添加name下value,可以一次添加多个

    scard(name)

    查看name下有多少元素

    sdiff(keys, *args)

    取keys和*args的差集,keys - *args

    sdiffstore(dest, keys, *args)

    把上面得出的差集存到dest里

    sinter(keys, *args)

    取keys和*args的交集,keys & *args

    sinterstore(dest, keys, *args)

    把上面得出的并集存到dest里

    sunion(keys, *args)

    取keys和*args的并集,keys | *args

    smembers(name)

    打印name下的所有元素

    spop(name)

    从尾部删除一个成员

    smove(src, dst, value)

    移动src下的value值到dst

    aa.flushdb()
    aa.sadd("rdi1","v1","v2","v3")          #rdi1={"v1","v2","v3"}
    aa.sadd("rdi2","v2","v5")               #rdi2={"v2","v5"}
    print(aa.type("rdi1"))
    print(aa.scard("rdi1"))
    print(aa.sdiff("rdi1","rdi2"))   #rdi1 - rdi2
    aa.sdiffstore("rdi3","rdi1","rdi2")      #rdi3 = rdi1 - rdi2
    print(aa.sinter("rdi1","rdi2"))     #rdi1 & rdi2
    aa.sinterstore("rdi3","rdi1","rdi2")
    print(aa.sunion("rdi1","rdi2"))     #rdi1 | rdi2
    print(aa.smembers("rdi1"))          #print(rdi1)

    Other

    keys(self, pattern='*')

    列出所有键

    type(name)

    查看值的类型

    flushdb()

    清空当前db

    flushall()

    清空所有数据

    dbsize()

    查看此db下有多少个name

    move(name, db))

    将redis的某个值移动到指定的db下

    randomkey()

    随机获取一个redis的name(不删除)

    expire(name ,time)

    为某个redis的某个name设置超时时间

    delete(*names)

    根据删除redis中的任意数据类型

  • 相关阅读:
    定时任务框架APScheduler学习详解
    Python list 和 str 互转
    python多个变量赋值
    python数据类型转换
    jquery datetimepicker 配置参数
    c#判断是否为合法的email地址
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    SQL表连接查询(inner join、full join、left join、right join)
    简单的日期转换
    递归
  • 原文地址:https://www.cnblogs.com/euewrqe/p/5901999.html
Copyright © 2011-2022 走看看