Hutool不糊涂(二)

目录

 

●最甜的几块糖(Part 2)

●缓存工具

●JSON工具

●加解密工具

●定时任务

●excel操作

●DFA查找

●糖吃多了有什么坏处?

●小结


●最甜的几块糖(Part 2)

接上一篇,我们继续来看看剩下的几个比较实用的类。

●缓存工具

之前笔者写过一篇利用static实现简易缓存的文章,比较功能有限,例如无法实现缓存的清理等。而Hutool为大家提供了常用的缓存工具,除了不常用到的高级功能以外,例如主从复制,基本够用了,不用额外去学习、集成以及维护第三方的缓存,例如Redis或者memcached。

Hutool提供了以下几种缓存——

1.FIFOCache(先进先出缓存)。元素不停的加入缓存直到缓存满为止,当缓存满时,清理过期缓存对象,清理后依旧满则删除先入的缓存。是用链表来实现的。适用于对加入先后敏感的业务场景,例如售货机商品上架,先放进去的商品先卖掉,这样可以保证生产日期靠前的产品不会积压;不适用于对频率敏感的业务场景,例如不能保证最常用的对象总是被保留。因此适用面比较窄。

2.LFUCache(最少使用率缓存)。当缓存满时清理过期对象,清理后依旧满的情况下清除最少访问(访问计数最小)的对象并将其他对象的访问数减去这个最小访问数,以便新对象进入后可以公平计数。适用于对频率敏感的业务场景,这比较好理解,大部分缓存的目的都是为了留下经常用的对象,不常用的就逐渐排除掉。

3.LRUCache(最久未使用缓存)。当缓存满了,最久未被使用的对象将被移除,是用LinkedHashMap实现的,当缓存对象被使用一次,就取出放入头部。适用于对使用先后敏感的业务场景,同样不适用于对频率敏感的业务场景

4.TimedCache(定时缓存)。为缓存对象设置一个过期时间,到了就移出,与前面三种不同,没有容量限制。适用于对时间段敏感的业务场景,例如缓存交易记录的流水号,交易记录保存3个月;同样不适用于对频率敏感的业务场景

缓存对象的构建采用统一的形式:

Long timeout = 60*DateUnit.MINUTE.getMillis();
int capacity = 10;
//构建一个FIFOCache
Cache<String,String> fifoCache = CacheUtil.newFIFOCache(capacity,timeout);
//构建一个LFUCache
Cache<String,String> lfuCache = CacheUtil.newLRUCache(capacity,timeout);
//构建一个LRUCache
Cache<String,String> lruCache = CacheUtil.newLFUCache(capacity,timeout);
//构建一个TimedCache
Cache<String,String> timedCache = CacheUtil.newTimedCache(timeout);

缓存对象的使用:

fifoCache.put("key","value");
String value = fifoCache.get("key");
//1秒后到期
fifoCache.put("key2","value2",6000);
String value2 = fifoCache.get("key2");
//获取命中次数与非命中次数
int hitCount = ((FIFOCache<String, String>) fifoCache).getHitCount();
int missCount = ((FIFOCache<String, String>) fifoCache).getMissCount();

●JSON工具

现在第三方开源高效的JSON工具还是蛮多的,比如FastJSON、Gson、Jackson等。Hutool也集成了自己的JSON工具。与FastJSON类似,Hutool的JSONObject类实现了Map接口,JSONArray类实现了List接口,因此可以近乎0学习成本地使用类似FastJSON的API来操作JSON(假设你已经会使用FastJSON)。

下面我们结合代码来比较下FastJSON、Gson以及Hutool的JSON。首先我们看看三者将字符串解析为JsonObject的速度——

为了增加解析难度,我们特意采用一个复杂的Json字符串,通过Hutool的文件读取工具从txt中读取,涉及具体的业务数据,此处就不给大家展示了。

public class JsonTest {
    /**
     * 测试三者将字符串、Json对象、JavaBean之间相互转化的用法和性能
     */
    @Test
    public void test(){
        System.out.println("--------------String转JsonObject----------------");

        //读取Json字符串,Hutool提供的文件读取类
        FileReader fileReader = new FileReader("复杂Json字符串-组织单元.txt");
        String jsonStr = fileReader.readString();

        //FastJson
        Date fastJsonDateTimeStart = DateTime.now().toJdkDate();
        JSONObject fastJsonObject = JSONObject.parseObject(jsonStr);
        Date fastJsonDateTimeEnd = DateTime.now().toJdkDate();
        System.out.printf("FastJson转化JsonObject耗时:%d毫秒\n",DateUtil.between(fastJsonDateTimeStart,fastJsonDateTimeEnd,DateUnit.MS));

        //Gson
        Date gsonDateTimeStart = DateTime.now().toJdkDate();
        JsonObject gsonObject = new JsonParser().parse(jsonStr).getAsJsonObject();
        Date gsonDateTimeEnd = DateTime.now().toJdkDate();
        System.out.printf("Gson转化JsonObject耗时:%d毫秒\n",DateUtil.between(gsonDateTimeStart,gsonDateTimeEnd,DateUnit.MS));

        //Hutool
        Date hutoolJsonDateTimeStart = DateTime.now().toJdkDate();
        cn.hutool.
  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值