IPFS将文件下载到本地节点,用的命令是ipfs get,是缓存到本地;用ipfs pin add是锁定下载的缓存数据。在ipfs中, pin表示将文件长期保存在本地,不被垃圾回收,而没有被pin处理的数据会定时清理掉。
上图展示了ipfs执行get命令的执行流程。 对于当前节点来说,所有与其连接的peers节点会构成一个swarm网络。 当本地节点发出一个get请求时,它首先会从本地的blockstore中查找请求的数据,如果没有找到,它便会向swarm网络发出请求,通过DHT Routing找到拥有该数据的节点,一旦找到一个拥有所请求数据的节点,该节点会把数据反馈回来。然后,本地节点会把收到的block数据缓存一份到本地的blockstore中,这样,整个网络中就相当于多了一份原数据的拷贝。当有更多的节点都请求该数据的时候,就变得更加容易,而由于越来越多的节点都存有该数据,数据就变得几乎不可丢失。 这也就是IPFS网络能够永久保存数据的原理,只要有任何一个IPFS节点拥有某数据,这个数据就可以被全网所获取。
在终端操作get,获取网络中hash为QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T的数据,并用cat查看数据,如下图:
在终端用ipfs pin add命令,如下图