irpas技术客

【redis】使用python操作redis_冰冷的希望_python redis

未知 1833

1.安装 pip install redis 2.连接

连接实例分为StrictRedis和Redis,StrictRedis的命令基本上与官方命令一致,Redis是StrictRedis的子类,使用命令兼顾版本即兼容性较好

from redis import Redis, ConnectionPool redis_cli = Redis(host="localhost", port=6379, username="", password="", db=0, decode_responses=True) redis_cli.set("name", "icy", 10) print(redis_cli.get("name")) # 也可以redis_cli["name"],但key不存在会报错 redis_cli.close()

上面的方法会单独管理自己的连接池,但是如果每次使用redis都连接释放,会造成性能瓶颈,所以我们可以使用连接池,让它自己管理释放问题

pool = ConnectionPool(host='127.0.0.1', port=6379, password='', decode_responses=True) redis_cli = Redis(connection_pool=pool) redis_cli.set("name", "icy") print(redis_cli.get("name"))

ConnectionPool作用是,它会检查列表_available_connections是否有可用的连接,如果有就用,没有就创建一个连接,用完之后会调用release()把它丢进列表_in_use_connections等待下次调用

3.Key redis_cli.keys() # 返回所有key(列表),pattern参数可以模糊搜索 redis_cli.delete("name", "age", "count") # 删除一个或多个key redis_cli.exists("name") # 查看key是否存在 redis_cli.expire("name", 5) # 设置5秒后过期 redis_cli.rename("name", "name1") # 重命名key,key不存在则报错 redis_cli.renamenx("name", "name1") # 重命名key,key不存在则报错,如果"name1"不存在才成功 redis_cli.randomkey() # 随机取出一个key redis_cli.type("name") # 查看key类型,如果不存在返回none(字符串) 4.String redis_cli.set("name", "icy")

set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False, get=False, exat=None, pxat=None) ex,过期时间(秒), 类似于setex(name, time, value) px,过期时间(毫秒),类似于psetex(name, time_ms, value) nx,为True时,当name不存在时才设置,类似于setnx(name, value) xx,为True时,当name存在才设置

redis_cli.set("name", "icy") redis_cli.setex("name", 10, "icy") # 10秒后过期 redis_cli.psetex("name", 500, "icy") # 500毫秒后过期 redis_cli.setnx("name", "icy") # 如果key不存在就设置成功 redis_cli.append("name", "_good") # 在key后面追加字符串,不存在则创建 redis_cli.get("name1") # 取单个值,取不到返回None redis_cli.mset({"name": "pan", "age": 18}) # 设置多个值,传入字典 redis_cli.mget("name", "age") # 返回一个列表 redis_cli.mget(("name", "age")) # 返回一个列表,参数也可以是一个可迭代对象 redis_cli.getset("name", "pan") # 设置name为pan,并且返回之前的值 redis_cli.setrange("name", 2, "abcdefg") # 从原字符串的第2个位置开始替换,原来是icy,替换后是icabcdefg redis_cli.getrange("name", 1, 3) # 取子串第1个位置到第3个位置,原来是abcdefg,取出来是cab(左闭右闭) redis_cli.strlen("name") # 返回长度,不存在返回0 redis_cli.incr("count", amount=10) # 不存在则以10为初始值,若存在则自增10,不指定amount默认为1 redis_cli.decr("count", amount=11) # 不存在则以11为初始值,若存在则自减10,不指定amount默认为1 redis_cli.delete("name1") # 删除 5.Hash

hset(name,key,value,mapping,items) name,即key key,即field, value,即value mapping,字典,即插入多个key:value items,列表套字典

