缓存技术Tair和Redis

前记:映像中之前工作的时候缓存用的是Tair。 最近看到很多关于Redis缓存的blog。于是在网上搜集了一些资料,下面是整理的读书笔。

1. 为什么要用缓存?

why?由于程序直接访问数据库的时间成本很高的,使用缓存可以减少数据库的访问次数,提升程序的响应时间。同时还能降低数据的压力

when? 什么时候使用缓存? 不经常变化的数据;或者从源头读取费时费力的数据都可以放缓存,例如:

case 1:  程序多次访问数据库,但查询结果都相同,把查询结果放在缓存里;

case 2:  数据库访问的结果要进行很复杂费时的计算,把计算结果放在缓存里;

case 3:  网站上每个页面都需要的user id 信息,放在缓存里。

2.  RDB的弊端

以下内容摘自 腾讯大数据_ 大型web系统数据缓存设计

1.  单表数据量太小: MySql 单表数据条数控制在 2000w条(20 million)

2.  TPS太小 :通常情况下,MySql的Transaction Per Second只有1500

3.  响应时间: 通常情况下,MySql的响应时间在10ms以内,

3.  大型web 网站挑战

常见日均PV 千万 (200 million) 的大型web 网站挑战:

每个PV(page view) 所产生的数据库读写量可能要超出几倍,这种情况下,每天所有的数据读写请求量可能远超出关系型数据的处理能力,更别说在流量峰值的情况下了; 当拥有几亿条数据,1w TPS的时候,响应时间也要在10ms以内,这几乎是任何一款关系型数据都无法做到的。 那么这个问题如何解决呢?最简单有效的办法当然是缓存!

1天有24*3600 = 2,073,600 ~ 2 million seconds; 

4. 常见的缓存类型

1. 本地缓存:不管是本地内存还是磁盘,其速度快,成本低,在有些场合非常有效。但不适用于web系统的集群负载均衡结构

2. 数据库缓存: 主要是指数据库的查询缓存,大部分数据库都是会提供。基本的原理就是用查询语句的hash值做key,对结果集进行缓存;如果利用的好,可以很大的提高数据库的查询效率!

3.  客户端缓存:浏览器cookie,浏览器本地缓存,html5缓存

4. 分布式缓存: 分布式缓存存在的目的就是为了提供比RDB更高的TPS和扩展性,同时又帮你承担了数据同步的痛苦;优秀的分布式缓存系统有大家所熟知的Memcached、Redis,阿里的Tair.  对比关系型数据库和缓存存储,其在读和写性能上的差距可谓天壤之别;memcached单节点已经可以做到15w以上的TPS、Redis、google的levelDB也有不菲的性能,而实现大规模集群后,性能可能会更高! 所以,在技术和业务都可以接受的情况下,我们可以尽量把读写压力从数据库转移到缓存上,以保护看似强大,其实却很脆弱的关系型数据库。

5. 阿里Tair缓存

Tair是提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足读写性能要求高及容量可弹性伸缩的业务需求。

Tair 支持 MDB,RDB和LDB三款产品,可适合于各种常见的存储场景.

  • MDB属于内存型产品,支持kv和类hashMap结构,性能最优,但不支持持久化存储; 底层封装MDB引擎是memcache 的引擎
  • RDB支持List.Set.Zset等复杂的数据结构,性能次之,可提供缓存和持久化存储两种模式; rdb是redis引擎
  • LDB属于持久化产品,支持kv和类hashmap结构,性能较前两者稍低,但持久化可靠性最高. ldb是google levelDB的引擎

阿里资深技术专家:如何在双11万亿流量下保持系统稳定?

6. Redis

1. Redis的数据类型,数据结构和code example

2. 同为分布式缓存,为何Redis更胜一筹?

 

7. Tair, Redis, Memcached性能测试对比

本文主要引入Memcached和Redis与淘宝开源Tair分布式存储进行对比测试,由于各自适用场景不同,且每个产品的可配置参数繁多,涉及缓存策略、分布算法、序列化方式、数据压缩技术、通信方式、并发、超时等诸多方面因素,都会对测试结果产生影响,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何评估依据,仅供参考,加深对各自产品的理解。

参考资料

1. 腾讯大数据_ 大型web系统数据缓存设计

2.  阿里Tair github 官方主页

3. Tair, Redis, Memcached性能测试对比

你可能感兴趣的:(大数据,java,web)