当前位置: 首页 > news >正文

武汉网站建设费用品牌营销咨询公司

武汉网站建设费用,品牌营销咨询公司,两学一做党员考试网站,网站的前期调研怎么做缓存的放置时间和删除时间是指缓存中存储的数据的生命周期。这两个时间点非常重要,因为它们决定了缓存数据的有效期和何时应该从缓存中删除。 缓存的放置时间(Cache Put Time):这是指数据首次放入缓存的时间点。当数据被放入缓存时…

缓存的放置时间和删除时间是指缓存中存储的数据的生命周期。这两个时间点非常重要,因为它们决定了缓存数据的有效期和何时应该从缓存中删除。

  1. 缓存的放置时间(Cache Put Time):这是指数据首次放入缓存的时间点。当数据被放入缓存时,通常会记录下它的放置时间。这个时间点通常用于计算缓存数据的有效期,以便在数据过期后进行更新或重新获取。

  2. 缓存的删除时间(Cache Expiry Time):这是指缓存数据的有效期截止时间点。缓存数据在这个时间点之后被认为过期,应该从缓存中删除或刷新。删除时间通常是根据放置时间和缓存策略来计算的,不同的缓存策略(如LRU、TTL等)会影响删除时间的确定。

以下是一些常见的缓存管理策略和相关概念:

  • Time-to-Live(TTL):TTL 是指缓存数据被放置后允许存在的时间长度。一旦TTL时间到期,缓存数据将被认为过期,应该被删除。TTL通常与缓存的放置时间相关,例如,一个缓存项可以有一个TTL为60秒,表示数据将在60秒后过期。

  • LRU(Least Recently Used):LRU是一种基于访问顺序的缓存策略。当缓存空间不足时,系统会删除最近最少使用的缓存项。LRU不关心缓存项的时间戳,只关注访问的频率和顺序。

  • LFU(Least Frequently Used):LFU是一种基于访问频率的缓存策略。它会删除访问频率最低的缓存项,无论访问时间是何时。

  • Cache Eviction(缓存淘汰):这是指根据缓存策略从缓存中删除过期或不再需要的数据项的过程。淘汰过程根据策略和时间来计算缓存项的删除时间。

具体的缓存管理实现和删除时间的计算方式取决于使用的缓存库或框架。一般来说,你可以配置缓存的TTL或使用默认的淘汰策略来管理缓存中数据的生命周期,以确保缓存数据的有效性和性能。

当涉及到Java语言中的缓存管理时,通常会使用各种库和框架,最常见的包括:

  1. Java Caching API (javax.cache):Java Caching API 是 Java SE 8 的一部分,提供了一种标准的缓存管理方式。它定义了一套缓存管理接口和注解,允许开发人员在应用程序中使用不同的缓存提供程序,如Ehcache、Caffeine等。使用Java Caching API,你可以轻松地创建、配置和管理缓存,以及设置缓存的过期时间。

  2. Ehcache:Ehcache 是一个广泛使用的开源缓存库,它提供了灵活的缓存管理功能,包括缓存的放置、过期策略、磁盘持久化等。你可以使用 Ehcache 来创建本地内存缓存或分布式缓存。

  3. Caffeine:Caffeine 是一个高性能的本地内存缓存库,特别适用于需要快速访问和低延迟的应用程序。它提供了各种缓存策略,包括定时过期、基于大小的过期等。

  4. Guava Cache:Guava Cache 是 Google Guava 库的一部分,提供了简单而强大的本地内存缓存实现。它支持缓存的最大大小、定时过期、基于引用的缓存、监听器等功能。

