首页 > 编程知识 正文

简述多级flume架构,多级缓存架构

时间:2023-05-04 22:34:44 阅读:236458 作者:4579

j2cache是OSChina目前正在使用的两级缓存框架。

j2cache的两级缓存结构:

L1: 进程内缓存 caffeine/ehcacheL2: 集中式缓存 Redis/Memcached

j2cache其实并不是在重复造轮子,而是作资源整合,即将Ehcache、Caffeine、redis、Spring Cache等进行整合。

由于大量的缓存读取会导致L2的网络成为整个系统的瓶颈,因此L1的目标是降低对L2的读取次数。该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的ehcache缓存数据丢失。

j2cache从1.3.0版本开始支持JGroups和Redis Pub/Sub两种方式进行缓存事件的通知。

数据读取顺序 -> L1 -> L2 -> DB

j2cache入门案例

第一步:创建maven工程j2cache_demo并配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> </parent> <groupId>cn.itcast</groupId> <artifactId>j2cache_demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-spring-boot2-starter</artifactId> <version>2.8.0-release</version> </dependency> <dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-core</artifactId> <version>2.8.0-release</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies></project>

第二步:创建application.yml

server: port: 9000# redis 通用配置, 不同的环境,需要配置不同的链接信息,# 只需要将这段信息复制到具体环境的配置文件中进行修改即可# 如:复制到pd-auth-server-dev.yml中将数据库名和ip改掉myCache: redis: ip: 127.0.0.1 port: 6379 password: database: 0spring: cache: type: GENERIC redis: host: ${myCache.redis.ip} password: ${myCache.redis.password} port: ${myCache.redis.port} database: ${myCache.redis.database}j2cache: # config-location: /j2cache.properties open-spring-cache: true cache-clean-mode: passive allow-null-values: true redis-client: lettuce #指定redis客户端使用lettuce,也可以使用Jedis l2-cache-open: true #开启二级缓存 broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy # broadcast: jgroups L1: #指定一级缓存提供者为caffeine provider_class: caffeine L2: #指定二级缓存提供者为redis provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider config_section: lettuce sync_ttl_to_redis: true default_cache_null_object: false serialization: fstcaffeine: properties: /caffeine.properties # 这个配置文件需要放在项目中lettuce: mode: single namespace: storage: generic channel: j2cache scheme: redis hosts: ${myCache.redis.ip}:${pinda.redis.port} password: ${myCache.redis.password} database: ${myCache.redis.database} sentinelMasterId: maxTotal: 100 maxIdle: 10 minIdle: 10 timeout: 10000

第三步:创建/resources/caffeine.properties文件

default=2000, 2hrx=50, 2h @RestController@RequestMapping("/cache")public class MyController { private String key = "myKey"; private String region="rx"; @Autowired private CacheChannel cacheChannel; @GetMapping("/getInfos") public List<String> getInfos(){ CacheObject cacheObject = cacheChannel.get(region, key); if(cacheObject.getValue() == null){ //缓存中没有找到,查询数据库获得 List<String> data = new ArrayList<String>(); data.add("info1"); data.add("info2"); //放入缓存 cacheChannel.set(region,key,data); return data; } return (List<String>) cacheObject.getValue(); } //清理指定缓存 @GetMapping("/evict") public String evict(){ cacheChannel.evict(region,key); return "evict success"; } //检测存在那级缓存 @GetMapping("/check") public String check(){ int check = cacheChannel.check(region, key); return "level:" + check; } //检测缓存数据是否存在 @GetMapping("/exists") public String exists(){ boolean exists = cacheChannel.exists(region, key); return "exists:" + exists; } //清理指定区域的缓存 @GetMapping("/clear") public String clear(){ cacheChannel.clear(region); return "clear success"; }}

第五步:创建启动类

@SpringBootApplicationpublic class J2CacheApp { public static void main(String[] args) { SpringApplication.run(J2CacheApp.class,args); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。