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

网站源文件下载seo的方式包括

网站源文件下载,seo的方式包括,只做原创内容平台网站,网站上的图片格式怎么做项目简介 大家好,我是老马。 本来这个系列应该完结了。 不过最近老马在使用自己写的 cache 工具时,发现拓展性不太好,于是花了一点时间,对代码进行了重构。 Cache 用于实现一个可拓展的高性能本地缓存。 有人的地方&#xff…

项目简介

大家好,我是老马。

本来这个系列应该完结了。

不过最近老马在使用自己写的 cache 工具时,发现拓展性不太好,于是花了一点时间,对代码进行了重构。

Cache 用于实现一个可拓展的高性能本地缓存。

有人的地方,就有江湖。 有高性能的地方,就有 cache。

创作目的

  • 为日常开发提供一套简单易用的缓存框架

  • 便于后期多级缓存开发

  • 学以致用,开发一个类似于 redis 的本地缓存渐进式缓存框架

特性

  • fluent 流式编程体验,纵享丝滑

  • 支持 cache 固定大小

  • 支持自定义 map 策略

  • 支持自定义 expire 过期策略

  • 支持自定义 evict 驱除策略(内置 FIFO/LRU 多种驱除策略)

  • 支持 load 初始化和 persist 持久化(内置 RDB/AOF 模式)

  • 支持自定义监听器

  • 日志整合框架,自适应常见日志

变更日志

v1.0.0 对原始代码进行大幅度调整,让整体更加简洁+方便拓展。

快速开始

准备

JDK1.7 及其以上版本

Maven 3.X 及其以上版本

maven 项目依赖

<dependency><groupId>com.github.houbb</groupId><artifactId>cache-core</artifactId><version>1.0.0</version>
</dependency>

入门测试

ICache<String, String> cache = CacheBs.<String,String>newInstance().size(2).build();cache.put("1", "1");
cache.put("2", "2");
cache.put("3", "3");
cache.put("4", "4");Assert.assertEquals(2, cache.size());

默认为先进先出的策略,此时输出 keys,内容如下:

[3, 4]

引导类

引导类配置属性

CacheBs 作为缓存的引导类,支持 fluent 写法,编程更加优雅便捷。

上述配置等价于:

ICache<String, String> cache = CacheBs.<String,String>newInstance().map(CacheMaps.<String,String>defaults()).evict(CacheEvicts.<String, String>defaults()).expire(CacheExpires.<String, String>defaults()).load(CacheLoads.<String, String>defaults()).persist(CachePersists.<String, String>defaults()).interceptorList(CacheInterceptors.<String, String>defaults()).size(2).build();

这些实现都有默认策略,同时全部支持自定义。

map 数据存储

说明

用于存储缓存的数据,简单起见,目前保留了 Map 接口的常用核心方法。

内置策略

目前内置了几种策略,可以直接通过 CacheMaps 工具类创建。

策略说明
defaults()默认策略,目前为 concurrentHashMap
hashMap()基于 HashMap 实现
concurrentHashMap()基于 ConcurrentHashMap

evict 驱逐策略

说明

当 map 的数据超过指定的数量时,对应的驱除策略。

内置策略

目前内置了几种淘汰策略,可以直接通过 CacheEvicts 工具类创建。

策略说明
defaults()默认策略,目前为 FIFO
none()没有任何淘汰策略
fifo()先进先出
lru()最基本的朴素 LRU 策略,性能一般
lruDoubleListMap()基于双向链表+MAP 实现的朴素 LRU,性能优于 lru
lru2Q()基于 LRU 2Q 的改进版 LRU 实现,命中率优于朴素LRU
lru2()基于 LRU-2 的改进版 LRU 实现,命中率优于 lru2Q

过期支持

说明

类似 redis,支持通过 expireAt(key, linuxTime) 指定数据的过期时间。

会有定时调度对数据进行过期处理。

入门例子

ICache<String, String> cache = CacheBs.<String,String>newInstance().size(3).build();cache.put("1", "1");
cache.put("2", "2");long now = System.currentTimeMillis();
cache.expireAt("1", now+40);
Assert.assertEquals(2, cache.size());TimeUnit.MILLISECONDS.sleep(50);
Assert.assertEquals(1, cache.size());
System.out.println(cache.keySet());

cache.expireAt("1", now+40); 指定对应的 key 在 40ms 后过期。

内置策略

目前内置了几种策略,可以直接通过 CacheExpires 工具类创建。

策略说明
defaults()默认策略,目前为 random
none()没有任何过期策略
random()随机 key,类似 redis
sort()按照过期时间排序处理,需要额外的空间

load 加载器

说明

有时候我们需要在 cache 初始化的时候,添加对应的数据初始化。

后期可以从文件等地方加载数据。

建议和 persist 持久化配套使用。

内置策略

目前内置了几种策略,可以直接通过 CacheLoads 工具类创建。

策略说明
defaults()默认策略,目前为 none
none()空实现
aof()AOF 模式
dbJson()RDB 模式

实现

继承 AbstractCacheLoad 抽象类即可。

public class MyCacheLoad extends AbstractCacheLoad<String,String> {@Overridepublic void doLoad() {super.context.map().put("1", "1");super.context.map().put("2", "2");}}

我们在缓存初始化的时候,放入 2 个元素。

测试效果

ICache<String, String> cache = CacheBs.<String,String>newInstance().load(new MyCacheLoad()).build();Assert.assertEquals(2, cache.size());

