Spark 2.0 源码分析笔记,某些实现可能与其他版本有所出入 这篇文章前半部分我们对直接在 Block 存取发挥重要作用的类进行介绍,主要是 DiskBlockManager、MemoryStore、DiskStore...---- DiskStore DiskStore 用来将 block 数据存储至磁盘,是直接的磁盘文件操作者。...Boolean:查询磁盘上是否包含某个 block id 的数据 一个删方法 remove(blockId: BlockId): Boolean:删除磁盘上某个 block id 的数据 需要说明的是,DiskStore...它的实现比 DiskStore 稍复杂,我们先来看看主要成员 先说明 MemoryEntry: private sealed trait MemoryEntry[T] { def size: Long...blockId 指定的 block 数据 clear(): Unit:清除 MemoryStore 中存储的所有 blocks 数据 从上面描述的 MemoryStore 的主要方法来看,其功能和 DiskStore
前言 在上一篇文章中,我们认识了Spark管理磁盘块的组件DiskBlockManager,本文接着来看真正负责磁盘存储的组件DiskStore,以及与它相关的BlockData。...磁盘存储DiskStore 构造方法与属性成员 代码#28.1 - o.a.s.storage.DiskStore类的构造方法与属性成员 private[spark] class DiskStore(...磁盘块数据DiskBlockData 这个类是定义在DiskStore下方的私有类,比较短,因此直接全贴在下面。...总结 本文研究了Spark磁盘存储类DiskStore的具体实现,主要是写入块/字节以及读取字节的方法。...另外,DiskStore读取的字节会用BlockData来封装,因此也顺便了解了一下DiskBlockData的一点细节。
当然,即使是 Redis 本身提供的,我们也可以选择用还是不用,如果两种都不用的化,Redis 就和 memcache 差不多了。...对于 RDB 方式,redis 会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能。...所以,redis 还提供了另一种持久化方式,那就是 AOF。...1-3)、虚拟内存(vm) diskstore 方式是作者放弃了虚拟内存方式后选择的一种新的实现方式,也就是传统的 B-tree 的方式,目前仍在实验阶段,后续是否可用我们可以拭目以待。...1-4)、Diskstore 方式 diskstore 方式是作者放弃了虚拟内存方式后选择的一种新的实现方式,也就是传统的 B-tree 的方式,目前仍在实验阶段,后续是否可用我们可以拭目以待。
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场景下...和 Spring Cache + Redis 相比,Spring Cache + Ehcache 主要是配置有所差异,具体的用法是一模一样的。我们来看下使用步骤。...dependency> 添加 Ehcache 配置 在 resources 目录下,添加 ehcache 的配置文件 ehcache.xml ,文件内容如下: <diskStore...diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。...diskStore 则表示临时缓存的硬盘目录。
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场景下... 添加 Ehcache 配置 在 resources 目录下,添加 ehcache 的配置文件 ehcache.xml ,文件内容如下: <diskStore...diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。...diskStore 则表示临时缓存的硬盘目录。...相信读完本文,大家对于 Redis + Spring Cache 的用法会有更深的认识。
应用场景: Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一,比如 twitter 的关注列表,粉丝列表等都可以用 Redis 的 list 结构来实现,比较好理解,这里不再重复...Redis 的持久化机制 Redis 由于支持非常丰富的内存数据结构类型,如何把这些复杂的内存组织方式持久化到磁盘上是一个难题,所以 Redis 的持久化方式与传统数据库的方式有比较多的差别,Redis...一共支持四种持久化方式,分别是: - 定时快照方式(snapshot) - 基于语句追加文件的方式(aof) - 虚拟内存(vm) - Diskstore 方式 在设计思路上,前两种是基于全部数据都在内存中...diskstore 方式: diskstore 方式是作者放弃了虚拟内存方式后选择的一种新的实现方式,也就是传统的 B-tree 的方式,目前仍在实验阶段,后续是否可用我们可以拭目以待。...如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及 diskstore 方式。 4.
说到缓存,大家可能直接印象就是Redis,方便好用。但是Redis是通过网络传输的,所以当数据库大的时候Redis的压力就太大了,这时候我们就需要在本地内存中建立缓存。...在使用EHCache时,需要在工程根目录里配置ehcache.xml,如果想通过自己手动控制缓存添加和释放就像redis那样操作,可以写一个EHCacheUtil类来操作。...-- --> <defaultCache maxElementsInMemory...的Key * @param value 类似redis的value,value可以是任何对象、数据类型,比如person,map,list等 */ public static...(String cachename,Serializable key){ manager.getCache(cachename).remove(key); } } 实际操作很像redis
但是对于一些小规模的应用,额外引入了redis服务,增加了运维的成本。 所以,比如我们自己开发一个小博客,自己的服务器又没有很多的资源独立部署redis服务,用EHCache作为缓存是比较好的选择。...如果是企业级用户量,使用redis独立部署的服务作为缓存是更好的选择。...config: classpath:/ehcache.xml 在 resources 目录下,添加 ehcache 的配置文件 ehcache.xml ,文件内容如下: <diskStore...diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。...diskStore 则表示临时缓存的硬盘目录。
-- diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。...The default value is false.diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。...作为缓存技术 首先,pom加入redis依赖: <!...=redis 然后,根据自己的需要配置redis的序列化策略,也可以采用默认的策略,看自己的需要了,不配置就是默认的jdk序列化。...我是配置了下redis的key和value的序列化,方便查看redis数据。
在SpringBoot中Shiro缓存使用Redis、Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器。...让shiro引用 本文是建立在你是使用这shiro基础之上的补充内容 第一种:Redis缓存,将数据存储到redis 并且开启session存入redis中。...org.springframework.boot spring-boot-starter-data-redis...> <!...diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
添加 Ehcache 配置: 在src/main/resources 目录下,创建配置文件ehcache.xml ,内容如下: <diskStore...timeToLiveSeconds="600" overflowToDisk="true"> 参数含义: diskStore...HazelcastCacheManager 使用Hazelcast作为缓存技术 JCacheCacheManager 使用JCache标准的实现作为缓存技术,如Apache Commons JCS RedisCacheManager 使用Redis...作为缓存技术 CaffeineCacheManager 使用Caffeine作为缓存技术 Spring Boot 为我们预留接口扩展,方便我们自动配置 EhCache、Redis、Guava、ConcurrentMap
Spark存储系统提供了两种存储抽象:MemoryStore和DiskStore。BlockManager正是利用它们来分别管理数据在内存和磁盘中的存取。...DiskStore DiskStore是BlockStore的另一个实现类,负责管理磁盘数据。...简单的说,DiskStore就是通过DiskBlockManager来实现Block和相应磁盘文件的映射关系,从而将Block存储到磁盘的文件中。...下面是整体DiskStore的类实现: private[spark] class DiskStore( conf: SparkConf, diskManager: DiskBlockManager...借用吴磊老师的一句话:DiskStore中数据的存取本质上就是字节序列与磁盘文件之间的转换,它通过putBytes方法把字节序列存入磁盘文件,再通过getBytes方法将文件内容转换为数据块。
Could not load net.sf.ehcache.store.disk.DiskStore$KeySet....org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 6 at net.sf.ehcache.store.disk.DiskStore.keySet...(DiskStore.java:521) 7 at net.sf.ehcache.store.disk.DiskStorageFactory$DiskExpiryTask.run(DiskStorageFactory.java
从名字我们就能看出来,MemoryStore 用于存储内存中的数据块,而 DiskStore 则用来存储磁盘中的数据块。...说完“在哪儿”(Where)存,咱们再来说说不同的数据形态以怎样的形式存储于 MemoryStore 和 DiskStore。...仓库类比之 MemoryStore 与 DiskStore 得益于临时储物仓库(MemoryStore)和专用仓储基地(DiskStore),斯巴克的各个分公司暂时解决了东西存在哪儿的问题,不过,光有仓库也不行啊...DiskStore 中数据的存与取 说来说去又说回了 DiskStore,DiskStore 中的数据存取相对直截了当一些,有 DiskBlockManager 这个“管家”协助维护 Block 与磁盘文件的对应关系...,DiskStore 并不需要过多的抽象来封装读写逻辑。
缓存技术 1 为什么要使用缓存 在上一次课redis入门的过程中我们讲过随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库 上都出现了性能问题,web程序不再仅仅关注在功能上,同时也开始追求性能...2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> <diskStore...diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个 Cache都应该有自己的一个缓冲区。...id); 1.2 @CachePut 每次都需要执行方法并将对象缓存到缓存空间,@Cacheable 的key 要和 @CachePut 的key 一致,类 似于更新缓存 将重新查询到的数据 缓存到redis...因为我们前面在RedisConfig配置类中配置了使用 Jackson的序列化对象,将对象转换为JSON保存在Redis中。
基本概念 DiskStore,由多个DiskFile组成,每一个DiskFile就是一个磁盘文件。...ImmutableMemstore执行完flush操作后,就会生成一个新的DiskFile,存放到DiskStore中....为了有效控制DiskStore中的DiskFile个数,我们为MiniBase设计了Compaction策略。...目前的Compaction策略非常简单——当DiskStore的DiskFile数量超过一个阈值时,就把所有的DiskFile进行Compact,最终合并成一个DiskFile。...我们需要从多个有序集合中读取数据: MemStore MutableMemstore:kvMap ImmutableMemstore:snapshot DiskStore:多个DiskFile 在Scan
-- 磁盘缓存位置 --> <!...默认值是false diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。...默认为 LRU(最近最少使用),其他策略有 FIFO(先进先出),LFU(较少使用) application.properties : # 缓存类型(ehcache、redis) spring.cache.type
dynamicConfig="true" maxBytesLocalHeap="800M" maxBytesLocalDisk="200G"> <diskStore...diskStore:指定数据存储位置,可指定磁盘中的文件夹位置 defaultCache: 默认的管理策略 以下属性是必须的 name: Cache的名称,必须是唯一的,ehcache会把这个cache...diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。
-- 本地缓存--> <cacheManagerPeerProviderFactory...总之,分布式集群架构,建议使用Redis或者Memcache缓存实现。 方式二:p2p方式 其实就是每个节点和其他n-1个节点都建立TCP的P2P PEER。
--diskStore:缓存数据持久化的目录 地址 --> diskStore
领取专属 10元无门槛券
手把手带您无忧上云