缓存
缓存
KDoo
Javaer
展开
-
JetCache源码(四)——一些有趣特性的实现
一、自动刷新实现这里贴出的代码是添加刷新任务的方法,首先维护了一个任务队列,以taskId作为key,RefreshTask作为value。private ConcurrentHashMap<Object, RefreshTask> taskMap = new ConcurrentHashMap<>();protected void addOrUpdateRefreshTask(K key, CacheLoader<K,V> loader) { R原创 2020-09-23 12:27:28 · 814 阅读 · 0 评论 -
JetCache源码(三)——本地缓存实现
一、类结构二、AbstractEmbeddedCache定义了InnerMap和创建InnerMap的抽象方法,由LinkedHashMapCache和CaffeineCache两个子类来实现。 protected InnerMap innerMap; protected abstract InnerMap createAreaCache();在这个类中实现了一些公共方法,避免子类重复实现,公共方法会调用如innerMap.getValue(newKey),使用每个子类的独原创 2020-09-23 12:26:38 · 1334 阅读 · 0 评论 -
JetCache源码(一)——简介与注解实现
一.为何不用Map作为本地缓存库内存管理没有对使用的内存做限制,需要手动编写代码来控制内存,没有自动的内存管理机制。缓存过期策略没有缓存过期策略,如:LRU,LFU,FIFO容量规划没有容量限制Map是否是线程安全的可能会出现并发控制问题持久化服务器重启,Map中数据消失多实例数据同步及一致性Map是在服务器的一个实例中的,部署多个实例时,Map中数据会产生不一致的情况二.本地缓存相较于第三方缓存有什么优势不经过网络传输,响应速度快其中本地缓存无法进行持久化,以及保证多原创 2020-09-23 12:19:38 · 1959 阅读 · 0 评论 -
基于Redis的Hyperloglog实现日活量和总活跃量统计
一、背景介绍产品提出想要统计目前系统中某个页面日活量与总活跃用户数量,由于这个页面登录与未登录用户均可访问,因此不能通过用户id来统计,要通过ip地址来做统计和去重处理。二、技术选型首先想到的方案是使用redis的set数据结构,因为它是一个无序集合,我们得到ip地址,然后存入set中即可实现统计与去重的效果,但是set有一个很大的问题是,每一条数据占用的空间会比较大,如果数据量很大的话可能会导致内存问题。因此想到用一些比较节约空间的数据结构,想到了之前了解过的bitmap,空间占用比较低,不过b原创 2020-09-23 12:17:27 · 2034 阅读 · 0 评论 -
缓存(一)——浏览器缓存
一.概述浏览器缓存即http缓存,将数据缓存在浏览器(即客户端)。二.工作流程http缓存都是从第二次请求开始的。第一次请求资源,服务器返回对应资源,并在response header响应头中添加缓存策略。第二次请求时,浏览器判断请求参数,命中强缓存就直接200,从本地缓存中拿数据。否则把响应参数存在request header请求头中,看是否命中协商缓存,命中则返回304,否则服务器会返回全新资源。强缓存与协商缓存强缓存:无需与服务端发生交互协商缓存:需要与服务端发生交互,判断是否使原创 2020-08-16 01:31:58 · 317 阅读 · 2 评论 -
解决静态资源文件js/css缓存问题(超详细总结版)
什么是静态资源文件顾名思义,静态资源文件就是js、css、img等非服务器动态运行生成的文件,统称为静态资源文件。为什么要缓存静态资源文件静态资源文件是基本不会改变的,没必要每次都从服务器中获取。也就是说,我们每次向服务器发送请求得到的静态资源是相同的。所以我们可以把静态资源缓存再浏览器,也就是客户端,来进行性能优化。虽然绝大多数css和js文件都只有几百k,但有些时候会存在如字...原创 2019-11-18 21:52:11 · 19792 阅读 · 5 评论