persist 持久化类

说明

如果我们只是把文件放在内存中,应用重启信息就丢失了。

有时候我们希望这些 key/value 信息可以持久化,存储到文件或者 database 中。

持久化

CachePersists.<String, String>dbJson("1.rdb") 指定将数据文件持久化到文件中。

定期执行,暂时全量持久化的间隔为 10min,后期考虑支持更多配置。

public void persistTest() throws InterruptedException {ICache<String, String> cache = CacheBs.<String,String>newInstance().load(new MyCacheLoad()).persist(CachePersists.<String, String>dbJson("1.rdb")).build();Assert.assertEquals(2, cache.size());TimeUnit.SECONDS.sleep(5);
}
  • 1.rdb

文件内容如下:

{"key":"2","value":"2"}
{"key":"1","value":"1"}

存储之后,可以使用对应的加载器读取文件内容:

ICache<String, String> cache = CacheBs.<String,String>newInstance().load(CacheLoads.<String, String>dbJson("1.rdb")).build();Assert.assertEquals(2, cache.size());

内置策略

目前内置了几种策略,可以直接通过 CachePersists 工具类创建。

策略说明
defaults()默认策略,目前为 none
none()空实现
aof()AOF 模式
dbJson()RDB 模式

拦截器

说明

为了方便我们针对常见的操作进行监听,暴露了操作的拦截器接口。

备注:这个后续考虑拓展为类似于 dubbo 的拦截器,可能会把这个接口隐藏掉。暴露新的接口。

内置策略

默认的主要是功能性的策略,在 CacheInterceptors.defaults(),主要包含了如下4个。

策略说明
commonCost()通用参数、耗时
evict()驱逐相关的监听
aof()AOF 模式监听
refresh()expire 有效性刷新监听

其中后3个是核心的功能相关,需要保留。支持自定义拓展。

开源矩阵

下面是一些缓存系列的开源矩阵规划。

名称介绍状态
resubmit防止重复提交核心库已开源
rate-limit限流核心库已开源
cache手写渐进式 redis已开源
lock开箱即用的分布式锁已开源
common-cache通用缓存标准定义已开源
redis-config兼容各种常见的 redis 配置模式已开源
quota-server限额限次核心服务待开始
quota-admin限额限次控台待开始
flow-control-server流控核心服务待开始
flow-control-admin流控控台待开始

手写 Redis 系列

java从零手写实现redis(一)如何实现固定大小的缓存?

java从零手写实现redis(三)redis expire 过期原理

java从零手写实现redis(三)内存数据如何重启不丢失?

java从零手写实现redis(四)添加监听器

java从零手写实现redis(五)过期策略的另一种实现思路

java从零手写实现redis(六)AOF 持久化原理详解及实现

java从零手写实现redis(七)LRU 缓存淘汰策略详解

java从零开始手写redis(八)朴素 LRU 淘汰算法性能优化

java从零开始手写redis(九)LRU 缓存淘汰算法如何避免缓存污染

java从零开始手写redis(十)缓存淘汰算法 LFU 最少使用频次

java从零开始手写redis(十一)缓存淘汰算法 COLOK 算法

java从零开始手写redis(十二)过期策略如何实现随机 keys 淘汰

java从零开始手写redis(十三)redis渐进式rehash详解

java从零开始手写redis(十四)JDK HashMap 源码解析

java从零开始手写redis(十四)JDK ConcurrentHashMap 源码解析

java从零开始手写redis(十五)实现自己的 HashMap

java从零开始手写redis(十六)实现渐进式 rehash map

java从零开始手写redis(十七)v1.0.0 全新版本架构优化+拓展性增强

http://www.dtcms.com/wzjs/157442.html

相关文章:

  • 服务网站运营方案百度代做seo排名
  • 普通网站可以做商城网络营销岗位有哪些
  • 查不到备案的网站如何加入广告联盟赚钱
  • 一个空间可以做几个网站网站seo优化方案策划书
  • 邢台集团网站建设报价高端企业建站公司
  • 做网站怎么签订协议搜索引擎优化员简历
  • 福州网站设计企业网站建站windows系统优化软件排行榜
  • 网站建设的三要素百度推广有哪些形式
  • wordpress滑动门推广seo公司
  • 南京网站建设 个人软文外链代发
  • 深圳装修公司排名前十seo网站怎么优化
  • 如何在百度上做公司做网站上海专业排名优化公司
  • 网站设计公司 知道万维科技环球网
  • 深圳网站建设公司推荐seo查询排名软件
  • 东莞网站制作 东莞企业网站制作品牌推广方式有哪些
  • 网站编辑怎么做内容分类东营网站建设制作
  • 比较好的公关公司企业网站seo
  • 专业层析成像代做网站津seo快速排名
  • 经营性质网站百度网盘在线登录
  • 网站推送怎么做的淘宝seo优化是什么
  • 网站建设 开发的团队需要几个人发布
  • 上班自己花钱做的网站百度免费推广有哪些方式
  • 用php内容做电商网站营销培训班
  • 成都网站设计公司哪家好十大外贸电商平台
  • 怎么做自己微信的网站百度网页怎么制作
  • 云信智联商丘网站建设快速提升网站排名
  • 珠海网站建设制作哪家专业百度快照优化排名
  • 网站建设与制作这个行业怎么样呢seo推广有哪些公司
  • 网站建设的好处营销管理培训课程培训班
  • 江苏省建设工程地方标准网站结构优化设计