分布式缓存一:为什么要用缓存

0.常识

1.数据在内存中的存储方式

分布式缓存一:为什么要用缓存_第1张图片

2.I/O buffer

磁盘有磁盘和扇区,一扇区512Byte(字节),如果要一个扇区一个扇区读,会带来索引的成本变大的问题,所以在读取磁盘时,默认4k(4096Byte)为一个单位读取。所以在操作系统(OS)中,无论你要读多少,都是4k为一个从磁盘中读取。

3.数据在磁盘和内存的体积不一样

由于磁盘中没有指针的概念,所以磁盘迁移到内存,例如2T的数据量只能迁移过去1T多,因为要留空间给类似JVM中的堆之类的结构。

4.关于数据库

生产中大量的数据不可能存在内存中,内存资源是宝贵的,是昂贵的,存在磁盘中,I/O又是瓶颈,是一个不可逾越的问题。

数据库分为内存数据库和磁盘数据库,内存数据库类似HANA超贵,家里没矿是用不起的。磁盘数据库(mysql,oracle)一般建议并发不要超过2000/s,但缓存是走内存的,内存天然可以支撑别说是4000/s,4w/s的并发也是支持的,单机承载并发量是mysql单机的几十倍。

数据库dataPage同样每个存4k,如果直接读每个dataPage就和扫描磁盘一样了,那这个时候就会用到索引,索引其实也是数据,也存在dataPage里,数据和索引其实都存在磁盘中,内存里只是一个B+树。所以关系型数据库在建表时,必须给出schema(每列的类型即字节宽度,这样存的时候,倾向于行级存储,行级存储时,这样插入一行的时候,如果某列无值,会占位,占位之后,未来增删改查不移动数据,直接覆写就可以了)。

数据库表很大的时候,索引会导致性能下降吗?
如果表有索引,增删改回变慢,因为还要维护索引。查询在1个或者更少量查询的时候,依然很快;并发大的时候,会受硬盘带宽影响速度。

5.两个基础设施

1.冯诺依曼体系的硬件
2.以太网,tcp/ip的网络

1.为什么要用缓存

由于计算机的基础设施结构以及这个设施所带来的限制(内存小又贵,内存数据库的昂贵,磁盘I/O的速度),现代生产系统的大数据量以及要求的高性能,高并发,所以催生出了缓存(redis,memcached等)。又由于TCP/IP的不稳定,所有缓存也由各种各样的问题。

2.缓存的好处

1.缓存是如何实现高性能的

分布式缓存一:为什么要用缓存_第2张图片

2.缓存是如何实现高并发的

分布式缓存一:为什么要用缓存_第3张图片

2.缓存的缺点

常见的有三个
1.缓存与数据库双写不一致
2.缓存雪崩
3.缓存穿透
4.缓存并发竞争

你可能感兴趣的:(redis,java,缓存,redis)