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

网站到期域名怎么解决办法德邦物流公司现代物流网站建设与开发

网站到期域名怎么解决办法,德邦物流公司现代物流网站建设与开发,哈尔滨自助建站,wordpress 分类图像描述延时定时刷新Redis缓存 一、背景 项目需求#xff1a;订阅接收一批实时数据#xff0c;每分钟最高可接收120万条数据#xff0c;并且分别更新到redis和数据库中#xff1b;而用户请求查询消息只是低频操作。资源限制#xff1a;由于项目预算有限#xff0c;只有4台4C16…延时定时刷新Redis缓存 一、背景 项目需求订阅接收一批实时数据每分钟最高可接收120万条数据并且分别更新到redis和数据库中而用户请求查询消息只是低频操作。资源限制由于项目预算有限只有4台4C16G的主机用于消费处理这些消息需求容忍程度当http请求查询消息时可以接受查询到几秒钟内的数据及延时一定时间的消息。 二、方案设计 缓存更新策略先更新本地缓存然后定时刷新到redis中代码实现设计 1技术选型使用caffeine或者guava缓存管理工具 2代码设计设置缓存过期时间并在实现过期时的处理接口在该接口中将本地缓存过期的key刷新到redis缓存中 三、代码实现 maven引用 dependencygroupIdcom.github.ben-manes.caffeine/groupIdartifactIdcaffeine/artifactIdversion2.9.3/version/dependency2.代码实现 定义接口 DelayedCache package com.zzc.component.cache; public interface DelayedCacheK, V {V get(K key);void put(K key, V value);void remove(K key);} 定义抽象类 AbstractDelayedCache 实现通用本地缓存策略 package com.zzc.component.cache;import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Expiry; import com.github.benmanes.caffeine.cache.LoadingCache; import org.checkerframework.checker.index.qual.NonNegative; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable;import java.util.concurrent.TimeUnit;public abstract class AbstractDelayedCacheK, V implements DelayedCacheK, V {/*** 延时刷新到redis的时间*/private final long delayMillis;private final int initialCapacity;private final int maximumSize;private final LoadingCacheK, V LOCAL_CACHE;public AbstractDelayedCache(int initialCapacity, int maximumSize, long delayMillis) {this.initialCapacity initialCapacity;this.maximumSize maximumSize;this.delayMillis delayMillis;LOCAL_CACHE initLocalCache();}private LoadingCacheK, V initLocalCache() {return Caffeine.newBuilder().expireAfter(new ExpiryK, V() {Overridepublic long expireAfterCreate(NonNull K key, NonNull V value, long currentTime) {return TimeUnit.MILLISECONDS.toNanos(delayMillis);}Overridepublic long expireAfterUpdate(NonNull K key, NonNull V value, long currentTime, NonNegative long currentDuration) {return currentDuration;}Overridepublic long expireAfterRead(NonNull K key, NonNull V value, long currentTime, NonNegative long currentDuration) {return currentDuration;}}).removalListener((key, value, cause) - {switch (cause) {case EXPLICIT://当缓存项被显式地调用 invalidate 或 invalidateAll 方法删除时触发afterExplicit(key, value);break;case REPLACED://当一个新的值通过 put、replace 等方法替换现有的值时触发。afterReplaced(key, value);break;case COLLECTED://如果缓存使用了弱引用weak keys 或 weak values或软引用soft values并且这些引用的对象被垃圾回收器回收时触发。afterCollected(key, value);break;case EXPIRED://当缓存项达到其设定的有效期TTL, TTI而被自动移除时触发。afterExpired(key, value);break;case SIZE://当缓存项因为缓存大小超过限制如最大容量或权重限制根据驱逐策略通常是 LRU、LFU 等被移除时触发afterSize(key, value);break;default:break;}}).initialCapacity(initialCapacity).maximumSize(maximumSize).build(new CacheLoaderK, V() {Overridepublic Nullable V load(NonNull K key) throws Exception {return loadCache(key);}});}/*** 当缓存被显示调用 invalidate 或 invalidateAll 方法删除时触发* param key* param value*/protected abstract void afterExplicit(K key, V value);/*** 当缓存项被替换时触发* param key* param value*/protected void afterReplaced(K key, V value) {}/*** 如果缓存使用了弱引用weak keys 或 weak values或软引用soft values并且这些引用的对象被垃圾回收器回收时触发。* param key* param value*/protected void afterCollected(K key, V value) {}/*** 当缓存项达到其设定的有效期TTL, TTI而被自动移除时触发。* param key* param value*/protected abstract void afterExpired(K key, V value);/*** 当缓存项因为缓存大小超过限制如最大容量或权重限制根据驱逐策略通常是 LRU、LFU 等被移除时触发* param key* param value*/protected abstract void afterSize(K key, V value);/*** 初始化本地缓存数据从远程获取* param key*/protected abstract V loadCache(K key);Overridepublic V get(K key) {return LOCAL_CACHE.get(key);}Overridepublic void put(K key, V value) {LOCAL_CACHE.put(key, value);}Overridepublic void remove(K key) {LOCAL_CACHE.invalidate(key);}} 继承实现缓存和redis的关系 package com.zzc.component.cache; public class TestRedisCache extends AbstractDelayedCacheString, String {/*** 初始缓存数量大小为 1000* 最大缓存数量 10000* 缓存过期时间 10000ms*/public TestRedisCache() {super(1000, 10000, 10000);}Overrideprotected void afterExplicit(String key, String value) {//TODO 删除redis缓存 redisTemplate.del(key);}Overrideprotected void afterExpired(String key, String value) {//TODO 更新到redis缓存 redisTemplate.setValue(key, value);}Overrideprotected void afterSize(String key, String value) {//TODO 更新到redis缓存 redisTemplate.setValue(key, value);}Overrideprotected String loadCache(String key) {//TODO 从redis缓存中获取key的valuereturn null;} } Demo package com.zzc.component.cache; public class Demo {public static void main(String[] args) {TestRedisCache cache new TestRedisCache();cache.put(key, value);cache.get(key);cache.remove(key);}}
http://www.hkea.cn/news/14315474/

