Map实现缓存

Java缓存机制之Map实现 最近遇到一些问题,就是系统会需要频繁的使用一些数据,这些数据的更改较少,如果每次使用都从数据库查找,这无疑影响系统的性能。 经过网上的资料查找以及自己的实验,找到了一种方法解决该问题的方法,即缓存。将需要的所有数据缓存起来,放到内存中,数据更改的时候,清掉缓存,再次重新缓存数据。这样能减少对数据库的访问,提高效率。 本人用到的是Map,个人觉得Map实现缓存机制比较简单实用。 接下来是简单示 阅读详情

Map实现缓存

为什么要使用缓存

缓存最终的目的是为减轻服务端压力,减少网络传输请求

客户端缓存  

浏览器访问自带缓存~~

页面缓存

浏览器缓存

App客户端缓存    IOS 前端开发     底层都有缓存技术的        

(移动端登录 用token 本地是有个文件的)

如果一旦请求到服务器端之后,会在本地缓存一份,快速响应给用户。

网络缓存

代理缓存(Nginx可以缓存)

CDN缓存

 

服务器缓存

数据库缓存

平台缓存级缓存

 

缓存最终的目的是为减轻服务端压力,减少网络传输请求

 

 

Session 是存放在服务器端(保存在单个JVM中),返回SessionId(响应头),客户端存放的SessionId,下次请求时候,直接使用对于的SessionId从服务器端查询对应Session

分布式Session (Session共享的问题)----直接使用token解决

 

实现单个JVM缓存框架, Session Key Value  可以用Map集合实现  过期时间需要好好设计了

废话不多说,写一个给予Map集合实现Jvm缓存框架

项目目录结构:

 

 

 首先定义map实现的缓存类:(concurrentHashmap保证安全)

package com.toov5.ehcache;

import java.util.concurrent.ConcurrentHashMap;

import org.springframework.stereotype.Component;
@Component  //这样的话 就是单例的了!!!注入到容器里面 
public class MapCache<K,V> {
    //存放缓存容器
   public ConcurrentHashMap<K, V> concurrentHashMap = new ConcurrentHashMap<K,V>();
    //纯手写单个JVM缓存框架 缓存概念偏向于临时
    
   //对传统的Map包装
   public void put(K key,V value){
       concurrentHashMap.put(key, value);
   }
   //查询
   public V get(K key){
       return concurrentHashMap.get(key);
   }
   
   public void remove(String k){
       //这个map是安全的 不需要加锁!
       concurrentHashMap.remove(k);
   }
}

 

Controller业务类

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.ehcache.MapCache;

@RestController
public class IndexController {
  
    @Autowired
    private MapCache<String, Object> mapCache;
    
    @RequestMapping("/get")
    public String get(String key){
        return (String)mapCache.get(key);
    }
    
    @RequestMapping("/put")
    public String put(String key, String value){
        mapCache.put(key, value);
        return "成功";
    }
    
    @RequestMapping("/remove")
    public String remove(String key){
        mapCache.remove(key);
        return "成功";
    }

}

App启动类:

package com.toov5.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication(scanBasePackages={"com.toov5.*"})
public class app {
   public static void main(String[] args) {
    SpringApplication.run(app.class, args);
}
    
}

运行结果

 有效期设计:再开一个定时Job 每隔1S 去检查下 有过期的没 然后执行删除操作

 

缓存初见——利用Java中的Map实现简单的缓存 前言 1、缓存常见的问题 2、常见的内存缓存实现 使用Java中的Map实现简单的缓存 直接看代码,注释比较详细了 package com.prince.cache; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** 阅读详情

相关推荐

JAVA中基于Map实现缓存工具类(二)

上一篇博客是基于map实现了一个简单的缓存工具类,但实际开发过程中我们会发现,我们的内存空间是有限的,当缓存占用的空间达到上限,我们就应该将超过上限需要淘汰部分的缓存数据清除掉,从而达到缓存空间的优化。 常见的淘汰策略有:FIFO、LRU、LFU,这里我根据老师的讲解,在上一往篇的基础之上,加入了FIFO淘汰策略的支持。 感兴趣的同学一起来学习一下,继续贴代码…… package com.study.map; import java.util.LinkedHashMap; ...

tongkp的专栏 498

