咱们一起来谈谈,redis为什么快?

来源:互联网 发布:阿里云域名备案幕布 编辑:程序博客网 时间:2024/06/04 18:34

      在程序媛的生涯中,设置缓存会想起它,控制并发会想到它,做一些压缩存储依旧会想到它,一直停留在知道的起点上,但是没有深入的去挖掘和总结它这么受欢迎的原因。近期天时地利人和,整理了一下它的点点滴滴。

☁  和Memcached一较高低

     记得前几年,项目中比较常用的还是Memcached,存储图像、视频,搭建集群也是样样都行。但是随着redis的发展,redis慢慢的融入到项目中,开始占有一席之地。但是与成熟的Memcached并肩前行,redis虽然是新兴的,但是Memcached依旧有redis不可替代的适用场景:

      第一个场景:存储一些粒度比较小的静态数据,比如一些html片段,Memcached便是我们更好的选择。相对于redis而言,Memcached的元数据metadata更小些,所以相对来讲对于数据存储管理的性能更高,额外开销更小。

     Memcached唯一支持的数据类型是String,所以更适合存储只读数据,因为字符串并不会因为额外的处理造成额外的开销。毕竟Memcached每次更新一个对象时,都需要重复执行下面的操作:获取整个字符串->反序列化为对象->修改其中的值->再次序列化该对象->在缓存中将整个字符串替换为新字符串。这样一来,更新存储数据就会有更高的消耗,可能就不是我们的最佳选择了。      

      第二个场景:比redis更容易水平扩展。具体的扩展方式请参见:点击打开链接

☁  Redis的优势

✎  缓存管理:可以在必要时将无效的旧数据从内存中删除,为新数据腾出新的空间(过期的key的三种清理策略)。

✎  提供更大的灵活性:redis支持多种类型,并且采用key-value 的形式存储,key和value的大小限制都是512Mb,与编码无关,所以数据安全。但是memcached限制key最大为250字节,value为1MB,况且只支持String类型。Redis通过Hash来存储一个对象的字段和值,并且可以通过单个key来管理它们(设置值,设置过期时间),而且我们可以很方便的通过Linux命令或者redis-cli完成对key的管理。

✎  redis提供主从复制:实现高可用的cache系统,支持集群中多个服务器之间的数据同步。

✎  数据持久化:redis可以通过两种方式将数据进行持久化,一定程度上规避缓存中的数据不稳定的问题,也可以在重启服务器时最快的恢复缓存中所需的数据,提高了效率的同事减轻了主数据库系统的开销。

 ☁   Redis为什么会快?

✎  完全基于内存

      Redis是纯内存数据库,相对于读写磁盘,读写内存的速度就不是几倍几十倍了,一般,hash查找可以达到每秒百万次的数量级。

✎  多路复用IO

      “多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)。可以直接理解为:单线程的原子操作,避免上下文切换的时间和性能消耗;加上对内存中数据的处理速度,很自然的提高redis的吞吐量。

      对于Redis的内部实现和源码设计还在进一步研究,有新的理解和心得会及时在这里跟大家一起分享哦!


1 1