103、redis-py 实战:缓存、队列、Pub/Sub、分布式锁——不止是缓存

103、redis-py 实战:缓存、队列、Pub/Sub、分布式锁——不止是缓存
103、redis-py 实战:缓存、队列、Pub/Sub、分布式锁——不止是缓存上周五晚上十一点,生产环境突然报警:用户登录接口响应时间从50ms飙升到3秒。我盯着监控面板,CPU没爆,数据库连接池没满,但Redis的INFO stats里keyspace_misses从0.3%跳到了23%。翻代码发现同事在缓存查询逻辑里写了个if cache.get(key) is None,然后直接查数据库——问题是这个key的TTL设了24小时,但缓存穿透时并发请求直接把数据库打挂了。更坑的是,他用的redis-py还是2.x版本,get方法返回的是bytes,和字符串比较永远不相等。这个坑让我决定好好写一篇redis-py实战笔记。别把它当教科书,就当我在你旁边敲代码时随口说的那些话。连接池:别每次都new一个客户端新手最容易犯的错误:每个请求来了都redis.Redis(host='localhost')。这会导致每次请求都新建TCP连接,高并发下直接撑爆文件描述符。importredis# 别这样写——每次请求都创建新连接def