JDK ConcurrentHashMap 源码解析
HashMap 的线程安全性
HashMap 是线程不安全的。
为了使用线程安全的数据结构,多线程条件下,可使用 Collections.synchronizedMap 方法构造出一个同步Map,或者直接使用线程安全的 ConcurrentHashMap。
Java 7基于分段锁的ConcurrentHashMap
注:本章的代码均基于JDK 1.7.0_67
数据结构
Ja...
2018-09-12 03:44:23 |
Java
数据结构之红黑树 Red Black Tree
Red Black Tree
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
它是在1972年由鲁道夫·贝尔发明的,他称之为”对称二叉B树”,它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。
它是复杂的,但它的操作有着良好的最坏情况运行时间,...
2018-09-12 03:44:23 |
Data-Struct
Algorithm Load Balance 负载均衡算法
负载均衡
概念
负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。
主要作用是将大量作业合理地分摊到多个操...
2018-09-10 03:37:31 |
Algorithm
SSDB - 一个快速的 NoSQL 数据库,Redis 的替代品
SSDB
SSDB 是一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis。
特性
替代 Redis 数据库, Redis 的 100 倍容量
LevelDB 网络支持, 使用 C/C++ 开发
Redis API 兼容, 支持 Redis 客户端
适合存储集合数据, 如 list, ha...
2018-09-10 02:28:57 |
Cache
ledisdb 由 Go 提供支持的高性能 NoSQL 数据库服务器
Ledisdb
Ledisdb 是一个用 Go 编写的高性能 NoSQL 数据库库和服务器。
它类似于Redis,但将数据存储在磁盘中。 它支持多种数据结构,包括 kv、list、hash、zset、set。
LedisDB 现在支持多个不同的数据库作为后端。
特征
丰富的数据结构:KV、List、Hash、ZSet、Set。
数据存储不受 RA...
2018-09-10 02:28:57 |
Cache
Guava Cache
适用性
缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。
Guava Cache与ConcurrentMap很相似,但也不完全一样。
最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管...
2018-09-09 23:44:19 |
Cache
Caffeine 入门学习
Caffeine
Caffeine is a high performance, near optimal caching library based on Java 8.
特性
Caffeine 提供灵活的结构,以创建一个缓存与下列功能的组合:
自动将条目加载到缓存中,可选异步加载
当基于频率和最近度超过最大值时,基于尺寸的驱逐
...
2018-09-09 23:44:19 |
Cache
Caffeine-04-TinyLFU A Highly Efficient Cache Admission Policy
这篇技术文档的中文翻译如下:
摘要
本文提出了一种基于频率的缓存准入策略,以提高受访问分布偏差影响的缓存的有效性。给定一个新访问的项目和缓存中的一个驱逐候选项,我们的方案基于最近的访问历史来决定,是否值得以驱逐候选项为代价将新项目纳入缓存。
实现这一概念是通过一种新颖的近似LFU(最近最少使用)结构,称为TinyLFU,它维护了一个最近访问的大样本项目的访问频率的近似表示。TinyLFU非...
2018-09-09 23:44:19 |
Cache