为什么禁用o(n)复杂度的方法
1 redis是单线程的,其所有操作都是原子的,不会因并发产生数据异常,一个线程操作必须等待上一个线程操作完;
2 使用高耗时的Redis命令是很危险的,会占用唯一的一个线程的大量处理时间,导致所有的请求都被拖慢。(例如时间复杂度为O(N)的KEYS命令,严格禁止在生产环境中使用)
这样的命令,导致redis锁住,导致CPU飙升,引起所有请求锁住,等待超时后,所有的请求流量全部挤压到了数据库中,使数据库产生了雪崩效应,发生了数据库宕机事件。
o(n)复杂度的方法都有哪些
1 list LINDEX、LSET、LINSERT 这三个命令谨慎使用
2 Hash HGETALL、HKEYS/HVALS 谨慎使用
3 Set类型 SMEMBERS、SUNION/SUNIONSTORE、SINTER/SINTERSTORE、SDIFF/SDIFFSTORE
4 Sorted Set类型 ZRANGE/ZREVRANGE、ZRANGEBYSCORE/ZREVRANGEBYSCORE、ZREMRANGEBYRANK/ZREMRANGEBYSCORE
5 DEL、KEYS