Caching persists data between the same job in different Workflow builds.
Artifacts persist data after a Workflow has finished
When a Workspace is declared in a job, one or more files or directories can be added. Each addition creates a new layer in the Workspace filesystem. Downstreams jobs can then use this Workspace for its own needs or add more layers on top.
Unlike caching, Workspaces are not shared between runs as they no longer exists once a Workflow is complete.
Caching lets you reuse the data from expensive fetch operations from previous jobs.
A prime example is package dependency managers such as Yarn, Bundler, or Pip.
Caches are global within a project, a cache saved on one branch will be used by others so they should only be used for data that is OK to share across Branches
Artifacts are used for longer-term storage of the outputs of your build process.
If your project needs to be packaged in some form or fashion, say an Android app where the .apk file is uploaded to Google Play, that’s a great example of an artifact.
"CircleCI 2.0 provides a number of different ways to move data into and out of jobs, persist data, and with the introduction of Workspaces, move data between jobs"