redis_cli.hset("student", "name", "icy") # 设置某个key的field和value,返回受影响行数 redis_cli.hset("student", mapping={"name": "icy", "age": 18, "gender": 1}) # 设置多个k/v,在redis4.0之前不可用 redis_cli.hset("student", items=["name", "icy", "age", 18, "gender", 1]) # 设置多个k/v,在redis4.0之前不可用 redis_cli.hmset("student", {"name": "icy", "age": 18, "gender": 1}) # 设置多个k/v,在redis4.0版本之后废弃 redis_cli.hget("student", "name") # 取出key里的某个filed redis_cli.hmget("student", ["name", "age"]) # 取出key里的多个filed,返回列表 redis_cli.hgetall("student") # 返回key里所有k/v(返回一个字典) redis_cli.hkeys("student") # 取出所有key(返回列表) redis_cli.hvals("student") # 取出所有value(返回列表) redis_cli.hexists("student", "height") # 查看key里是否存在某个field redis_cli.hincrby("student", "age", amount=2) # 自增,若不存在则以amount为初始值,amount可以是负数 # 多次取值,避免撑爆内存,match过滤,count每次最大取出key的个数,当返回的cursor为0说明已取完 cursor1, data1 = redis_cli.hscan('student', cursor=0, match=None, count=None) cursor2, data2 = redis_cli.hscan('student', cursor=cursor1, match=None, count=None) redis_cli.hscan_iter("student", match=None, count=None) # 取出所有key,但返回的是一个生成器 6.List redis_cli.lpush("names", "pan", "chen", "liu") # 从左边插入,即得到'liu'、'chen'、'pan',key不存在则创建 redis_cli.lpushx("names", "pan", "chen", "liu") # 同上,但key不存在不会创建 redis_cli.rpush("names", "a", "b", 3) # 从右边插入 redis_cli.lrange("names", 0, -1) # 取出names的所有元素(左闭右闭),返回列表 redis_cli.llen("names") # 返回元素个数 redis_cli.lindex("names", 1) # 根据下标取值 redis_cli.rpush("names", "a", "b", "c", "d", "e") redis_cli.linsert("names", "before", "c", "c0") # 在c之前插入c0,也可以是after redis_cli.lset("names", 2, "c00") # 修改第2个元素为c00 redis_cli.lrem("names", count=2, value="c00") # count为删除的个数,正数是从从前往后,负数是从后往前,0则删除所有 redis_cli.lpop("names") # 删除并返回左边1个 redis_cli.rpop("names") # 删除并返回右边1个 redis_cli.ltrim("names", 2, 3) # 保留下标2到3之间的元素,两边的被删除 redis_cli.rpoplpush("names", "names2") # 取出names的最右边的元素插入到names2的最左边 7.Set redis_cli.sadd("names", "pan", "liu", "han", "song") # 新增元素,返回新增个数,此处是3 redis_cli.sadd("names2", "pan", "liu", "li", "yuan") # 新增元素,返回新增个数,此处是3 # 交集 redis_cli.sinter("names", "names2") # 返回names和names2的交集,返回一个set redis_cli.sinterstore("names3", "names", "names2") # 把names和names2的交集存储到names3,返回一个已存储个数 # 并集 redis_cli.sunion("names", "names2") # 返回names和names2的并集,返回一个set redis_cli.sunionstore("names3", "names", "names2") # 把names和names2的并集存储到names3,返回一个已存储个数 # 差集 redis_cli.sdiff("names", "names2") # 返回在names且不在names2的元素,返回一个set redis_cli.sdiff("names2", "names") # 返回在names2且不在names的元素,返回一个set redis_cli.sdiffstore("names3", "names", "names2") # 把在names且不在names2中的元素存储到names3,返回已存储个数 redis_cli.scard("names") # 获取元素个数 redis_cli.sismember("names", "pan") # 查询某个元素是否存在 redis_cli.smembers("names") # 返回所有元素,返回一个set redis_cli.scan_iter("names") # 返回所有元素,返回一个生成器 redis_cli.spop("names") # 随机删除并返回一个元素 redis_cli.srem("names2", "li") # 删除指定元素li,返回已删除个数 8.Zset redis_cli.zadd("names", {"pan": 111, "liu": 2, "yun": 99}) # 新增元素,字典的key、value分别对应zset的value、score redis_cli.zrange("names", 1, 3, desc=False, withscores=False) # 取出下标从1到3的元素正序排序,不需要分数 redis_cli.zscan("names") # 取出所有元素,返回列表 redis_cli.zscan_iter("names") # 取出所有元素返回一个生成器 redis_cli.zcount("names", 50, 100) # 返回分数在50到100之间的元素个数 redis_cli.zrank("names", "liu") # 返回元素liu的下标(从小到大排序) redis_cli.zscore("names", "pan") # 返回元素pan对应的分数 redis_cli.zincrby("names", 2.0, "pan") # 将pan的分数自增2 redis_cli.zrem("names", "liu") # 删除单个元素 redis_cli.zremrangebyrank("names", 1, 3) # 删除下标在1到3之间的元素 redis_cli.zremrangebyscore("names", 50, 100) # 删除分数在50到100之间的元素


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Python #redis #1安装pip #install #import