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 ...
随机推荐
- ubuntu安装软件apt-get
一. apt-get用法 apt 0.8.16~exp12ubuntu10.26 for i386 compiled on Aug 5 2015 19:06:21Usage: apt-get [op ...
- nginx的反向代理的优势,特点于原理(一)
说到反向代理,首先先说一下反向代理的概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器(可能是apache,nginx,tom ...
- sql 178. 分数排名
编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同.请注意,平分后的下一个名次应该是下一个连续的整数值.换句话说,名次之间不应该有“间隔”. +----+----- ...
- URLConnection类的使用
URLConnection类概述 URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection,它是基于Http协议的.另外一个重要 ...
- 阿里云端安装mysql
首先查看系统版本,是64位的centos7 file /sbin/init 安装指南如下 https://www.cnblogs.com/thinkingandworkinghard/p/671125 ...
- tensorflow2.0编程规范
背景 tensorflow2.0 相比于1.0 有很大变化,1.0版本的placeholder,Session都没有了,2.0版本强推使用keras.keras是一个比较高层的api,确实挺好用的,一 ...
- 多组件共享-vuex —— 使用vuex 报错 actions should be function or object with ”handler“
vuex分模块使用时出现的问题,单文件暂时没有用到 原因是在action 文件中没有任何定义(即:文件为空)或则 action 没有任何方法返回,将action在模块引用时去掉即可 转自:https: ...
- java浮点数精度问题解决方法
基础知识回顾: BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOW ...
- 11-ajax
Ajax 1.什么是ajax Asynchronous JavaScript and XML(异步JavaScript和XML) 节省用户操作,时间,提高用户体验,减少数据请求 传输获取数据 特点 ...
- Binary Protocol
A. Binary Protocol 这道题要唯一注意的一点就是数字0的表示--0个"1"来表达,所以字符串"100"所表示的数字就是100 附代码: // C ...