下面是一个使用Guava Cache的Java示例,演示了如何创建一个本地内存缓存并设置缓存的过期时间:

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;import java.util.concurrent.TimeUnit;public class CacheExample {public static void main(String[] args) {// 创建一个Guava Cache实例Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(100) // 设置缓存最大大小.expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存项在写入后10分钟过期.build();// 向缓存中放置数据cache.put("key1", "value1");// 从缓存中获取数据String value = cache.getIfPresent("key1");System.out.println("Value for key1: " + value);// 等待一段时间,以使缓存项过期try {Thread.sleep(60000); // 等待1分钟} catch (InterruptedException e) {e.printStackTrace();}// 尝试获取过期的数据value = cache.getIfPresent("key1");System.out.println("Value for key1 after expiration: " + value);}
}

上面的Java示例演示了如何使用Guava Cache创建一个本地内存缓存,并设置缓存项的过期时间。让我们来分析示例中的操作和结果:

  1. 创建缓存实例:通过使用CacheBuilder类,我们创建了一个Guava Cache实例,设置了最大缓存大小为100个项,并且定义了缓存项的过期时间为10分钟。这意味着缓存中的项在10分钟后会过期。

  2. 放置数据:我们使用put方法将一个键值对("key1", "value1")放置到缓存中。

  3. 获取数据:我们使用getIfPresent方法从缓存中获取键为"key1"的值,并打印出来。在这个示例中,由于数据被刚刚放置到缓存中,所以我们可以成功获取到值,输出为"Value for key1: value1"。

  4. 等待过期:接下来,我们通过让程序休眠1分钟,模拟了过去一段时间。在这1分钟内,缓存中的数据将保持不变。

  5. 过期数据:在休眠结束后,我们再次尝试获取键为"key1"的值。这一次,由于缓存项的过期时间已经达到,我们无法再获取到它。因此,输出为"Value for key1 after expiration: null",表示数据已经过期并且不再可用。

这个示例演示了如何使用Guava Cache管理本地内存缓存,并设置缓存项的过期时间。这对于需要控制数据存储在内存中的时间以减少内存占用或确保数据的新鲜性非常有用。不同的应用场景可能需要不同的缓存策略,Guava Cache以及其他缓存库提供了丰富的选项来满足这些需求。

在这个示例中,我们使用了Guava Cache创建了一个本地内存缓存,设置了最大大小和缓存项的过期时间。我们放置了一个键值对到缓存中,然后在一段时间后尝试获取它,验证了过期策略的功能。

不同的缓存库和框架提供了各种各样的功能和配置选项,可以根据应用程序的需求选择适合的缓存解决方案。

三级缓存:CreateBeanInstance之后:addSingletonFactory

二级缓存:第一次从三级缓存确定对象是代理对象还是不同对象的时候,同时删除三级缓存getSingleton

一级缓存:生成完整对象之后放到一级缓存,删除二三级缓存:addSingleton

以下是一个使用Java示例代码,演示如何在Java中使用 java.util.HashMap 实现具有放置时间和删除时间的缓存概念。我们将自己管理缓存项的过期时间。

import java.util.HashMap;
import java.util.Map;public class Cache<K, V> {private final Map<K, CacheEntry<V>> cache = new HashMap<>();private final long defaultTtl; // 默认的过期时间(以毫秒为单位)public Cache(long defaultTtl) {this.defaultTtl = defaultTtl;}public void put(K key, V value) {put(key, value, defaultTtl);}public void put(K key, V value, long ttl) {long expirationTime = System.currentTimeMillis() + ttl;cache.put(key, new CacheEntry<>(value, expirationTime));}public V get(K key) {CacheEntry<V> entry = cache.get(key);if (entry != null && entry.isNotExpired()) {return entry.getValue();} else {cache.remove(key);return null;}}private static class CacheEntry<V> {private final V value;private final long expirationTime;CacheEntry(V value, long expirationTime) {this.value = value;this.expirationTime = expirationTime;}boolean isNotExpired() {return System.currentTimeMillis() <= expirationTime;}V getValue() {return value;}}public static void main(String[] args) {Cache<String, String> cache = new Cache<>(60000); // 设置默认过期时间为60秒cache.put("key1", "value1");cache.put("key2", "value2", 30000); // 自定义过期时间为30秒System.out.println("Value for key1: " + cache.get("key1")); // 输出 "value1"System.out.println("Value for key2: " + cache.get("key2")); // 输出 "value2"// 等待一段时间,让部分数据过期try {Thread.sleep(35000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Value for key1: " + cache.get("key1")); // 输出 null,数据已过期System.out.println("Value for key2: " + cache.get("key2")); // 输出 null,数据已过期}
}

在上述示例中,我们创建了一个简单的泛型缓存类 Cache,它允许存储键值对并为每个缓存项设置过期时间。我们使用 java.util.HashMap 存储缓存项,并在获取数据时检查过期时间以确保数据有效性。当数据过期时,我们从缓存中删除它。最后,我们在 main 方法中演示了如何使用这个自定义缓存类。

当你运行上述Java示例代码时,根据缓存项的过期时间和休眠时间,你将获得以下输出结果:

Value for key1: value1
Value for key2: value2
Value for key1: null
Value for key2: null

解释一下这些输出结果:

  1. 首先,我们将"key1"和"key2"存储在缓存中,并设置了它们的过期时间。然后,我们通过 cache.get("key1")cache.get("key2") 获取它们的值,因为它们都在有效期内,所以返回了相应的值。

  2. 然后,我们休眠了约35秒,让部分数据过期。这会导致"key1"和"key2"的缓存项过期。

  3. 最后,我们再次尝试获取"key1"和"key2"的值,由于它们的缓存项已过期,所以返回了null。这表明数据已不再可用。

http://www.dinnco.com/news/31300.html

相关文章:

  • 电影网站的代理怎么做百度今日数据
  • wordpress 网店插件电脑系统优化软件排行榜
  • 男科是去私立还是公立独立站seo建站系统
  • 网页设计实训心得体会500字抖音seo关键词优化
  • 帝国网站管理系统后台北京百度seo价格
  • 大连网站设计公司北京百度快速优化排名
  • 微网站建设套餐有没有免费的推广网站
  • 网站注册主机互联网品牌的快速推广
  • 驻马店标准网站建设国产系统2345
  • 网站建设 h5博客
  • 网站图片自动下载广州seo排名外包
  • 徐州经济技术开发区信息流优化师招聘
  • 网站经营性备案多少钱国家高新技术企业查询
  • 动画做a视频在线观看网站说到很多seo人员都转行了
  • wordpress主题音乐seo技术分享博客
  • 南昌做网站和微信小程序的公司seo在线推广
  • 房屋网站模板外链推广是什么意思
  • 机加工外贸网站技能培训
  • 建一个网站需要多少钱网站怎么做的p2p万能搜索种子
  • 做博彩网站判刑多少年百度一下免费下载安装
  • 中和阗盛工程建设有限公司网站上海市人大常委会
  • 黄山网站建设推荐怎么发布信息到百度
  • 可以做商城网站的公司外包公司和劳务派遣的区别
  • 大学生对校园网站建设的需求是什么全文搜索引擎有哪些
  • 综合信息网站模板企业推广宣传文案
  • 如何网站建设策划方案淘宝关键词推广
  • 哪里有做空包网站的短视频推广引流方案
  • DW做网站首页滚动图片公司做网站怎么做
  • 一个网站页面设计多少钱广州seo技术外包公司
  • 关于企业官方网站建设的ppt网络营销推广价格