缓存功能的存在,让我们在浏览网页和访问防止的时候可以更快的加载我们需要的内容,而今天北大青鸟http://www.kmbdqn.cn/就通过案例分析来了解一下,浏览器的缓存功能在使用上都有哪些类型。
1.ServiceWorkerServiceWorker是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。
使用ServiceWorker的话,传输协议必须为HTTPS。
因为ServiceWorker中涉及到请求拦截,所以必须使用HTTPS协议来保障安全。
ServiceWorker的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。
ServiceWorker实现缓存功能一般分为三个步骤:先需要先注册ServiceWorker,然后监听到install事件以后就可以缓存需要的文件,那么在下次用户访问的时候就可以通过拦截请求的方式查询是否存在缓存,存在缓存的话就可以直接读取缓存文件,否则就去请求数据。
当ServiceWorker没有命中缓存的时候,我们需要去调用fetch函数获取数据。
也就是说,如果我们没有在ServiceWorker命中缓存的话,会根据缓存查找优先级去查找数据。
但是不管我们是从MemoryCache中还是从网络请求中获取的数据,浏览器都会显示我们是从ServiceWorker中获取的内容。
2.MemoryCacheMemoryCache也就是内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。
读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。
一旦我们关闭Tab页面,内存中的缓存也就被释放了。
那么既然内存缓存这么高效,我们是不是能让数据都存放在内存中呢?这是不可能的。
计算机中的内存一定比硬盘容量小得多,操作系统需要精打细算内存的使用,所以能让我们使用的内存必然不多。
cache java是什么, 让我们一起了解一下?Cache 是一个像 Map 一样的数据结构,它允许基于 Key 的临时储存。缓存被单个 CacheManager 拥有。
Java 的缓存 API 定义了五个核心接口:CachingProvider,CacheManager,Cache,Entry 和 ExpiryPolicy。
Java实现cache的基本机制是什么?
我这里说的cache不是指CPU和RAM之间的缓存,而是java应用中间常用的缓存。最常使用的场合就是访问数据库的时候为了提高效率而使用的 cache。一般的用法就是把数据从数据库读到内存,然后之后的数据访问都从内存来读,从而减少对数据库的读取次数来提高效率。
说了这么多,Java 下到底如何实现Cache,希望下面的实际案例可以帮助到你。 public class CacheFactory { private static ConcurrentHashMap caches = new ConcurrentHashMap() private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1) private static void register(Cache cache) { caches.put(cache.category(), cache) } private static void registerAll() { register(new StockCache()) } public static void init() { registerAll() for (Cache cache : caches.values()) { executorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { cache.refresh() } }, 0, cache.interval(), TimeUnit.MILLISECONDS) } } public static Cache getCache(String key) { if (caches.contains(key)) { return caches.get(key) } return null } } // cache接口除了需要提供interval和refresh以外,还需要提供一个category来区分不同的Cache public interface Cache { /** * Refresh the cache. If succeed, return true, else return false * * @return */ boolean refresh() /** * How much time it will refresh the cache. * * @return */ long interval() /** * Cache's category. Each cache has distinct category. * * @return */ String category() }