ehcache缓存
Posted chenfei-java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ehcache缓存相关的知识,希望对你有一定的参考价值。
ehcache缓存
1.缓存框架的作用:减轻服务器的压力。
2.缓存框架 的分类: ①单点缓存框架(ehcache、guacache、oscache),是以java语言写的,在单个jvm中缓存的框架。
②分布式缓存框架redis 共享缓存框架。 跨语言。
3.缓存框架的基本流程
①流程图如下
如果运行内存较小可以设置缓存容器大小。
4.缓存框架过期策略
FIFO先进先出策略,最先存入的最先淘汰。
LRU least recently used 最近最少使用的,默认策略。
LFU最不经常使用的,在近一段时间内,数据最少被使用。
5. ehcache与redis 的区别
ehcache适合单体项目缓存,不适合分布式。因为他们在不同的jvm中互不影响。虽然可以使用rmi方式实现,但是不推荐。
redis支持分布式查询
6. 分布式架构中 使用redis 和ehcache 实现分布式缓存
①使用ehcache和redis实现一二级缓存架构图
7.ehcache分布式解决方案
一般都是rmi jms 等等5种解决方式,这里主要介绍rmi方式。
RMI 是java语言中jvm 和 jvm实现远程调用的方式。
RPC 也属于远程调用,rpc底层使用的socket,因为http协议底层使用的socket,所以大部分语言都支持socket,能够进行跨平台调用。
8 实现代码
①项目结构
②pom文件
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.itmayeidu</groupId> 5 <artifactId>springboot-ehcache</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 8 <parent> 9 <groupId>org.springframework.boot</groupId> 10 <artifactId>spring-boot-starter-parent</artifactId> 11 <version>2.0.0.RELEASE</version> 12 </parent> 13 <dependencies> 14 <!-- SpringBoot 对lombok 支持 --> 15 <dependency> 16 <groupId>org.projectlombok</groupId> 17 <artifactId>lombok</artifactId> 18 </dependency> 19 <!-- SpringBoot web 核心组件 --> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-web</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-tomcat</artifactId> 27 </dependency> 28 <!-- SpringBoot 外部tomcat支持 --> 29 <dependency> 30 <groupId>org.apache.tomcat.embed</groupId> 31 <artifactId>tomcat-embed-jasper</artifactId> 32 </dependency> 33 <!-- springboot-log4j --> 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-log4j</artifactId> 37 <version>1.3.8.RELEASE</version> 38 </dependency> 39 <!-- springboot-aop 技术 --> 40 <dependency> 41 <groupId>org.springframework.boot</groupId> 42 <artifactId>spring-boot-starter-aop</artifactId> 43 </dependency> 44 <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> 45 <dependency> 46 <groupId>commons-lang</groupId> 47 <artifactId>commons-lang</artifactId> 48 <version>2.6</version> 49 </dependency> 50 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> 51 <dependency> 52 <groupId>org.apache.httpcomponents</groupId> 53 <artifactId>httpclient</artifactId> 54 </dependency> 55 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> 56 <dependency> 57 <groupId>com.alibaba</groupId> 58 <artifactId>fastjson</artifactId> 59 <version>1.2.47</version> 60 </dependency> 61 <dependency> 62 <groupId>javax.servlet</groupId> 63 <artifactId>jstl</artifactId> 64 </dependency> 65 <dependency> 66 <groupId>taglibs</groupId> 67 <artifactId>standard</artifactId> 68 <version>1.1.2</version> 69 </dependency> 70 <!--开启 cache 缓存 --> 71 <dependency> 72 <groupId>org.springframework.boot</groupId> 73 <artifactId>spring-boot-starter-cache</artifactId> 74 </dependency> 75 <!-- ehcache缓存 --> 76 <dependency> 77 <groupId>net.sf.ehcache</groupId> 78 <artifactId>ehcache</artifactId> 79 <version>2.9.1</version><!--$NO-MVN-MAN-VER$ --> 80 </dependency> 81 <dependency> 82 <groupId>org.mybatis.spring.boot</groupId> 83 <artifactId>mybatis-spring-boot-starter</artifactId> 84 <version>1.1.1</version> 85 </dependency> 86 <!-- mysql 依赖 --> 87 <dependency> 88 <groupId>mysql</groupId> 89 <artifactId>mysql-connector-java</artifactId> 90 </dependency> 91 </dependencies> 92 </project>
③OrderController
package com.itmayiedu.api.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.itmayiedu.entity.Order; import com.itmayiedu.service.OrderService; @RestController public class OrderController { @Autowired private OrderService orderService; @Autowired private CacheManager cacheManager; @RequestMapping("/getOrder") public Order getOrder(String id) { Order user = orderService.getUser(id); return user; } @RequestMapping("order/remoKey") public void remoKey() { //删除指定cache 的指定key cacheManager.getCache("userCache").evict("1");; } }
package com.itmayiedu.mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import com.itmayiedu.entity.Order; public interface OrderMapper { @Select("SELECT * FROM `order` where id=#{id}") Order getOrderById(@Param("id") String id); }
package com.itmayiedu.entity; public class Order { private String id; private String order_name; private String order_no; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getOrder_name() { return order_name; } public void setOrder_name(String order_name) { this.order_name = order_name; } public String getOrder_no() { return order_no; } public void setOrder_no(String order_no) { this.order_no = order_no; } }
package com.itmayiedu.ehcache; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.stereotype.Component; @Component public class MapEhcaChe<K, V> { private Map<K, V> ehcaCheMap = new ConcurrentHashMap<K, V>(); public void put(K k, V value) { ehcaCheMap.put(k, value); } public V get(K k) { return ehcaCheMap.get(k); } public void remove(K k) { ehcaCheMap.remove(k); } }
以上是关于ehcache缓存的主要内容,如果未能解决你的问题,请参考以下文章