Redis 绝大多数读写命令的时间复杂度都在 O(1) 到 O(N) 之间,在官方文档对每命令都有时间复杂度说明,如图所示:
其中 O(1) 表示可以安全使用的,而 O(N) 就应该当心了,N 表示不确定,数据越大查询的速度可能会越慢。因为 Redis 只用一个线程来做数据查询,如果这些指令耗时很长,就会阻塞 Redis,造成大量延时。
要避免 O(N) 命令对 Redis 造成的影响,可以从以下几个方面入手改造:
决定禁止使用 keys 命令;
避免一次查询所有的成员,要使用 scan 命令进行分批的,游标式的遍历;
通过机制严格控制 Hash、Set、Sorted Set 等结构的数据大小;
将排序、并集、交集等操作放在客户端执行,以减少 Redis 服务器运行压力;
删除 (del) 一个大数据的时候,可能会需要很长时间,所以建议用异步删除的方式 unlink,它会启动一个新的线程来删除目标数据,而不阻塞 Redis 的主线程。
Redis相关资料,如图所示:


其中 O(1) 表示可以安全使用的,而 O(N) 就应该当心了,N 表示不确定,数据越大查询的速度可能会越慢。因为 Redis 只用一个线程来做数据查询,如果这些指令耗时很长,就会阻塞 Redis,造成大量延时。
要避免 O(N) 命令对 Redis 造成的影响,可以从以下几个方面入手改造:
决定禁止使用 keys 命令;
避免一次查询所有的成员,要使用 scan 命令进行分批的,游标式的遍历;
通过机制严格控制 Hash、Set、Sorted Set 等结构的数据大小;
将排序、并集、交集等操作放在客户端执行,以减少 Redis 服务器运行压力;
删除 (del) 一个大数据的时候,可能会需要很长时间,所以建议用异步删除的方式 unlink,它会启动一个新的线程来删除目标数据,而不阻塞 Redis 的主线程。
Redis相关资料,如图所示:



