首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次
】的更多相关文章
java 从零开始手写 RPC (03) 如何实现客户端调用服务端?
说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的调用呢? 下面就让我们一起来看一下. 接口定义 计算方法 package com.github.houbb.rpc.common.service; import com.github.houbb.rpc.common.model.CalculateRequest; import com.github…
java 从零开始手写 RPC (04) -序列化
序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? 前面几节我们实现了最基础的客户端调用服务端,这一节来学习一下通讯中的对象序列化. 为什么需要序列化 netty 底层都是基于 ByteBuf 进行通讯的. 前面我们通过编码器/解码器专门为计算的入参/出参进行处理,这样方便我们直接使用 pojo. 但是有一个问题,如果想把我们的…
java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端
通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? java 从零开始手写 RPC (04) -序列化 前面我们的例子是一个固定的出参和入参,固定的方法实现. 本节将实现通用的调用,让框架具有更广泛的实用性. 基本思路 所有的方法调用,基于反射进行相关处理实现. 服务端 核心类 RpcServer 调整如下: serverBo…
java 从零开始手写 RPC (07)-timeout 超时处理
<过时不候> 最漫长的莫过于等待 我们不可能永远等一个人 就像请求 永远等待响应 超时处理 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? java 从零开始手写 RPC (04) 序列化 java 从零开始手写 RPC (05) 基于反射的通用化实现 必要性 前面我们实现了通用的 rpc,但是存在一个问题,同步获取响应的时候没有…
java 从零开始手写 RPC (01) 基于 websocket 实现
RPC 解决的问题 RPC 主要是为了解决的两个问题: 解决分布式系统中,服务之间的调用问题. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑. 这一节我们来学习下如何基于 websocket 实现最简单的 rpc 调用,后续会实现基于 netty4 的版本. 开源地址: https://github.com/houbb/rpc 完整流程 其中左边的Client,对应的就是前面的Service A,而右边的Server,对应的则是Service B. 下面一步一步详细解释一…
两种缓存淘汰算法LFU&LRU
LRU全称是Least Recently Used,即最近最久未使用的意思. LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰. 实现LRU 1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中.每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0.当数…
两种常见的缓存淘汰算法LFU&LRU
1. LFU 1.1. 原理 LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”. 1.2. 实现 LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序. 具体实现如下: 1. 新加入数据插入到队列尾部(因为引用计数为1): 2. 队列中的数据被访问后,引用计数增加,队列重新排序: 3. 当需要淘汰数据时,将已经排序的列表最后的数据块删除.…
java 手写 jvm高性能缓存
java 手写 jvm高性能缓存,键值对存储,队列存储,存储超时设置 缓存接口 package com.ws.commons.cache; import java.util.function.Function; public interface ICache { void expire(String key, int timeOutSecond); void leftPush(String key, Object value); void rightPush(String key, Object…
用Java写一个分布式缓存——缓存淘汰算法
前言 之前也用过一些缓存中间件,框架,也想着自己是不是也能用Java写一个出来,于是就有了这个想法,打算在写的过程中同步进行总结. 源码:weloe/Java-Distributed-Cache (github.com) 本篇代码: Java-Distributed-Cache/src/main/java/com/weloe/cache/outstrategy at master · weloe/Java-Distributed-Cache (github.com) Java-Distribut…
Redis 的缓存淘汰机制(Eviction)
本文从源码层面分析了 redis 的缓存淘汰机制,并在文章末尾描述使用 Java 实现的思路,以供参考. 相关配置 为了适配用作缓存的场景,redis 支持缓存淘汰(eviction)并提供相应的了配置项: maxmemory 设置内存使用上限,该值不能设置为小于 1M 的容量. 选项的默认值为 0,此时系统会自行计算一个内存上限. maxmemory-policy 熟悉 redis 的朋友都知道,每个数据库维护了两个字典: db.dict:数据库中所有键值对,也被称作数据库的 keyspace…