基于磁盘的数据库->缓存
初期数据存储在文件中,随着文件变大,磁盘IO成为瓶颈。操作系统取出一扇区最小单位为4K,当文件变大,索引就相应增长,产生磁盘IO的成本问题
由此产生了数据库,数据库最小数据页也是4K(同操作系统一致,可以增大大小),当只有这样时是同在操作系统中一样的。所以有索引,索引空间也是4K。这里面,关系型数据库必须给出schema,字段类型及字节宽度,以及存放时偏向于行级存储。这样可以在使用索引时减少IO。内存中B+树类型指向索引,找到最短路径,查出数据页数据放到内存中。
所以数据库表很大,性能会下降。如果有索引,增删改速度会变慢,因为在处理数据时,同时要对索引进行操作。查询速度,如果1个或者少量查询会很快,在并发或者复杂sql会受磁盘带宽影响速度。
基于内存的数据库HANA(需要2T内存)
折中使用缓存:Redis
1、基于冯诺依曼体系的硬件(磁盘I\O)2、以太网(基于TCP\IP的网络[不稳定])
安装过程(网上一大把,不记录)
配置文件,日志地址,持久化数据地址
redis-server *.conf 根据指定配置文件进行启动
Redis处理请求为什么快?
相比较与memcached有多种数据类型,虽然memcached可以使用json格式。但是其实数据类型并不重要,而是有自己的数据类型处理方式。减少数据传输的网卡IO(计算向数据移动)
单进程、单线程、单实例,为何快?底层使用内核epoll,不频繁切换用户态和内核态的NIO多路复用。从文件描述符链表中按照“顺序”取出执行。从client到内核磁盘IO,epoll直接内存处理速度要快的多。能够快速处理完毕。