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缓存的主要内容,如果未能解决你的问题,请参考以下文章

Ehcache缓存框架详解

Ehcache缓存框架具体解释

springmvc结合ehcache实现共享对象缓存

ehcache java 对象缓存怎么实现

ssm+ehcache ssm简单整合ehcache缓存

java ehcache