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优秀的过期策略和内存淘汰机制
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值