Java 利用Map写个简单的缓存

Java 利用Map写个简单的缓存

nobody 7208

Java中Map实现的高效缓存技术

缓存技术是一种能够通过存储频繁访问数据的临时副本以加快数据检索速度的技术。它的工作原理是基于局部性原理,即一段时间内被频繁访问的数据在接下来的时间里也很可能再次被访问。缓存技术广泛应用于计算机系统的各个层面,从CPU、数据库,到Web应用,无一例外。例如,在Web应用中,使用缓存可以避免对数据库的频繁查询,从而显著减少延迟、提高响应速度。在本章中,我们将探讨缓存的基本概念,并分析其在不同领域中的实际应用案例。

weixin_35752233的博客 631

使用Map做缓存

1.单例实现 import org.springframework.stereotype.Component; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecuto

IT_world_的博客 2485

Map实现web缓存

一个使用map实现web缓存的工具类 可供web应用开发参考

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 711

用map做缓存

需求: 公共层写一个map,用来做数据缓存(没有redis) 代码实现 import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @Author: 李大本事 * @Date: 2020/6/1 11:27 */ public class MemoryCacheUtils { private static Map<String, CacheData> CACHE_DATA; sta

activety的博客 2350

告别功能限制:Win11家庭版无损升级专业版全攻略

本文详细介绍了如何将Win11家庭版无损升级到专业版的全过程,包括升级前的准备、两种官方升级方案(Microsoft Store购买和使用产品密钥)以及命令行升级方法。升级后可解锁远程桌面、组策略编辑器和BitLocker加密等高级功能,适合需要更多商业功能的用户。

weixin_32822843的博客 702

用ConcurrentHashMap 实现JVM缓存

为什么用缓存 提升应用程序性能 降低数据库成本 减少后端负载 可预测的性能 消除数据库热点 提高读取吞吐量(IOPS) 读多写少用缓存 常用的分布式缓存有Redis、Memcached等。 但是在单机的情况下,咱们完全可以使用内部缓存达到更好的效果。当需要扩展为分布式集群环境时,更改实现类就可以了。 JSR107规范 http://jcp.org/en/jsr/detail?id=107 ...

t_liuyong的专栏 956

别再死磕NFP了!用Python+遗传算法搞定异形件自动排版(附完整代码)

本文介绍了如何利用Python和遗传算法实现异形件智能排版,解决传统NFP方法计算复杂的问题。通过Shapely库处理几何运算和DEAP库搭建遗传算法框架,结合模拟退火策略避免局部最优,显著提升材料利用率。附完整代码和优化技巧,适用于服装裁剪、金属加工等行业。

weixin_26965807的博客 236

馈电网络设计:通过Smith圆图工具完成微带线到同轴探针的阻抗匹配

Smith圆图通过图形化阻抗变换路径,显著简化微带线到同轴探针的匹配设计。设计需结合理论计算(微带线阻抗公式、探针等效模型)、圆图操作(串联/并联元件移动规则)及仿真验证,最终实现宽带低反射匹配。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

【Java使用】通过Map将数据缓存到内存中

使用ConcurrentHashMap,可以保证在并发环境下不会出现键值对被覆盖的问题 常量定义 与redis类似,定义一个默认的缓存时长、缓存容量、储存数据的结构(采用的Map<String,Object>) 此外,需要一个定时器来控制缓存的超时时间,逻辑上类似于一个定时任务线程,可以采用线程池中的ScheduledExecutorService创建 /** * 默认缓存时长 单位s */ private static final int DEFAULT_TIMEO

qq_36939158的博客 3494

一文读懂医疗大模型测评基准

面对市场上浩若星海的大模型,医院管理者如何采购适合自身场景的解决方案?如何选取好的模型作为基础进行课题研究?都是医院需要特别重视的问题。评测基准则benchmark是这些问题的重要解法,国内北京、上海、浙江已然开展了相关的标准化工作。

dz102的博客 1840

java map 做缓存_Java 使用 Map 实现缓存工具

1 packagecom.wbproject.util.cache;23 importjava.time.LocalDateTime;4 importjava.time.format.DateTimeFormatter;5 importjava.util.Date;6 importjava.util.HashMap;7 importjava.util.HashSet;8 importjava.ut...

weixin_39528029的博客 528

【教程4>第4章>第15节】基于FPGA的costas环的设计构架

目录1.costas环的整体实现结构2. FPGA设计构架3.参考文献 Costas 环是一种用于载波同步的闭环反馈控制系统,主要应用于通信系统中的相干解调。其基本原理是通过鉴相器(Phase Detector,PD)比较接收信号与本地载波信号的相位差,将这个相位差信息经过环路滤波器(Loop Filter,LF)滤波后,去控制数控振荡器(Numerically Controlled Oscillator,NCO)的输出频率和相位,使得本地载波能够跟踪接收信号的载波,最终实现载波同步。我们在《F

FPGA/MATLAB学习教程/源码/项目合作开发 567

光谱数据预处理综合

除了化学信息,光谱还包含其他不相关或不需要的信息,如电噪声,基质背景,杂散光,散射效应等。在用化学计量学方法建立校准模型时,利用预处理方法消除光谱数据中的无关信息和噪声是非常必要的。

qq_44204759的博客 5191

java map 缓存池_缓存初见——利用Java中的Map实现简单的缓存

缓存初见——利用Java中的Map实现简单的缓存缓存初见——利用Java中的Map实现简单的缓存前言1、缓存常见的问题2、常见的内存缓存实现使用Java中的Map实现简单的缓存直接看代码,注释比较详细了package com.prince.cache;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import ...

weixin_30152861的博客 539

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1183

java map缓存static_Map方式实现JAVA数据缓存

首先建一个map,该map用来存放所有的数据protected static Map map = new HashMap<>();加载所有User,将其放入到User中,map的key为User的id,value为user 加锁是为了保护安全public void loadAllUser() {if (map.size() == 0) {synchronized (map) {try...

weixin_42449548的博客 1217

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Map 缓存实现

package xxx.xxx.xxx; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Map 缓存实现 */ public class MapCache { /** * 默认存储1024个缓存 */ private static final int...

一个程序员的成长之路。。。 5746

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

使用map实现一个redis缓存

使用map实现一个redis缓存 定义一个cache接口 public interface Cache { <T> T get(String key); <T> T hget(String key); <T> T hget(String key, String field); void set(String key...

蓝天之枫 2193

map实现缓存

经过网上的资料查找以及自己的实验,找到了一种方法解决该问题的方法,即缓存。将需要的所有数据缓存起来,放到内存中,数据更改的时候,清掉缓存,再次重新缓存数据。这样能减少对数据库的访问,提高效率。本人用到的是Map,个人觉得Map实现缓存机制比较简单实用。接下来是简单示例首先建一个map,该map用来存放所有的数据[html] view plain copyprotected static Map&l...

weixin_37518151的博客 3637

使用map实现本地缓存

一、创建定时器线程池 static class FactoryClass implements ThreadFactory{ @Override public Thread newThread(Runnable r) { Thread t = new Thread(r, "SegmentScheduledExecutorThread"); t.setDaemon(true); return t; } } pr

Lven的博客 2438

通过map结合localstorage实现简单可调配的本地缓存

实现摘要:通过Array和Object实现Map存储,通过localStorage实现本地缓存,通过函数代理注册传入函数(如回调函数等)。代理函数用来将传入函数添加为自身属性或成员方法以便调用,即代理函数就是一种反射方式。另外,Map存储中含有将Object转换为JSON对象和JSON字符串的方法,可以供需而用。以下是具体实现方式:     /**注册函数域*/ if(typeof non...

三里小龙 2346

Map在Java中构造缓存对象的原理及实现

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34418883的博客 114

java 缓存map_Map在Java中构造缓存对象的原理及实现

在实际的项目中,当我们对于某些数据需要经常去访问的时候,我们一般的做法都是将其数据放置到一个缓存(Cache)对象中去,可以达到使用空间节省时间的效果。同时,缓存的使用,也可以减少我们对硬盘或者数据库的频繁访问。达到了比较理想的效果。这就是为什么我们在java中需要对某个对象设置缓存的原因(也即原理)。在Java中最常见的一种实现缓存的方式就是使用Map,而缓存的实现则主要分为三大步骤:第一:先到...

weixin_42523529的博客 572
上一篇: 热部署和类加载器
下一篇: 缓存技术
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值