springboot实现内存缓存
题记:实现缓存大部分可以使用redis实现,简单、便捷,redis在针对应用部署多服务器是很好的,但如果针对单一服务器,内存缓存更好。
1、创建CacheLoader.java
import java.util.Iterator;
import java.util.Map; /**
* Created by Tisa on 2018/5/9.
* 将数据库表记录加载到jvm
*/
public class CacheLoader<V,T> {
/**
* 将数据库中的记录加载到jvm缓存,使用Map存储
*
* @param from 从数据库load出的记录
* @param to
*/
public void loadCache(Map<V, T> from, Map<V, T> to) {
if (!from.isEmpty()) {
Iterator<V> iterator = to.keySet().iterator();
while (iterator.hasNext()) {
V key = iterator.next();
if (to.containsKey(key)) {
to.remove(key);
}
}
to.putAll(from);
} else {
to.clear();
}
}
}
2、在springboot启动项目时加载进内存,创建ProvinceAppkeyAndSecretCache.java
import com.entity.ProvinceAppkeyAndAppsecret;
import com.entity.ProvinceInfo;
import com.mapper.ProvinceAppkeyAndSecretMapper;
import com.mapper.ProvinceInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap; /**
* @author:yangwj
*/
@Component
public class ProvinceAppkeyAndSecretCache {
private static final Map<String, ProvinceAppkeyAndAppsecret> provinceAppkeyAndSecretCache = new ConcurrentHashMap<>();
@Autowired
private ProvinceAppkeyAndSecretMapper provinceAppkeyAndSecretMapper; @PostConstruct
public void init() {
Map<String, ProvinceAppkeyAndAppsecret> provinceAppkeyAndSecretMap = loadProvinceInfo();
CacheLoader<String, ProvinceAppkeyAndAppsecret> loader = new CacheLoader<String, ProvinceAppkeyAndAppsecret>();
loader.loadCache(provinceAppkeyAndSecretMap, provinceAppkeyAndSecretCache);
} private Map<String, ProvinceAppkeyAndAppsecret> loadProvinceInfo() {
Map<String, ProvinceAppkeyAndAppsecret> map = new HashMap<>();
List<ProvinceAppkeyAndAppsecret> list = provinceAppkeyAndSecretMapper.selectAll();
if (list == null) {
return Collections.emptyMap();
}
Iterator<ProvinceAppkeyAndAppsecret> iterator = list.iterator();
while (iterator.hasNext()) {
ProvinceAppkeyAndAppsecret next = iterator.next();
map.put(next.getAppkey(), next);
}
return map;
} public ProvinceAppkeyAndAppsecret get(String appkey) {
return provinceAppkeyAndSecretCache.get(appkey);
}
}
3、在controller中调用
@RestController
@RequestMapping("Cache")
public class CacheController extends BaseOrderController {
private static final Logger LOGGER = LoggerFactory.getLogger(com.controller.CacheController.class); @Autowired
private ProvinceAppkeyAndSecretCache provinceAppkeyAndSecretCache; @RequestMapping("/cache")
public String orderRelationUpdateNotify(HttpServletRequest request) {
String appKey = request.getParameter("appKey");
//从内存中获取
ProvinceAppkeyAndAppsecret provinceAppkeyAndAppsecret =provinceAppkeyAndSecretCache.get(appKey);
}
}
springboot实现内存缓存的更多相关文章
- springboot集成Guava缓存
很久没有写博客了,这段时间一直忙于看论文,写论文,简直头大,感觉还是做项目比较舒服,呵呵,闲话不多说,今天学习了下Guava缓存,这跟Redis类似的,但是适用的场景不一样,学习下吧.今天我们主要是s ...
- springBoot整合ecache缓存
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心 ...
- SpringBoot中Shiro缓存使用Redis、Ehcache
在SpringBoot中Shiro缓存使用Redis.Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器. 让shiro引用 本文是建立在你是使用这sh ...
- 转载-Springboot整合ehcache缓存
转载:https://www.cnblogs.com/xzmiyx/p/9897623.html EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统 ...
- 最佳内存缓存框架Caffeine
Caffeine是一种高性能的缓存库,是基于Java 8的最佳(最优)缓存框架. Cache(缓存),基于Google Guava,Caffeine提供一个内存缓存,大大改善了设计Guava's ca ...
- Springboot使用ehcache缓存
本文部分步骤继承于springboot使用cache缓存,如果有不清楚的,请移驾springboot使用cache缓存 ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java ...
- springboot(12)Redis作为SpringBoot项目数据缓存
简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...
- SpringBoot系列——cache缓存
前言 日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录springboot中使用cache缓存. 官方文档介绍:https://docs.spring ...
- cache4j轻量级java内存缓存框架,实现FIFO、LRU、TwoQueues缓存模型
简介 cache4j是一款轻量级java内存缓存框架,实现FIFO.LRU.TwoQueues缓存模型,使用非常方便. cache4j为java开发者提供一种更加轻便的内存缓存方案,杀鸡焉用EhCac ...
随机推荐
- IPC之syscall.c源码解读
// SPDX-License-Identifier: GPL-2.0 /* * sys_ipc() is the old de-multiplexer for the SysV IPC calls. ...
- 【Swing】图形用户界面基础
前言 简单总结一下图形用户界面(Graphical User Interface)的相关基础,如GUI的基本元素:窗口,以及介绍Java中的图形界面开发设计的技术. 图形用户界面 图形用户界面就是以图 ...
- Websocket @serverendpoint 404
今天写一个前后端交互的websocket , 本来写着挺顺利的,但测试的时候蒙了,前端websocket发的连接请求竟然连接不上 返回状态Status 报了个404 ,然后看后台onError方法也没 ...
- MyBatis笔记-03-CRUD
3.CRUD 1.namespace namespace中的包名要和Dao/mapper接口的包名保持一致 2.select 选择查询语句: id:就是对应的namespace中的方法名: resul ...
- 集合(七) Set—HashSet,TreeSet和LinkedHashSet
四.Set Set和List一样,也是继承Collection的接口,但Set是不包含重复元素的集合.由于先啃下Map,Set的难度将会大幅减小.因为Set基本上都是以Map为基础实现的,例如两个主要 ...
- 【CF786B】Legacy
题目大意:初始给定 N 个点,支持三种操作:两点之间连边:一个点与一个连续区间编号的点之间连边:一个连续区间内的点和一个点连边,求执行 N 次操作之后的单源最短路. 题解:学会了线段树优化建图. 发现 ...
- Hadoop-No.2之标准文件格式
标准文件格式可以指文本格式,也可以指二进制文件类型.前者包括逗号分隔值(Comma-Separated Value,CSV和可扩展的标记语言文本(Extensible Markup Language. ...
- Python GUI编程(Tkinter)Ⅱ
Tkinter 组件 Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用.这些控件通常被称为控件或者部件. 目前有15种Tkinter的部件.我们提出这些部件以及一个简短的介 ...
- [人物存档]【AI少女】【捏脸数据】日式校服
点击下载(城通网盘):AISChaF_20191031221657757.png 点击下载(城通网盘):1572457456165c77.zip
- laravel 视图流程控制,if switch for loop
流程控制 除了模板继承和数据显示之外,Blade 还为常用的 PHP 流程控制提供了便利操作,例如条件语句和循环,这些快捷操作提供了一个干净.简单的方式来处理 PHP 的流程控制,同时保持和 PHP ...