WEB架构之缓存-Buffer与Cache(01)

2020年7月21日19:25:25 发表评论 573 views

备注:它们都是解决速度不一致的问题,都涉及到IO操作。

1.1 Buffer

一般用于写操作,可以称之为写缓冲。用于解决不同介质直接存储速度的不同,将数据写入到比自己相对慢的不是很多的中间区域就返回,然后最终再写入到目标地址,提高写入性能。缓冲也可以有多级。

1.2 Cache

一般用户读操作,可以称之为读缓存。用于将频繁读取的内容放入缓存,下次再读取相同的内容,直接从缓存中读取,提高读取性能,缓存可以有多级。

1.2.1 Cache存放的位置

  1. 客户端(浏览器缓存)
  2. 内存(本机内存、远程服务器内存)
  3. 硬盘(本机硬盘、远程服务器硬盘)

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

  • 内存状态解析:
  1. 原始状态时内存的available为641M,写入状态时内存available为560M,641M-560M=81M,证明我们放置的81M的文件是使用了内存空间。
  2. 原始状态时内存的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. 存储空间的设置和动态变化
  2. 速度快
  3. 没有持久性

1.3.4 tmpfs应用场景

  1. 反向代理缓存中,缓存目录使用tmpfs
  2. 将php的session文件放在tmpfs下
  3. 将服务的socket文件放在tmpfs下
  4. 根据业务需要,需要临时存储并且高性能读写的目录
weinxin
我的微信
如果有技术上的问题可以扫一扫我的微信
版权声明
1. 本网站名称:Leon的博客
2. 本站永久网址:https://blog.leonshadow.cn
3. 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ632113590进行删除处理。
4. 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5. 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6. 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
liyang