备注:它们都是解决速度不一致的问题,都涉及到IO操作。
1.1 Buffer
一般用于写操作,可以称之为写缓冲。用于解决不同介质直接存储速度的不同,将数据写入到比自己相对慢的不是很多的中间区域就返回,然后最终再写入到目标地址,提高写入性能。缓冲也可以有多级。
1.2 Cache
一般用户读操作,可以称之为读缓存。用于将频繁读取的内容放入缓存,下次再读取相同的内容,直接从缓存中读取,提高读取性能,缓存可以有多级。
1.2.1 Cache存放的位置
- 客户端(浏览器缓存)
- 内存(本机内存、远程服务器内存)
- 硬盘(本机硬盘、远程服务器硬盘)
1.2.2 Cache的几个重要指标
- Cache过期时间:TTL
- Cache过期检查、强制过期
- Cache命中率(重点): 一个完全没有命中率的cache没有意义
1.3 内存文件存储之tmpfs
1.3.1 tmpfs解析
- 原始内存使用状态:
[root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 47G 1.9G 46G 5% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 [root@linux-node1 ~]# free -m total used free shared buff/cache available Mem: 972 210 668 7 93 641 Swap: 2047 0 2047
- 在/dev/shm/写入81M内容后的内存状态:
[root@linux-node1 shm]# dd if=/dev/zero /dev/shm/of=temp count=81 size=1M [root@linux-node1 shm]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 476M 0 476M 0% /dev tmpfs 487M 81M 406M 17% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 47G 1.9G 46G 5% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 [root@linux-node1 shm]# free -m total used free shared buff/cache available Mem: 972 210 586 88 174 560 Swap: 2047 0 2047
- 内存状态解析:
- 原始状态时内存的available为641M,写入状态时内存available为560M,641M-560M=81M,证明我们放置的81M的文件是使用了内存空间。
- 原始状态时内存的shared为7M,写入状态时内存shared为88M,88M-7M=81M,证明/dev/shm是Linux给共享内存使用的。
1.3.2 tmpfs使用
- 挂载tmpfs(默认挂载大小为物理内存的一半):
[root@linux-node1 ~]# mount -t tmpfs tmpfs /mnt/tmp [root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 47G 1.9G 46G 5% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 tmpfs 487M 0 487M 0% /mnt/tmp
- 指定空间大小挂载tmpfs:
[root@linux-node1 ~]# mount -t tmpfs -o size=1G tmpgs /mnt/tmp [root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 47G 1.9G 46G 5% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 tmpgs 1.0G 0 1.0G 0% /mnt/tmp
- 重新挂载tmpfs:
[root@linux-node1 ~]# mount -o remount,size=512M /mnt/tmp [root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 47G 1.9G 46G 5% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 tmpgs 512M 0 512M 0% /mnt/tmp
1.3.3 tmpfs优势
- 存储空间的设置和动态变化
- 速度快
- 没有持久性
1.3.4 tmpfs应用场景
- 反向代理缓存中,缓存目录使用tmpfs
- 将php的session文件放在tmpfs下
- 将服务的socket文件放在tmpfs下
- 根据业务需要,需要临时存储并且高性能读写的目录

我的微信
如果有技术上的问题可以扫一扫我的微信