Redis基础知识
Posted EileenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis基础知识相关的知识,希望对你有一定的参考价值。
1 为什么需要缓存
首先阐明一个事实:硬盘的寻址时间为ms级,带宽为M级别;内存寻址时间ns级别,带宽G级别。由此可知,内存性能优于硬盘。磁盘有很多磁道,每个磁道又有很多扇区,每个扇区512Byte,如果每次读取的数据越少,索引成本就越大,所以操作系统每次读取数据都是以4k为单位。由于硬盘I/O瓶颈的问题,随着文件变大,查找速度会变慢。
同理,数据库也是以页为单位存放数据,通常每页4k,随着表变大,增删改的速率会变慢,因为要维护索引。如果是少量查询,速率不受影响,如果是大量的并发查询,受限于硬盘带宽,速率变慢。
硬盘太慢了?把所有的数据放在内存中不就好了。SAP的HANA就是基于内存的关系型数据库,速度飞快,但是贵的一批,一般人买不起。所以有了折中方案:缓存。将一些热点数据放在内存中,每次查询数据时,优先从缓存中查找,缓存中没有,再去数据库查找,这样既能提高热点数据的查询速度,又能减轻数据库的压力。
2 为什么选择Redis
目前世面上有很多基于缓存的数据库,比如Memcache和Redis。但为什么选择Redis呢?原因在于Redis支持多种数据类型,这是它和Memcache的本质区别。虽然Memcache也可以通过Json等格式的数据来实现多种数据类型,但是需要客户端进行解析,而Redis已经帮我们实现了这一点,即计算向数据移动。
3 Redis为什么快
据Redis官方描述,其每秒钟可以处理15万次的操作。其之所以这么快,主要有以下几点原因:
- 完全基于内存:Redis完全基于内存,大部分都是简单的存取操作,大量的时间花费在IO上。Redis绝大部分操作时间复杂度为O(1),所以速度快。
- 非阻塞IO、多路IO复用模型:Redis采用多路IO复用模型,在内部采用epoll代理。多路是指多个网络连接,IO复用是指复用同一个线程。epoll会同时监察多个流的IO事件,在空闲时,当前线程进入阻塞,如果有IO事件时,线程会被唤醒,并且epoll会通知线程是哪个流发生了IO事件,然后按照顺序处理,减少了网络IO的时间消耗,避免了大量的无用操作。
- 单线程:对于单线程来讲,不存在上下文切换问题,也不用考虑锁的问题,不存在加锁释放锁的操作,没有因为可能出现死锁而导致的性能消耗。虽然单线程无法发挥出多个CPU的性能,但是可以在单机开启多个Redis实例解决这个问题。reids的单线程是指处理网络请求只有一个线程。
- Redis优秀的过期策略和内存淘汰机制。
以上是关于Redis基础知识的主要内容,如果未能解决你的问题,请参考以下文章