python对redis基本操作
(1)连接redis
# 方式1 import redis r = redis.Redis(host='127.0.0.1', port=6379) r.set('foo', 'Bar') print(r.get('foo')) # 方式2 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) r.set('bar', 'Foo') print(r.get('bar'))
通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接,一般情况下, 这是没问题的, 但当并发量比较高的时候, 频繁的连接创建和释放对性能会有较高的影响。
于是, 连接池就发挥作用了。连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作。这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能。
(2)数据类型操作
import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0, decode_responses=True) r = redis.Redis(connection_pool=pool) # (1)字符串操作:不允许对已经存在的键设置值 ret = r.setnx("name", "yuan") print(ret) # False # (2)字符串操作:设置键有效期 r.setex("good_1001", 10, "2") # (3)字符串操作:自增自减 r.set("age", 20) r.incrby("age", 2) print(r.get("age")) # b'22' # (4)hash操作:设置hash r.hset("info", "name", "rain") print(r.hget("info", "name")) # b'rain' r.hmset("info", {"gedner": "male", "age": 22}) print(r.hgetall("info")) # {b'name': b'rain', b'gender': b'male', b'age': b'22'} # (5)list操作:设置list r.rpush("scores", "100", "90", "80") r.rpush("scores", "70") r.lpush("scores", "120") print(r.lrange("scores", 0, -1)) # ['120', '100', '90', '80', '70'] r.linsert("scores", "AFTER", "100", 95) print(r.lrange("scores", 0, -1)) # ['120', '100', '95', '90', '80', '70'] print(r.lpop("scores")) # 120 print(r.rpop("scores")) # 70 print(r.lindex("scores", 1)) # '95' # (6)集合操作 # key对应的集合中添加元素 r.sadd("name_set", "zhangsan", "lisi", "wangwu") # 获取key对应的集合的所有成员 print(r.smembers("name_set")) # {'lisi', 'zhangsan', 'wangwu'} # 从key对应的集合中随机获取 numbers 个元素 print(r.srandmember("name_set", 2)) r.srem("name_set", "lisi") print(r.smembers("name_set")) # {'wangwu', 'zhangsan'} # (7)有序集合操作 # 在key对应的有序集合中添加元素 r.zadd("jifenbang", {"yuan": 78, "rain": 20, "alvin": 89, "eric": 45}) # 按照索引范围获取key对应的有序集合的元素 # zrange( name, start, end, desc=False, withscores=False, score_cast_func=float) print(r.zrange("jifenbang", 0, -1)) # ['rain', 'eric', 'yuan', 'alvin'] print(r.zrange("jifenbang", 0, -1, withscores=True)) # ['rain', 'eric', 'yuan', 'alvin'] print(r.zrevrange("jifenbang", 0, -1, withscores=True)) # ['rain', 'eric', 'yuan', 'alvin'] print(r.zrangebyscore("jifenbang", 0, 100)) print(r.zrangebyscore("jifenbang", 0, 100, start=0, num=1)) # 删除key对应的有序集合中值是values的成员 print(r.zrem("jifenbang", "yuan")) # 删除成功返回1 print(r.zrange("jifenbang", 0, -1)) # ['rain', 'eric', 'alvin'] # (8)键操作 r.delete("scores") print(r.exists("scores")) print(r.keys("*")) r.expire("name",10)