java缓存学习

x33g5p2x  于2021-12-20 转载在 Java  
字(1.1k)|赞(0)|评价(0)|浏览(361)

首先说一下缓存著名的开源框架:

最出名的当属 Redis 和 Memcached 了,它们因为使用简便、高性能而成为事实上的标准。还有一些是比较有名的Java开源缓存框架,例如Ehcache、GuavaCache 和 Caffeine

静态缓存和动态缓存:

所谓静态缓存包括两种形式,一种是在网站产生新的内容时就立刻生成相应内容的静态页面,下次用户访问这些内容时就不用通过数据库查询获得;另一种是静态资源缓存,也就是将网站中经常用的资源,如图片、图标、CSS 样式表、JavaScript 文件、音频、视频等内容单独保存到带宽高、性能好的服务器中,这样可以提升系统整体的性能。

动态缓存则是在网站产生内容后,并不立即产生内容,而是在第一次访问时,如果缓存服务器找不到相应缓存,那么就生成相应的静态内容,否则就直接返回缓存中的静态内容。因此,用户第一次访问页面时可能会慢一点,但是以后就会很快了,因为是直接访问的缓存。

进程内缓存和进程外缓存:依赖于应用而存在

进程内缓存:

  • 利 用ConcurrentHashMap 保存一些经常需要用到的数值或对象

  • 开源的进程内缓存框架来实现,如 Ehcache、Guava 和 Caffeine

进程外缓存:不依赖于应用而可以独立存在

  • Redis/Memcached

ConcurrentHashMap学习:

首先我们在说ConcurrentHashMap之前一定要谈的就是Map中的HashMap:

HashMap: HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同

开始先说哈希表:

举个例子说明就是假如有一个数字:20048157这个数字然后要存入一个大小为16的数组中去,我们就可以通过用20048157 mod(模运算->取余) 16,最后肯定会得到一个0-16范围的数字。算出来的这个结果就是这个20048157存放在数组的对应结果下标位置,数组一半设置为质数,应为需要均匀散步不要被整除

遇到冲突怎么办:两种方法

1:链表式解决:

上面我们可以看到15和22对7进行模运算都是1,所以22就跟在15的后面

2:开放地址:

顾名思义就是将数组的其他地方地址都开放开来

线性探测法:

说白了就是倘若你的地址已经被占了的话就直接去下一个地址,+1这样直到出现空地址,要是最后一个地址+1那就回到第一个地址形成一个循环!

平方探测法:

其实区别就是找位置的时候的不同,上面的线性探测法是+1,这里是平方,第一次是1的平方,位置加一后要是没有数据就放到这里。要是位置+1的地方已经有了数据那就加4,也就是2的平方以此类推:9,16…

双哈希:

相关文章

最新文章

更多

目录