1.为什么Redis采用单线程模型会达到每秒万级别的处理能力?
1. 纯内存访问,内存响应时间为100纳秒。(1毫秒=1000微妙、1微妙=1000纳秒)
2. 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,不在网络I/O上浪费过多的时间。
3. 单线程避免了线程切换和竞态产生的消耗。
另外,单线程对于每个命令执行时间是有要求的,如果某个命令执行时间过长,会造成其他命令的阻塞,这对于Redis这种高性能服务是致命的,
所以Redis是面向快速执行场景的数据库。
2.Redis的缓存命中率是什么?如何提高Redis的缓存命中率?
1. 缓存命中率 是什么?
keyspace_hits:成功从缓存中查询到key则为命中;
keyspace_misses:不能从缓存中查询到key则为未命中;
命中率即为keyspace_hits/(keyspace_hits+keyspace_misses)的值。
2.如何提高Redis的缓存命中率?
- 将高频读取且时效性不高的的数据缓存到Redis,读取次数越多,命中率越高;
- 设置合适的key过期策略,在相同Key和相同请求的情况下,缓存时间越长,命中率越高;
- 设置合适的缓存更新策略,更新数据缓存值比数据清理后再插入新的值命中率更高;
- 设置合适的缓存粒度大小,粒度越小,命中率会越高,同时也能降低bigkey的风险,但也会增加系统复杂度;