相关文章:

  • 扁平化色彩网站网站是如何建立的
  • 广州专业网站设计企业凡科企业邮箱
  • 河南做网站公司排名最简单的手机网站制作
  • 蘑菇街网站服务外贸网站建设模式
  • ai做的比较好的网站wordpress 攻击
  • 呼和浩特市网站公司网站建设兰州
  • 云南省网站开发公司wordpress添加底部友情链接
  • 有哪些做策划的用的网站网站建设前端工具
  • 浙江网站改版设计公司高端品牌鞋子排行榜前十名
  • 建设银行附近网站点oa办公系统网页版官网
  • 做网站都需要具备什么网站建设制作 南京公司哪家好
  • 婚礼设计方案网站国际新闻最新战争消息
  • 体育器材网站模板手机网站友情链接怎么做
  • 网站推广计划表易烊千玺网页设计模板
  • 游戏网站怎么赚钱建网站义乌
  • 雅安网站制作php代码删除网站
  • 南宁建站公司平面设计培训学校排名
  • cms网站后台管理系统国产oa系统有哪些
  • 固安县建设局网站网站建设与管理论文
  • 做头发个人网站制作素材商标设计在线
  • 网站开发的书籍什么软件做美食视频网站
  • 给城市建设提议献策的网站上传wordpress后
  • 具有品牌的上海网站建设重庆卓光网站建设
  • 做一网站困难吗毕业设计代做网站有哪些
  • 300元做网站手机社交网站模板
  • 用meteor框架做的微博网站wordpress登录可见插件
  • 不登陆不收费的网站链接宁波网站制作服务
  • 网站建设政务新媒体知名网站开发哪家好
  • 河南亿元建设有限公司公司网站网站图片导入wordpress
  • 房产类网站建设群网站建设合同