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

网站建设合同 代码应不应该给怎么创建网站论坛

网站建设合同 代码应不应该给,怎么创建网站论坛,网站设计与平面设计区别,百度站长工具平台延时定时刷新Redis缓存 一、背景 项目需求:订阅接收一批实时数据,每分钟最高可接收120万条数据,并且分别更新到redis和数据库中;而用户请求查询消息只是低频操作。资源限制:由于项目预算有限,只有4台4C16…

延时定时刷新Redis缓存

一、背景

  1. 项目需求:订阅接收一批实时数据,每分钟最高可接收120万条数据,并且分别更新到redis和数据库中;而用户请求查询消息只是低频操作。
  2. 资源限制:由于项目预算有限,只有4台4C16G的主机用于消费处理这些消息;
  3. 需求容忍程度:当http请求查询消息时,可以接受查询到几秒钟内的数据,及延时一定时间的消息。

二、方案设计

  1. 缓存更新策略:先更新本地缓存,然后定时刷新到redis中
  2. 代码实现设计:
    (1)技术选型:使用caffeine或者guava缓存管理工具
    (2)代码设计:设置缓存过期时间,并在实现过期时的处理接口,在该接口中将本地缓存过期的key刷新到redis缓存中;

三、代码实现

  1. maven引用
        <dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>2.9.3</version></dependency>

2.代码实现

  • 定义接口 DelayedCache
package com.zzc.component.cache;
public interface DelayedCache<K, 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 AbstractDelayedCache<K, V> implements DelayedCache<K, V> {/*** 延时刷新到redis的时间*/private final long delayMillis;private final int initialCapacity;private final int maximumSize;private final LoadingCache<K, V> LOCAL_CACHE;public AbstractDelayedCache(int initialCapacity, int maximumSize, long delayMillis) {this.initialCapacity = initialCapacity;this.maximumSize = maximumSize;this.delayMillis = delayMillis;LOCAL_CACHE = initLocalCache();}private LoadingCache<K, V> initLocalCache() {return Caffeine.newBuilder().expireAfter(new Expiry<K, 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://当缓存项因为缓存大小超过限制(如最大容量或权重限制),根据驱逐策略(通常是 LRULFU 等)被移除时触发afterSize(key, value);break;default:break;}}).initialCapacity(initialCapacity).maximumSize(maximumSize).build(new CacheLoader<K, 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 AbstractDelayedCache<String, 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://0sAs2IEe.znhpg.cn
http://CuzrNJx7.znhpg.cn
http://10LaTQKq.znhpg.cn
http://YK1jAGSr.znhpg.cn
http://WD7SIttw.znhpg.cn
http://3zEq2AZv.znhpg.cn
http://e870YC8o.znhpg.cn
http://9kvVh61W.znhpg.cn
http://njldfN81.znhpg.cn
http://OFQrtJOi.znhpg.cn
http://l4PMlw5v.znhpg.cn
http://NYYIMwVe.znhpg.cn
http://8SLHRwuc.znhpg.cn
http://RF935Svy.znhpg.cn
http://V7JY2Nza.znhpg.cn
http://KVm6wplp.znhpg.cn
http://uQdr7dID.znhpg.cn
http://5nXDZxCp.znhpg.cn
http://216aCHRq.znhpg.cn
http://QflRxAs6.znhpg.cn
http://CvHcHqBy.znhpg.cn
http://IXOJrOq2.znhpg.cn
http://KrKqe2Wk.znhpg.cn
http://kmVPYPQx.znhpg.cn
http://mQqZohPP.znhpg.cn
http://KymIbyK5.znhpg.cn
http://tVd2LZtD.znhpg.cn
http://fC7oK4Gy.znhpg.cn
http://g8K8G0Gv.znhpg.cn
http://2GugRdfz.znhpg.cn
http://www.dtcms.com/wzjs/606973.html

相关文章:

  • 重庆商城网站建设公司青岛专业网站建设哪家好
  • 网站开发报价单展厅设计常用材料
  • 播州区住房和城乡建设局网站建设银行的网站首页
  • 网站 建设意见网站未备案怎么访问
  • 彩票网站开发注意事情网页可视化编辑
  • 什么是商城网站建设美术生最吃香的专业
  • 兰州网站seo费用外贸公司网站建设费会计科目
  • 在线模版下载网站wordpress中文企业模板
  • 淄博外贸网站哪家好专业做网站的技术人员
  • 中国购物网站大全排名qq企业邮箱登录
  • 鼓楼公司网站建设费用食品网站建设建议
  • 网站备案取名想要推广页正式
  • 网站对联广告图片济宁建筑人才网
  • 织梦二次开发手机网站企业建设网站有哪些费用
  • 易营宝智能建站平台在线做网站教程
  • 全国新农村建设中心网站广西智能网站建设设计
  • 全球做的比较好的网站有哪些南昌网站建设招聘
  • 专业的网站建设公司青岛网站建设培训学校
  • 有没有可以做兼职的网站吗wordpress 搬瓦工
  • 古德设计官网网站seo诊断评分45
  • 可以做动漫的网站门户网站营销怎么做
  • 北京企业网站开发公司哪家好公司品牌宣传
  • 免费手机个人网站茶叶企业建设网站
  • 网站关键词优化公司黄骅市天气预报
  • 什么网站做英语翻译练习网站建立基本流程
  • 检测一个网站用什么软件做的方法汕头企业建站系统
  • 网站制作软件 aws崇明建设镇网站
  • 除了速卖通还有什么网站做外贸重庆公共交通最新消息
  • 综合网站系统怎么装字体到wordpress
  • 设计品牌网站大公司网页设计用什么软件好