redis keys && scan

redis 模糊匹配key,官方建议不要使用keys或smembers,他们的时间复杂度都是O(N),使用scan,zscan,hscan等。scan系列的时间复杂度都是O(1)
### Redis `KEYS` 和 `SCAN` 命令的使用场景与性能差异 #### 使用场景 对于 `KEYS pattern` 命令而言,该命令会返回数据库中所有匹配给定模式的键名。此方法适用于小型数据集,在开发环境或调试过程中查找特定前缀或后缀的键非常有用[^1]。 相比之下,`SCAN cursor [MATCH pattern] [COUNT count]` 是一种增量迭代器,用于逐步遍历整个键空间而不会阻塞服务器执行其他任务。这使得它更适合生产环境中大规模数据的操作以及那些不允许长时间停顿的应用程序需求[^2]。 #### 性能差异 当调用 `KEYS` 时,Redis 需要一次性描全部内存中的键来寻找符合条件的结果,这意味着随着数据量的增长,响应时间和资源消耗都会显著增加;而在极端情况下甚至可能导致服务暂时不可用。 另一方面,由于采用了游标的机制,每次只处理一部分元素,并且可以在多个请求之间保持状态,因此即使面对海量级的数据集合也能维持较好的性能现。尽管单次查询可能不如前者迅速完成,但从整体上看却更加高效稳定。 ```python import redis r = redis.Redis() # Using KEYS command (not recommended for production use with large datasets) matching_keys_via_keys = r.keys('prefix:*') # Using SCAN command as an iterator over all matching keys safely even on big databases cursor = '0' matching_keys_via_scan = [] while True: cursor, data = r.scan(cursor=cursor, match='prefix:*', count=100) matching_keys_via_scan.extend(data) if cursor == '0': break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值