线程安全缓存ConcurrentLinkedHashMap,Kotlin

news2024/10/6 22:22:37

线程安全缓存ConcurrentLinkedHashMap,Kotlin

LinkedHashMap实现LRU缓存cache机制,Kotlin_zhangphil的博客-CSDN博客* * 基于Java LinkedList,实现Android大数据缓存策略 * 作者:Zhang Phil * 原文出处:http://blog.csdn.net/zhangphil * * 实现原理:原理的模型认为:在LinkedList的头部元素是最旧的缓存数据,在L_android大数据缓存。一句话概括的说:两者最大的不同就是,HashMap不保证put进去的数据的顺序;例如,假如在HashMap中依次、顺序添加元素:1,2,3,4,5,在遍历HashMap时输出的顺。https://blog.csdn.net/zhangphil/article/details/132604797上文利用LinkedHashMap固有特性发展出一种简洁的LRU缓存实现,在一些轻量级、小型LRU业务场景中,可以轻快构建出一个缓存模块,但并不是线程安全的。Google借鉴LinkedHashMap思想发展出线程安全的ConcurrentLinkedHashMap缓存实现。

GitHub - ben-manes/concurrentlinkedhashmap: A ConcurrentLinkedHashMap for JavaA ConcurrentLinkedHashMap for Java. Contribute to ben-manes/concurrentlinkedhashmap development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/ben-manes/concurrentlinkedhashmap

引入:

        <!-- https://mvnrepository.com/artifact/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru -->
        <dependency>
            <groupId>com.googlecode.concurrentlinkedhashmap</groupId>
            <artifactId>concurrentlinkedhashmap-lru</artifactId>
            <version>1.4.2</version>
        </dependency>

import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap
import com.googlecode.concurrentlinkedhashmap.EvictionListener

fun main(args: Array<String>) {
    val CACHE_LIMIT = 3L

    val map = ConcurrentLinkedHashMap.Builder<Int, String>()
        .maximumWeightedCapacity(CACHE_LIMIT)
        .listener(object : EvictionListener<Int, String> {
            //当LRU缓存的头部元素删除时候回调。
            override fun onEviction(p0: Int?, p1: String?) {
                println("onEviction $p0-$p1")
            }
        })
        .build()

    map[1] = "a"
    map[2] = "b"
    map[3] = "c"
    println("- $map")

    map[4] = "d"
    println("-- $map")

    println(map[3])
    println("--- $map")
}

- {1=a, 2=b, 3=c}
onEviction 1-a
-- {2=b, 3=c, 4=d}
c
--- {2=b, 3=c, 4=d}

ConcurrentLinkedHashMap和LinkedHashMap有一个不同点是,LinkedHashMap在访问存储的元素后,会将被访问的元素移动到最尾部(设置访问order=true),而ConcurrentLinkedHashMap则没有这步操作,元素即便被访问,仍然保持原先顺序。

不管ConcurrentLinkedHashMap或者LinkedHashMap实现的缓存,比较适合小型、轻量级的缓存系统,如果是大型、功能要求复杂、要求高性能的业务场景,谷歌建议使用caffeine:

GitHub - ben-manes/caffeine: A high performance caching library for JavaA high performance caching library for Java. Contribute to ben-manes/caffeine development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/ben-manes/caffeinecaffeine是一种更现代化的、高性能、功能强大的LRU缓存框架。

高性能内存缓存框架Caffeine,Java_zhangphil的博客-CSDN博客高性能内存缓存框架Caffeine,Java。_内存缓存框架https://blog.csdn.net/zhangphil/article/details/126908710

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“Newtonsoft.Json.Linq.JArray”解决方法

对于“Newtonsoft.Json.Linq.JObject”的对象强制类型转换为类型“Newtonsoft.Json.Linq.JArray”报错 第一的图为对象{“*************”:“********”} 第二个图片为数组[{“…”:“…”}] 在我这里进行强制转换对象转换为类型“Newtonsoft.Json.Linq.JArray”报错. 那我们…

【java】【项目实战】[外卖十一]项目优化(Ngnix)

目录 一、Nginx概述 1、Nginx介绍 2、Nginx下载和安装 3、Nginx目录结构 二、Nginx命令 1、查看版本 2、检查配置文件正确性 3、启动和停止 4、重新加载配置文件 三、Nginx配置文件结构 1、全局块 2、events块 3、http块 四、Nginx具体应用 1、部署静态资源 2、…

mysql基于AES_ENCRYPTAES_DECRYPT实现密码的加密与解密

