# mercury-cache **Repository Path**: wgRoy/mercury-cache ## Basic Information - **Project Name**: mercury-cache - **Description**: 一个简单的本地缓存实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mercury-cache #### 项目介绍 用于缓存的一些基础知识学习写的 分布式系统设计策略: 1.心跳检测:周期心跳检测、累计失效心跳检测,通过检测机制可以判断节点是否存在,如果死亡可以将节点剔除集群。 2.高可用设计:高可用设计一般包括三种:主备(M/S)、互备、集群模式。 3.容错设计:比如:缓存不存在预设值,直接返回。 4.负载均衡:轮训、随机、iphash等。 分布式系统设计实践: 1.全局id 2.分库分表:hash取模、一致性hash 3.路由表:数据拆分 4.缓存:redis、memcached、ehcache 缓存规范定义: 1.能从缓存读取数据 2.能将数据写入缓存中 3.缓存具有原子性操作 4.具有缓存时间监听器 5.具有缓存注解 保存缓存的key,value类型为泛型 缓存框架实现:特性:(ehcache、guava cache) 类型:进程内缓存 实现语言:java 内存使用:java对内存 内存管理:使用LRU淘汰算法 缓存标准:JCache(JSR107) 缓存架构:缓存提供层--->缓存管路层-->缓存存储层-->{基本存储层、LRU存储层、weak存储层} 缓存实现: 1.store-by-value:将要缓存的值拷贝一份存入缓存,避免在其他程序修改是,污染缓存内容 2.store-by-reference:缓存值得地址,一般缓存都是用值的拷贝。 缓存过期策略: 1.创建后的到期时间 2.访问后的到期时间 3.修改后的到期时间 内存管理算法:LRU,引用计数法、LFU linux操作系统中LRU算法淘汰的不是内存中的对象,而是页,当内存中数据不足时,通过LRU算法,选择一页(一般是4KB)将其交换到虚拟内存区(Swap区) LRU:最近最少使用原则 java实现:Java里面实现LRU缓存通常有两种选择,一种是使用LinkedHashMap,一种是自己设计数据结构,使用链表+HashMap(晚上使用LinkHashMap、双向链表实现LUR内存管理) redis incr为什么是线程安全的:redis是单进程单线程的,为啥才有epoll这种模式模型 redis持久化方式: 1.RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化)(可以将缓存中的数据全量读取,以json的形式存储在硬盘中) 2.AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)