Redis常见问题(未完待续)
Redis常见问题
- Redis为什么快 ?
Redis为什么快 ?
根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数);
-
基于内存
对于磁盘数据库来说,首先要将数据通过 IO 操作读取到内存里再读取;
而Redis读写都是在内存上完成的; -
单线程
Redis 的单线程指的是 Redis 的 网络 IO 以及键值对指令读写是由一个线程来执行的,保证了每个操作的原子性,避免了多线程时上线文切换;
对于 Redis 的持久化、主从同步、异步删除等都是其他线程执行。
多线程:
当多线程并行修改共享数据的时候,会有数据安全,需要加锁机制就会带来额外的性能开销; -
五种数据结构:
根据不同数据类型使用不同的数据结构,速度才得以提升;
String:缓存、计数器、分布式锁等。
List:链表、队列、微博关注人时间轴列表等。
Hash:用户信息、Hash 表等。
Set:去重、赞、踩、共同好友等。
Zset:访问量排行榜、点击量排行榜等。 -
Redis是键值型数据库,整个就是一个哈希表,哈希表本身复杂度就是O(1),只需要计算哈希值就可以定位到key;
当写入 Redis 的数据越来越多的时候,哈希冲突不可避免,会出现不同的 key 计算出一样的哈希值。
Redis 通过链式地址法解决冲突:也就是同一个 桶里面的元素使用链表保存。但是当链表过长就会导致查找性能变差可能,所以 Redis 为了追求快,使用了两个全局哈希表。用于rehash
操作,增加现有的哈希桶数量,减少哈希冲突。 -
IO多路复用;
参考:
https://www.sohu.com/a/458584271_411876