1.直接使用AES_ENCRYPT&&AES_DECRYPT函数导致的问题。 执行语句 select AES_ENCRYPT(cd123,key) 结果 加密过后的字符串是一串很奇怪的字符。 尝试使用上面加密过后的字符解密。 select AES_DECRYPT(u5£d|#,key) 结果 并未成功的解密 2.解决办法 使用 hex(…

kubernetes——RBAC鉴权

简介 基于角色的访问控制(RBAC)是一种基于组织中各个用户的角色来调节对计算机或网络资源的访问的方法。 目的&#xff1a;防止k8s里的pod&#xff08;会运行程序&#xff09;能随意获取整个集群里的信息和访问集群里的资源 概念 Rule&#xff1a;规则&#xff0c;一组属于…

图解SQL查询之模糊查询技巧:如何使用LIKE对数据进行筛选

模糊查询是一种特殊的条件查询方式&#xff0c;它允许根据模式匹配来查找符合特定条件的数据。在 SQL 中&#xff0c;我们使用 LIKE 关键字来进行模糊查询。在 LIKE 模糊查询中&#xff0c;有两种常用的通配符&#xff1a; 百分号&#xff08;%&#xff09;&#xff1a;表示任…

合宙Air724UG LuatOS-Air LVGL API控件-图片 (Image)

图片 (Image) 图片IMG是用于显示图像的基本对象类型&#xff0c;图像来源可以是文件&#xff0c;或者定义的符号。 示例代码 -- 创建图片控件 img lvgl.img_create(lvgl.scr_act(), nil) -- 设置图片显示的图像 lvgl.img_set_src(img, "/lua/luatos.png") -- 图片…

SpringMVC:从入门到精通

一、SpringMVC是什么 SpringMVC是Spring提供的一个强大而灵活的web框架&#xff0c;借助于注解&#xff0c;Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象&#xff08;Plain Old Java Objects、pure old java object 或者 plain ordinary java object&#xff0…

社区团购新玩法,生鲜蔬菜配货发货小程序商城

在当前的电商市场中&#xff0c;生鲜市场具有巨大的潜力和发展空间。为了满足消费者的需求&#xff0c;许多生鲜店正在寻找创新的方法来提高销售和客户满意度。其中&#xff0c;制作一个个性且功能强大的生鲜小程序商城是一个非常有效的策略。以下是在乔拓云平台上制作生鲜小程…

#systemverilog# 之 event region 和 timeslot 仿真调度(九)assign 赋值 和 always 组合赋值的调度区别

有时候,我们会发现一个问题,举个最简单的例子:比如将两个信号进行简单的异或运算。该逻辑运算,我们可以使用 assign 数据流建模完成,也可以使用always 组合逻辑过程赋值语句实现。那仿真工具在对它进行调度的时候,有什么区别吗? 不慌,今天,我们举个例子,来验证这一点…

2023 最新前端面试题 (HTML 篇)

1. src 和 href 的区别 src 用于替换当前元素&#xff08;引入&#xff09;&#xff0c;href 用于在当前文档和引用资源之间确立联系&#xff08;引用&#xff09; &#xff08;1&#xff09;src&#xff08;source&#xff09; 指向外部资源的位置&#xff0c;指向的内容将会嵌…

Python爬虫——新手使用代理ip详细教程

Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。代理IP的作用是可以为爬虫提供多个IP地址&#xff0c;从而加快其爬取数据的速度&#xff0c;同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。 一、代理IP的…

ArrayList底层实现原理

ArrayList ArrayList最早出现在 JDK 1.2中&#xff0c;底层基于数组实现&#xff0c;它是一个动态数组列表结构的容器。 元素有序&#xff0c;可重复增删元素的速度慢。每次增加删除元素&#xff0c;都需要更改数组长度、拷贝元素及移动元素位置。查询元素的速度快。底层数据…

qt简易网络聊天室 数据库的练习

qt网络聊天室 服务器&#xff1a; 配置文件.pro QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exac…

酷派30/锋尚40/大观40S首发解锁BL+完美root权限+去除密码黑砖线刷修复

早前的中华酷联&#xff0c;随着时代的发展&#xff0c;酷派手机虽热发展的并没有其他手机那么快&#xff0c;但也 是坚强的活了下来。目前主打机型为Cool系列&#xff0c;最高为Cool30机型&#xff0c;并且发布酷派锋尚 40酷派大观40S&#xff0c;起头并进。该系列机型&#x…

动手学深度学习(五)Kaggle房价预测

Kaggle房价数据集&#xff0c;前四个为房价特征&#xff0c;最后一个为标签&#xff08;房价&#xff09;。 一、下载数据集 import numpy as np import pandas as pd import torch from torch import nn from d2l import torch as d2l import hashlib import os import tarfi…

XSS简单介绍

目录 一、认识XSS 1.XSS原理 2.XSS分类 二、XSS漏洞复现 1.搭建靶机进行复现 2.案例解析 2.1第一关 2.2第二关 2.3第三关 2.4第四关 一、认识XSS 1.XSS原理 XSS跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;…

linux并发服务器 —— linux网络编程(七)

网络结构模式 C/S结构 - 客户机/服务器&#xff1b;采用两层结构&#xff0c;服务器负责数据的管理&#xff0c;客户机负责完成与用户的交互&#xff1b;C/S结构中&#xff0c;服务器 - 后台服务&#xff0c;客户机 - 前台功能&#xff1b; 优点 1. 充分发挥客户端PC处理能力…

分布式锁之redis实现

docker安装redis 拉取镜像 docker pull redis:6.2.6 查看镜像 启动容器并挂载目录 需要挂在的data和redis.conf自行创建即可 docker run --restart always -d -v /usr/local/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/docker/redis/data:/dat…

leetcode986. 区间列表的交集(java)

区间列表的交集 题目描述贪心 - 合并区间代码演示 题目描述 难度 - 中等 leetcode986. 区间列表的交集 给定两个由一些 闭区间 组成的列表&#xff0c;firstList 和 secondList &#xff0c;其中 firstList[i] [starti, endi] 而 secondList[j] [startj, endj] 。每个区间列表…

【数学建模竞赛】超详细Matlab二维三维图形绘制

二维图像绘制 绘制曲线图 g 是表示绿色 b--o是表示蓝色/虚线/o标记 c*是表示蓝绿色(cyan)/*标记 ‘MakerIndices,1:5:length(y) 每五个点取点&#xff08;设置标记密度&#xff09; 特殊符号的输入 序号 需求 函数字符结构 示例 1 上角标 ^{ } title( $ a…