题记:实现缓存大部分可以使用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实现内存缓存的更多相关文章

  1. springboot集成Guava缓存

    很久没有写博客了,这段时间一直忙于看论文,写论文,简直头大,感觉还是做项目比较舒服,呵呵,闲话不多说,今天学习了下Guava缓存,这跟Redis类似的,但是适用的场景不一样,学习下吧.今天我们主要是s ...

  2. springBoot整合ecache缓存

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心 ...

  3. SpringBoot中Shiro缓存使用Redis、Ehcache

    在SpringBoot中Shiro缓存使用Redis.Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器. 让shiro引用 本文是建立在你是使用这sh ...

  4. 转载-Springboot整合ehcache缓存

    转载:https://www.cnblogs.com/xzmiyx/p/9897623.html EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统 ...

  5. 最佳内存缓存框架Caffeine

    Caffeine是一种高性能的缓存库,是基于Java 8的最佳(最优)缓存框架. Cache(缓存),基于Google Guava,Caffeine提供一个内存缓存,大大改善了设计Guava's ca ...

  6. Springboot使用ehcache缓存

    本文部分步骤继承于springboot使用cache缓存,如果有不清楚的,请移驾springboot使用cache缓存 ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java ...

  7. springboot(12)Redis作为SpringBoot项目数据缓存

    简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...

  8. SpringBoot系列——cache缓存

    前言 日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录springboot中使用cache缓存. 官方文档介绍:https://docs.spring ...

  9. cache4j轻量级java内存缓存框架,实现FIFO、LRU、TwoQueues缓存模型

    简介 cache4j是一款轻量级java内存缓存框架,实现FIFO.LRU.TwoQueues缓存模型,使用非常方便. cache4j为java开发者提供一种更加轻便的内存缓存方案,杀鸡焉用EhCac ...

随机推荐

  1. deep_learning_初学neural network

    神经网络——最易懂最清晰的一篇文章 神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学 ...

  2. 8.Netty发送对象

    1.Netty发送对象简介: Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对 ByteBuf数 据流进 ...

  3. Linux----Ubuntu虚拟机(VMWare)学习

    1.在安装虚拟机系统完成后,如果忘记密码则 https://jingyan.baidu.com/article/c843ea0b9e851077931e4aea.html 2.如何拖动桌面软件移动 长 ...

  4. 内嵌tomcat快速入门

    1.依赖 <!--Java语言操作tomcat --> <dependency> <groupId>org.apache.tomcat.embed</grou ...

  5. java线程基础巩固---数据同步引入并结合jconsole,jstack以及汇编指令认识synchronized关键字

    对于多线程编程而言其实老生成谈的就是数据同步问题,接下来就会开始接触这块的东东,比较麻烦,但是也是非常重要,所以按部就班的一点点去专研它,下面开始. 数据同步引入: 这里用之前写过的银行叫号的功能做为 ...

  6. 转C++之stl::string写时拷贝导致的问题

    前几天在开发某些数据结构到文件的 Dump 和 Load 功能的时候, 遇到的一个 bug . [问题复现] 问题主要出在 Load 过程中,从文件读取数据的时候, 直接使用 fread 的去操作 s ...

  7. 阿里云端安装mysql

    首先查看系统版本,是64位的centos7 file /sbin/init 安装指南如下 https://www.cnblogs.com/thinkingandworkinghard/p/671125 ...

  8. string::substr

    string substr (size_t pos = 0, size_t len = npos) const; #include <iostream> #include <stri ...

  9. gRPC应用实践

    What is RPC? Remote Procedure Call is a high-level model for client-server communication. Assume the ...

  10. js 原生ajax请求

    什么是ajax 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). XMLHttpRequest 用于在后台与服务器交换数据.这意味着可 ...