分布式本地缓存(JVM缓存)

适用本地(JVM)缓存的场景:

1、对性能有非常高的要求。

2、不经常变化。

3、占用内存不大。

4、有访问整个集合的需求。

需要特别注意的地方:

1、如果是缓存查不到,再查DB。切记一定要加上锁,不然如果多个线程同时去查缓存,然后查不到,然后又同时去查DB,线程足够多,有可能出现穿透DB的情况。

2、如果某个节点存在多个实例(集群),那么每个实例中的本地缓存有可能出现不一致(每个缓存刷新的时间点不可能完全一致)。如果是公共的缓存,比如库存等,应该放到redis中。

3、每个实例刷缓存的线程,尽量是增量刷(有改动的行刷进内存中)。

4、如果缓存有可能出现多个线程同时操作,选择线程安全且高效的集合,比如ConcurrentHashMap,并预估可能存入的数据量,初始容量设置成2的n次方(原因请看HashMap原理的随笔)。

原文地址:https://www.cnblogs.com/jylsgup/p/10134802.html

时间: 2024-10-09 17:49:46

分布式本地缓存(JVM缓存)的相关文章

分布式架构系列:缓存

一.缓存概述 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问. 1.1缓存的原理 (1) 将数据写入/读取速度更快的存储(设备): (2) 将数据缓存到离应用最近的位置: (3) 将数据缓存到离用户最近的位置. 1.2缓存分类 在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用. (1) CDN缓存: (2) 反向代理缓存: (3) 分布式Cache: (4) 本地应用缓存: 1.3缓存媒介 常用中间件:Varni

搞懂分布式技术13:缓存的那些事

搞懂分布式技术13:缓存的那些事 缓存和它的那些淘汰算法们 为什么我们需要缓存? 很久很久以前,在还没有缓存的时候--用户经常是去请求一个对象,而这个对象是从数据库去取,然后,这个对象变得越来越大,这个用户每次的请求时间也越来越长了,这也把数据库弄得很痛苦,他无时不刻不在工作.所以,这个事情就把用户和数据库弄得很生气,接着就有可能发生下面两件事情: 1.用户很烦,在抱怨,甚至不去用这个应用了(这是大多数情况下都会发生的) 2.数据库为打包回家,离开这个应用,然后,就出现了大麻烦(没地方去存储数据

[js开源组件开发]localStorage-cache本地存储的缓存管理

localStorage-cache本地存储的缓存管理 距离上次的组件开发有近三个月的时间了,最近一直在做一些杂事,无法静下心来写写代码,也是在学习emberjs,在emberjs中有一个很重要的东西 -- localstorage_adapter,本地存储适配器,利用它可以很方便的把数据保存在本地的localStorage中,但我今天要讲的,并不是ember,也不是适配器,我是个比较念旧的人,所以我对cookie很情有独钟,当然,cookie也会有各种问题,于是我就来改造下localStora

刷新本地的DNS缓存

用“WIN +R”快捷键打开运行窗口,输入“cmd”命令,进行命令行窗口. 在命令行窗口输入“ipconfig /flushdns”执行,刷新本地的DNS缓存数据. 如果在执行“ipconfig /flushdns”时,出现下图所示的“无法刷新DNS解析缓存”的错误,一般是本地的“DNS Client”服务没有正常启动. 在命令行窗口输入“services.msc”,或者通过“控制面板”->“管理工具”->“服务”,进入服务管理窗口. 启动“DNS Client”服务后,再在命令行窗口执行“i

如何刷新本地的DNS缓存?

为了提高网站的访问速度,系统会在成功访问某网站后将该网站的域名.IP地址信息缓存到本地.下次访问该域名时直接通过IP进行访问.一些网站的域名没有变化,但IP地址发生变化,有可能因本地的DNS缓存没有刷新导致无法访问.这时我们可以试着刷新本地的DNS缓存,看能否解决无法访问网站的问题. 方法/步骤 用"WIN +R"快捷键打开运行窗口,输入"cmd"命令,进行命令行窗口.   在命令行窗口输入"ipconfig /flushdns"执行,刷新本地的

搞懂分布式技术15:缓存更新的套路

搞懂分布式技术15:缓存更新的套路 缓存更新的套路 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中.然而,这个是逻辑是错误的.试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后在放到缓存中之前更新操作获得了执行权更新了数据库,于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了. 我不知道为什么这么多人用的都是这个逻辑,当我在微博上发了这个贴以后,我发现

.Net 性能优化--缓存--分布式缓存 --sqlserver缓存

.Net 性能优化--缓存,主要有内存缓存,分布式缓存,http缓存 分布式缓存 接着上篇的.Net 性能优化--缓存--内存缓存的讲,如有不清晰的地方请参考上篇文章.Net 性能优化--缓存--内存缓存 上上篇的.Net 性能优化--缓存--内存缓存说的是使用asp.net core 自带的扩展 Microsoft.Extensions.Caching.Memory来进行缓存的处理, IMemoryCache缓存处理对于单个应该用程序是很方便,但是对于集群的话就存在一个致命的问题,就是各个集群

缓存中间件-缓存架构的实现(上)

前言 一眨眼,2019年就过去了.我希望从按照中间件,分别阐述一些常见的架构问题,以及解决方案.一方面这些问题与解决方案具备一定通用性 .另一方面,也算是面试中常见的问题. 我希望根据自己待过各种规模公司的经验来谈一些看法. 如果是针对大部分小公司的工作或面试,这些问题都稍微留下个印象即可.因为小公司的技术对这些问题并不是很看重,或者说机会用不到(小型公司往往追求产品功能的实现,业务的推进等). 如果是针对大部分中型公司的工作或面试,希望可以完整地知道这些问题与解决方案.因为在中型公司中,这些问

Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

Android公共库--图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工具类(网络.下载.shell.文件.json等等). TrineaAndroidCommon已开源,地