Day 21 21.2 数据库之Python操作redis

发布时间 2023-04-02 20:31:38作者: Chimengmeng

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", "dream")
print(ret)
# (2)字符串操作:设置键有效期
r.setex("good_1001", 10, "2")
# (3)字符串操作:自增自减
r.set("age", 20)
r.incrby("age", 2)
print(r.get("age"))  # b'22'
# 二 : hash操作

r.hset("info", "name", "meng")
print(r.hget("info", "name"))  # b'meng'
r.hset("info", mapping={"gender": "male", "age": 22})
print(r.hgetall("info"))  # {b'name': b'rain', b'gender': b'male', b'age': b'22'}

# 三 : 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'

# 四 : 集合操作
# 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'}

# 五 :有序集合操作
# 在key对应的有序集合中添加元素
r.zadd("jifenbang", {"dream": 78, "meng": 20, "alen": 89, "fox": 45})
# 按照索引范围获取key对应的有序集合的元素
print(r.zrange("jifenbang", 0, -1))  # ['dream', 'meng', 'alen', 'fox']
print(
    r.zrange("jifenbang", 0, -1, withscores=True))  # [('meng', 20.0), ('fox', 45.0), ('dream', 78.0), ('alen', 89.0)]
print(r.zrevrange("jifenbang", 0, -1,
                  withscores=True))  # [('alen', 89.0), ('dream', 78.0), ('fox', 45.0), ('meng', 20.0)]

print(r.zrangebyscore("jifenbang", 0, 100))  # ['meng', 'fox', 'dream', 'alen']
print(r.zrangebyscore("jifenbang", 0, 100, start=0, num=2))  # ['meng', 'fox']
# 删除key对应的有序集合中值是values的成员
print(r.zrem("jifenbang", "dream"))  # 删除成功返回1
print(r.zrange("jifenbang", 0, -1))  # ['meng', 'fox', 'alen']

# 六 :键值对操作
r.delete("scores")
print(r.exists("scores"))
print(r.keys("*"))
r.expire("name", 10)