精华内容
下载资源
问答
  • CACHE
    千次阅读
    2022-04-07 14:06:31

     

    预备知识

    1.cache的产生背景

    在多体并行存储器中讲过,外部设备的优先级最高,这样就会导致CPU等待外部设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。

    为了避免CPU与I/O设备争抢访存,可在 CPU与主存之间加一个Cache。

    这样一来,如果外部设备正在和主存交换信息,CPU就可以不用等待,直接从Cache中取所需信息。当然,考生会提出质疑,Cache那么小,每次访问 CPU的数据都有吗?解释:

    2.局部性原理

    通过大量典型程序的分析,发现 CPU从主存取指令或取数据,在一定时间内,只是对主存局部地址区域的访问(如循环程序、一些常数)。

    于是人们就想到一个办法,将CPU近期需要的程序提前存放到Cache中。

    这样CPU只需访问Cache就可以得到所需要的数据了。

    一般Cache采用高速的SRAM制作(主存一般使用DRAM),其价格比主存高,容量远比主存小。

    补充:局部性原理一般有两种,即时间局部性原理和空间局部性原理。

    • 1)  时间局部性原理。如果某个数据或指令被使用,那么不久将可能再被使用。
    • 2)空间局部性原理。如果某个数据或指令被使用,那么附近数据也可能被使用。

    3.主存与Cache的编址

     

    前提:如果主存要和Cache

    更多相关内容
  • CACHE

    千次阅读 2020-10-21 20:45:48
    cache和主存的映射方式 cache行的行长和主存块大小一致。逻辑页面和物理内存块大小相等。 替换算法 RAND FIFO LRU LRU

    cache和主存的映射方式

    1. cache行的行长和主存块大小一致。逻辑页面和物理内存块大小相等。翻译:前提已知page frame(帧)和page(页)大小是一样的,这是物理内存和虚拟内存里的说法;在物理内存和cache里cache一行存主存一行的内容。
    2. 主存
      主存地址
      标记索引块内偏移地址
      cache地址
      有效位1位标志位数据
    3. 全相联映射:主存先到相联存储器的页目录表上查找主存块号(这是比较器),若有效位=1,去cache查对应的块号,cache的块内地址存的是数据吗?

    1.  
    2. 乐大

    3.  

     

    1.  

       

       

    https://blog.csdn.net/dongyanxia1000/article/details/53392315 

    替换算法 

     RAND

    FIFO 

     LRU

    LRU

    展开全文
  • 该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB I_Cache Cache替换策略: ...
  • SpringCache

    千次阅读 2022-03-17 11:34:33
    和org.springframework.cache.CacheManager 接口来统一不同的缓存技术; 并支持使用JCache(JSR-107)注解简化我们开发; Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache 接口下Spring 提供了...

    Spring 从3.1 开始定义了org.springframework.cache.Cache
    和org.springframework.cache.CacheManager 接口来统一不同的缓存技术
    并支持使用JCache(JSR-107)注解简化我们开发;

    Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache 接口下Spring 提供了各种xxxCache 的实现;
    如RedisCache , EhCacheCache , ConcurrentMapCache 等;

    每次调用需要缓存功能的方法时,Spring 会检查检查指定参数的指定的目标方法是否已
    经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓
    存结果后返回给用户。下次调用直接从缓存中获取。

    CacheManager 缓存管理器

    public interface CacheManager {
    
    	//根据缓存名字获取缓存
    	@Nullable
    	Cache getCache(String name);
    
    	//获取管理的所有缓存的名字
    	Collection<String> getCacheNames();
    
    }
    

    支持多种类型的缓存
    在这里插入图片描述

    整合SpringCache

    <!--   引入spring-boot-starter-cache     -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
    

    这里我们使用redis作为缓存

    <!--    引入redis    -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--   jedis不写版本springboot控制     -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
    

    配置spring-boot-starter-cache

    1.缓存的自动配置
    CacheProperties封装了配置文件中可以配置的属性

    @ConfigurationProperties(prefix = "spring.cache")
    org.springframework.boot.autoconfigure.cache.CacheProperties
    

    CacheConfiguration会根据缓存类型导入RedisCacheConfiguration

    RedisCacheConfiguration自动配好了缓存管理器

    @Bean
    	public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
    			ResourceLoader resourceLoader) {
    		RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory)
    				.cacheDefaults(determineConfiguration(resourceLoader.getClassLoader()));
    		List<String> cacheNames = this.cacheProperties.getCacheNames();
    		if (!cacheNames.isEmpty()) {
    			builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
    		}
    		return this.customizerInvoker.customize(builder.build());
    	}
    

    手动配置

    配置使用Redis作为缓存

      spring:
      	cache:
          #cache-names: 可以自动配置
          type: redis
    

    测试使用缓存

    常用注解
    在这里插入图片描述
    在这里插入图片描述

    1.开启缓存功能 @Cacheable({"…"})

    在启动类添加@EnableCaching 注解,不需要重复配Redis

    @EnableCaching 注解
    

    2.使用注解 就能完成缓存操作

    //每一个需要缓存的数据都需要指定要放到哪个名字的缓存,缓存的分区,按照业务类型分 
     @Cacheable({"categroy"})    //代表方法的结果需要缓存 ,如果缓存中有 方法都不用调用,如果缓存中没有,调用方法,将结果放入缓存
     @Override
     public List<CategoryEntity> getLevel1Categorys() {
         long l = System.currentTimeMillis();
         List<CategoryEntity> categoryEntityList = baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", 0));
         System.out.println("消耗时间:" + (System.currentTimeMillis() - l));
         return categoryEntityList;
     }
    

    使用@Cacheable 默认行为
    如果缓存中有缓存 方法都不用调用
    key值 自动生成
    缓存的Value值默认使用JDK序列化机制,将序列化后的数据存到Redis
    默认过期时间TTL -1 永不过去

    应该要指定缓存存活时间 在配置文件中修改

      cache:
        #cache-names: 可以自动配置
        type: redis
        redis:
          time-to-live: 3600000  #设置存活时间毫秒
          key-prefix: CACHE_    #key前缀 如果制定了前缀就用指定的前缀,如果没有就默认使用缓存的名字作为前缀
          use-key-prefix: true  # 是否使用前缀
          cache-null-values: true # 是否缓存控制 解决缓存穿透
    

    应该要指定缓存的Key 使用key属性 接收SpEL表达式

    @Cacheable(value = {"categroy"},key = "#root.method.name")
    
    @Cacheable(value = {"categroy"},key = "'name'")
    

    SpEL语法
    在这里插入图片描述

    将数据保存为JSON格式

    CacheConfiguration —> RedisCacheConfiguration —> 自动配置了RedisCacheManager —> 初始化所有的缓存 —> 每个缓存决定使用什么配置,配置有就用配置的,配置没有就用默认的(key的前缀等)—>想要修改配置只需要在容器中放一个RedisCacheConfiguration 即可 —> 这个容器就会应用到当前RedisCacheManager 管理的所有缓存分区中

    package cn.cloud.xmall.product.config;
    
    
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheConfiguration;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializationContext;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    /**
     * @Description: ···
     * @author: Freedom
     * @QQ: 1556507698
     * @date:2022/3/17 13:26
     */
    
    @EnableCaching
    @Configuration
    public class MyCacheConfig {
    
    
        @Bean
        RedisCacheConfiguration redisCacheConfiguration(){
    
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
    
            //config = config.entryTtl();
    
            //key的序列化
            config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
            //值的序列化
            config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
    
            return config;
        };
    
    }
    
    

    问题:
    配置文件中的东西没有用上
    原因 :
    使用我们自己的配置不会从配置文件中取出来配置

    package cn.cloud.xmall.product.config;
    
    
    import org.springframework.boot.autoconfigure.cache.CacheProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheConfiguration;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializationContext;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    /**
     * @Description: ···
     * @author: Freedom
     * @QQ: 1556507698
     * @date:2022/3/17 13:26
     */
    
    @EnableConfigurationProperties(CacheProperties.class)
    @Configuration
    @EnableCaching
    public class MyCacheConfig {
    
        // @Autowired
        // public CacheProperties cacheProperties;
    
        /**
         * 配置文件的配置没有用上
         * @return
         */
        @Bean
        public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
    
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
            // config = config.entryTtl();
            //设置Key的序列化方式
            config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
            //设置值的序列化方式
            config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
    
            CacheProperties.Redis redisProperties = cacheProperties.getRedis();
            //将配置文件中所有的配置都生效
            if (redisProperties.getTimeToLive() != null) {
                config = config.entryTtl(redisProperties.getTimeToLive());
            }
            if (redisProperties.getKeyPrefix() != null) {
                config = config.prefixKeysWith(redisProperties.getKeyPrefix());
            }
            if (!redisProperties.isCacheNullValues()) {
                config = config.disableCachingNullValues();
            }
            if (!redisProperties.isUseKeyPrefix()) {
                config = config.disableKeyPrefix();
            }
    
            return config;
        }
    
    }
    
    

    从缓存中删除数据 @CacheEvict 失效模式

     @CacheEvict(value = "category",key = "'getLevel1Categorys'")
    

    分区value和key必须相同才可以删除

    问题:
    如果一个修改需要删除两个缓存?如何删除?
    @CaChing 组合操作,同时进行多个缓存操作

        @Caching(evict = {
                @CacheEvict(value = "category",key = "'getLevel1Categorys'"),
                @CacheEvict(value = "category",key = "'getCatalogJson'")
        })
        @Transactional
        @Override
        public void updateCascade(CategoryEntity category) {
            this.updateById(category);
            //更新关联表
            categoryBrandRelationService.updateCategory(category.getCatId(), category.getName());
        }
    

    成功删除

    第二种方式:
    删除指定分区下所有的缓存,存储统一个类型的数据可以指定为同一个分区,分区名默认就是缓存前缀

    @CacheEvict(value = {"category"},allEntries = true)
    

    推荐使用@CaChing

    @CaChePut 双写模式使用此注解(解决分布式缓存一致性问题)

    Spring-Cache不足

    1. 读模式

    缓存穿透:查询一个null数据
    解决:缓存null数据,并设置短暂过期时间,
    cache-null-values: true # 是否缓存控制 解决缓存穿透, springcache解决方案

    缓存击穿:大量并发进来同时查询一个正好过期的数据
    解决:加锁 ???
    默认情况下是没有加锁的
    1.手写添加缓存方法使用Redisson作为分布式锁
    2.@Cacheable(value = {“categroy”},key = “#root.method.name”,sync = true),sync只有Cacheable有这个属性
    会进入加锁的方法

    缓存雪崩: 大量的key同时过期
    解决:添加随机时间,指定过期时间 ,time-to-live: 3600000 #设置存活时间毫秒

    1. 写模式 (缓存与数据库一致)

    读写加锁

    引入Canal,感知数据库更新去更新缓存数据

    读多写多直接去数据库查询

    常规数据的缓存(读多,写少,缓存一致性要求不高)就算没有锁,完全可以使用SpringCache, 但是要求数据高的特殊数据,即想要缓存提升他的速度,又想要缓存一致性,特殊设计,读写锁…Canal…一致性。常规数据只要有缓存的过期时间就可以满足需求了

    展开全文
  • ElasticSearch 查询需要占用 CPU、内存资源,在复杂业务场景,会出现慢查询,需要...Request Cache,全称是 Shard Request Cache,即分片级请求缓存。当对一个或多个索引发送搜索请求时,搜索请求首先会发送到ES集...

            ElasticSearch 查询需要占用 CPU、内存资源,在复杂业务场景,会出现慢查询,需要花费大量的时间。为了提高系统的性能,除了增加集群硬件配置这种成本高昂的开销外,还可以使用 ES 的缓存,下面我们就介绍几种 ES 中常用的缓存。

    一、Request cache:

    1、什么是 Request cache:

            Request Cache,全称是 Shard Request Cache,即分片级请求缓存。当对一个或多个索引发送搜索请求时,搜索请求首先会发送到ES集群中的某个节点,称之为协调节点;协调节点会把该搜索请求分发给其他节点并在相应分片上执行搜索操作,我们把分片上的执行结果称为“本地结果集”,之后,分片再将执行结果返回给协调节点;协调节点获得所有分片的本地结果集之后,合并成最终的结果并返回给客户端。

    By default, the requests cache will only cache the results of search requests where size=0, so it will not cache hits, but it will cache hits.total, aggregations, and suggestions.Most queries that use now (see Date Mathedit) cannot be cached.

            Request Cache 在每个分片上缓存了本地结果集,这使得频繁使用的搜索请求几乎立即返回结果。默认情况下只会缓存查询中参数 size=0 的搜索请求的结果,因此将不会缓存hits,但会缓存 hits.total,aggregations(聚合) 和 suggestions。所以,request cache 分片请求缓存非常适合日志用例场景,在这种情况下,数据不会在旧索引上更新,并且可以将常规聚合保留在高速缓存中以供重用。

    2、request cache 缓存的失效:

            ES 能够保证在使用与不使用 Request Cache 情况下的搜索结果一致,那 ES 是如何保证的呢?这就要通过 Request Cache 的失效机制来了解啦。

            Request Cache 缓存失效是自动的,当索引 refresh 时就会失效,也就是说在默认情况下, Request Cache 是每1秒钟失效一次,但需要注意的是,只有在分片的数据实际上发生了变化时,刷新分片缓存才会失效。也就是说当一个文档被索引 到 该文档变成Searchable的这段时间内,不管是否有请求命中缓存该文档都不会被返回。

            所以我们可以通过 index.refresh_interval 参数来设置 refresh 的刷新时间间隔,刷新间隔越长,缓存的数据越多,当缓存不够的时候,将使用LRU最近最少使用策略删除缓存数据。

            当然,我们也可以手动设置参数 indices.request.cache.expire 指定失效时间(单位为分钟),但是基本上我们没必要去这样做,因为缓存在每次索引 refresh 时都会自动失效。

            最后,我们也可以通过 API 手动清除 Request Cache,使用方式如下:

    curl -XPOST '索引的IP:端口/索引名/_cache/clear?request_cache=true'

    3、request cache 的使用与设置:

    3.1、request cache 的使用:

    默认情况下,Request Cache 是关闭的,我们可以在创建新的索引时启用,例如:

    curl -XPUT 服务器IP:端口/索引名 -d
    '{
      "settings": {
        "index.requests.cache.enable": true
      }
    }'

    也可以通过动态参数配置来进行设置:

    curl -XPUT 服务器IP:端口/索引名/_settings -d 
    '{ 
        "index.requests.cache.enable": true 
    }'

    开启缓存后,需要在搜索请求中加上 request_cache=true 参数,才能使查询请求被缓存,比如:

    curl -XGET '服务器IP:端口/索引名/_search?request_cache=true&pretty' -H 'Content-Type: application/json' -d
    '{
      "size": 0,
      "aggs": {
        "popular_colors": {
          "terms": {
            "field": "colors"
          }
        }
      }
    }'

    两个注意事项:

    (1)第一:参数 size:0 必须强制指定才能被缓存,否则请求是不会缓存的,即使手动的设置request_cache=true

    (2)第二:在使用 script 脚本执行查询时,由于脚本的执行结果是不确定的(比如使用 random 函数或使用了当前时间作为参数),一定要指定 request_cache=false 禁用 Request Cache 缓存。

    3.2、request cache 的设置:

    Request Cache 作用域为 Node,在 Node 中的 Shard 共享这个Cache空间。默认最大大小为 JVM堆内存的1%。可以使用以下命令在 config / elasticsearch.yml 文件中进行更改:

    indices.requests.cache.size: 1%

    Request Cache 是以查询的整个DSL语句做为key的,所以如果要命中缓存,那么查询生成的DSL一定要一样,即使修改了一个字符或者条件顺序,都不能利用缓存,需要重新生成Cache。

    3.3、request cache 大小的查看方式:

    GET /_stats/request_cache?human

    GET /_nodes/stats/indices/request_cache?human

    二、QueryCache:

    1、什么是 Query Cache:

            Query Cache,也称为 Filter Cache,就是对查询中包含的 Filter 过滤器的执行结果进行缓存,缓存在节点查询缓存中,以便快速查找。每个节点都有一个所有分片共享的查询缓存。当缓存空间存满时,使用 LRU 策略清理最近最少使用的查询结果,以腾出空间存放新结果数据。

    ES 在 5.1.1 版本中移除了 term query 的缓存,因为 term query 和 filter query 二者查询时间相差不多。

            默认情况下,节点查询缓存最多可容纳10000个查询,最多占总堆空间的10%,为了确定查询是否符合缓存条件,Elasticsearch 维护查询历史记录以跟踪事件的发生。但是,当 segment 的文档数量小于 10000 或者 小于分片文档总数的 3% 时,该查询是不会被缓存的。

            由于缓存是按段划分的,因此合并段可使缓存的查询无效,同时,只有对频繁访问的请求才会使用查询缓存,因为查询缓存是基于 bitmap 的,而建立 bitmap 的过程需要一定的时间。

    2、Query Cache 相关参数配置:

    (1)index.queries.cache.enabled:控制是否启用节点查询缓存,可以设置 true(默认) 或者 false。该设置只能在创建索引或者索引关闭(close)时设置:

    PUT my_index_01{  "settings": {    "index.queries.cache.enabled": false  }}

    (2)indices.queries.cache.size:设置查询缓存的对堆内存大小,默认10%,可设置成百分比,也可设置成具体值,如 512m。

    三、Fielddata Cache:

    1、什么是 Fielddata Cache:

            ES 的快速搜索特性主要依赖于倒排索引这种数据结构,但如果仅仅依靠倒排索引是很难在查询中做到排序和统计的,因为它并不像关系型数据库那样采用“列式存储”,而是基于一个 “term” 到 “document” 的倒排。这种情况下,如果需要做数据聚合和排序,就需要将倒排索引的数据读取出来,重新组织成一个数组缓存,也就是从倒排索引中生成出来的要自己维护这段Cache, 之后才能够高效的做排序和聚合计算。

            为了解决上面的问题,就出现了 Fielddata Cache 字段数据缓存,它主要用于字段的排序和聚合,将所有的字段值加载到内存中,以便提供基于文档快速访问这些值。当第一次在某个分词的字段上执行聚合、排序或通过脚本访问的时候就会触发该字段 Fielddata Cache 的加载,这种缓存是 segment 级别的,当有新的 segment 打开时旧的缓存不会重新加载,而是直接把新的 segment 对应的 Fielddata Cache 加载到内存。

    因为是基于 segment 级别的,所以 Fielddata Cache 失效和 Node Query Cache 失效机制相同,当 segment 被合并后,才会失效。

            Fielddata Cache 的构建成本很高,一旦 Fielddata 被加载到内存,那么在该 Fielddata Cache 对应的 Segment 生命周期范围内都会驻留在堆内存中,也就是说当触发段合并时会导致合并后的更大段的 Fielddata Cache 加载。同时,由于 Fielddata Cache 默认缓存大小是无限的,这将导致缓存高速增长直到达到 field data 断路器设置的限制。特别是当加载“高基数”的分词字段时(那些分词后存在大量不同词的字段),针对这种字段的聚合排序其实是非常没有意义的,我们更多的要去考虑是否能用 not_analyzed 代替。如果设置了 fielddata cache 大小限制,缓存就会清除缓存中最新最少更新的数据。此设置可以避开 field data  断路器限制,但需要根据需要重建缓存;如果达到 field data 断路器限制,Elasticsearch 底层将阻止进一步增加缓存大小的请求。

            由于 Fielddata Cache 是存放在堆内存中,在海量数据聚合的时候,生成的这些 fielddata 可能堆内存放不下,从而引起性能问题,甚至JVM OOM。所以 Elasticsearch2.0 开始,在非 text 字段开启 doc_values,基于 doc_values 做排序和聚合,可以减少对 FielddataCache 的依赖,减少内存消耗,因为 doc_values 在使用时不需要全部载入内存,可以减少节点 OOM 的概率。由于 doc_values 的特性性能上也不会有多少损失,doc_values 是一种正向索引结构以顺序预读的方式进行获取,所以随机获取就很慢了。在 5.0 开始,text 字段默认关闭了 Fielddata 功能, Fielddata Cache 应当只用于 global ordinals。

    对 doc_values 的介绍与使用感兴趣的读者可以移步这篇文章:https://blog.csdn.net/a745233700/article/details/117915118

    2、 Fielddata Cache 参数配置:

    (1)开启与关闭 Fielddate Cache:

    默认情况下Fielddate Cache是默认开启的,我们可以通过下面的设置来关闭,关闭后就无法对分词字段执行聚合、排序操作了。

    PUT my_index
    {
      "mappings": {
        "my_type": {
          "properties": {
            "text": {
              "type": "string",
              "fielddata": {
                "format": "disabled" 
              }
            }
          }
        }
      }
    }

    (2)indices.fielddata.cache.size:设置字段数据缓存的最大值,通过百分比 30% 或者具体值 12GB 来设置,默认无限制。

    (3)indices.breaker.fielddata.limit:此参数设置 Fielddata 断路器限制大小(公式:预计算内存 + 现有内存 <= 断路器设置内存限制),默认是60%JVM堆内存,当查询尝试加载更多数据到内存时会抛异常(以此来阻止JVM OOM发生)

    (4)indices.breaker.fielddata.overhead:一个常数表示内存预估值系数,默认1.03,比如预计算加载100M数据,那么100*1.03=103M会用103M作为参数计算是否超过断路器设置的最大值。

    参考文章:Elasticsearch2.x 三种缓存介绍:Query Cache、Request Cache、Fielddata Cache_飞奔的代码-CSDN博客_es query_cache

    展开全文
  • cache主存映射一、三种映射方式1. 全相联映射2. 直接映射3. 组相联映射二、cache容量计算1. 先计算cache行标记项位数2. 再计算cache块位数3. 最后计算cache总容量三、cache写策略1. 写命中:(1)全写法 Write ...
  • Cache原理简介及cache miss

    千次阅读 2021-05-28 10:39:36
    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存。 CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss)。 CPU访问它的速度介于寄存器与内存之间(数量级的差别...
  • Cache篇】Linux中的Cache

    千次阅读 2022-05-02 20:18:11
    ​ 博主主页:MuggleZero 《ARMv8/v9架构初学者指南...CPU的cache时线性排列的,也就是说对于32字节的cache line是与32字节的地址对齐的。 cache在Linux内核中有着广泛且巧妙的应用,接下来我们看看都有哪些妙用。 ​
  • nginx cache 总结

    千次阅读 2022-04-23 18:31:45
    nginx 可以通过regex 对指定类型或者path的文件进行cache 可以根据upstream http code进行不同时间cache nginx plus 支持通过curl 进行purge 可以通过开源module 实现plus的purge 测试dockerfile FROM centos:...
  • Cache的基本原理

    千次阅读 多人点赞 2020-09-07 23:02:45
    对于没有接触过底层技术的朋友来说,或许从未听说过cache。毕竟cache的存在对程序员来说是透明的。在接触cache之前,先为你准备段code分析: int arr[10][128]; for (i = 0; i < 10; i++) for (j = 0; j <...
  • STM32H7---高速缓存Cache(一)

    千次阅读 2022-03-22 15:58:25
    Cache_Enable(); //打开L1-Cache //使能CPU的L1-Cache void Cache_Enable(void) { SCB_EnableICache();//使能I-Cache SCB_EnableDCache();//使能D-Cache SCB->CACR|=1<<2; //强制D-Cache透写,如不...
  • 宋宝华:深入理解cache对写好代码至关重要

    千次阅读 多人点赞 2021-07-08 00:29:28
    There are only two hard things in Computer Science: cache invalidation and naming things.-- P...
  • CPU的cache工作原理

    千次阅读 2021-04-05 14:43:52
    CPU的cache工作原理 博主微信:flm13724054952,不懂的有疑惑的也可以加微信咨询,欢迎大家前来指教共同探讨,谢谢!博主最近的工作是CPU集成设计,所以接下来的篇章将以CPU的学习讲解为主。最后再打个小广告,欢迎...
  • Spring之Cache缓存详解

    千次阅读 2021-09-19 16:22:42
    Spring的Cache缓存类似于java的JDBC。是定义了一套规范。第三方缓存需要实现这套规范,才能通过Spring API使用缓存功能。这套规范的核心接口是CacheManager和Cache。其中,CacheMananger是获取Cache的入口。Cache是...
  • 文章目录1、cache的应用——什么时候需要刷cache 1、cache的应用——什么时候需要刷cache (1)、cpu在往内存(src地址)写数据时,cache中会缓存这些数据,并没有立即同步到DDR, 只有该地址在cache中被换出去时候,才会...
  • 计算机缓存Cache以及Cache Line详解

    千次阅读 2019-12-16 20:32:54
    转载: 计算机缓存Cache以及Cache Line详解 - ...L1,L2,L3 Cache究竟在哪里? - 老狼的文章 - 知乎 https://zhuanlan.zhihu.com/p/31422201 Cache是怎么组织和工作的? - 老狼的文章 - 知乎 https://zhuanlan...
  • 我们都知道,根据现代计算机存储介质的不同,我们引入了Cache 这个概念, Cache 在计算机芯片, 各级内存,硬盘,乃至于各种软件设计中都是非常常见的,Cache 使用的好,能够合理分层,我们能解决百分之八十以上的...
  • cache缓存读写策略

    千次阅读 2020-07-18 22:43:27
    cache(静态RAM)可解决cpu与主存(DRAM)之间速度不匹配问题。 依据程序访问的局部性原理(时间局部性和空间局部性),cache与主存数据交换单位按块进行。 cache工作原理: 把主存与cache分为大小相等的块,主存有M块...
  • MySQL binlog cache详解

    千次阅读 2021-01-27 16:52:38
    最近在线上遇到一个突发情况:某客户出现了超大事务,该事务运行时占据的磁盘空间超过800GB,但du -sh时...本文会涉及到如下几个概念:binlog cache:它是用于缓存binlog event的内存,大小由binlog_cache_size控制b...
  • com.alicp.jetcache.CacheConfigException: no remote cache builder: default的问题 >>> 见黄色字体 查阅搜索,并给自己的整理记录: 阿里开源项目Jetcache:https://github.com/alibaba/jetcache WIKI...
  • kube-scheduler的Cache解析

    万次阅读 2021-01-31 17:55:41
    前言 在阅读本文之前,建议从《kube-scheduler的SchedulingQueue解析》开始,因为笔者是以调度队列为...而本文分析的Cache中都是已经调度的Pod(更准确的说。。。),Cache是kube-scheduler的调度状态。 Cache //
  • 计组实验5:cache大小测量与 cache line 大小测量

    千次阅读 多人点赞 2020-12-28 20:24:37
    今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 ...
  • Cache的基本原理
  • Cache的相关知识(二)

    千次阅读 2021-01-24 22:03:30
    如果在AArch32异常级别上实现了混合字节序支持,则字节序由PSTATE.E控制。...主要的原因是CPU的速度和内存的速度之间严重不匹配,Cpu处理速度极快,而访问内存慢,cache在这个背景下就诞生了。设计人员通过在CPU.
  • Java Cache 入门

    万次阅读 2019-04-06 11:31:13
    Cache, String> cache = cacheManager.createCache("someCache", configuration); CompleteConfiguration, String> completeConfiguration = cache.getConfiguration(CompleteConfiguration.class); Eh107...
  • SpringCache整合Redis实现项目缓存解决方案

    千次阅读 多人点赞 2021-12-13 15:39:00
    明明我们项目中使用最多的缓存技术就是Redis,用Redis就完全就可以搞定缓存的问题了,为什么还有一个SpringCache,以及SpringCache和Redis之间的区别。 一、 为什么要使用缓存 缓存是将数据直接存入内容中,读取效率...
  • 阿里开源 JetCache 缓存框架介绍使用

    千次阅读 2021-08-29 21:32:45
    一、JetCache JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于...
  • CPU Cache 机制以及 Cache miss

    千次阅读 2019-06-11 11:09:16
    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存。 CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss)。 CPU访问它的速度介于寄存器与内存之间(数量级的...
  • Cache的基本原理以及简单操作

    千次阅读 多人点赞 2020-04-18 15:52:25
    对于没有接触过底层技术的朋友来说,或许从未听说过cache。毕竟cache的存在对程序员来说是透明的。在接触cache之前,先为你准备段code分析。 int arr[10][128]; for (i = 0; i < 10; i++) for (j = 0; j <...
  • Java 缓存工具类 Cache

    千次阅读 2022-04-07 22:54:43
    Java 缓存工具类 Cache工具类定义

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,955,874
精华内容 782,349
关键字:

CACHE