- 博客(6)
- 资源 (2)
- 收藏
- 关注
原创 Redis数据结构(一):RedisObject、String(SDS)
RedisObject 所有的 Redis 对象 都有下面的这个头结构。不同的对象具有不同的类型 type (4bit)。同一个类型的 type 会有不同的存储形式 encoding (4bit)。为了记录对象的 LRU 信息,使用了 24 个 bit 来记录 LRU 信息。每个对象都有个引用计数,当引用计数为零时,对象就会被销毁,内存被回收。ptr 指针将指向对象内容(body)的具体存储位置。这样一个 RedisObject 对象头结构 需要占据 16 字节的存储空间。 struct Redis
2020-07-08 21:30:00
607
原创 LRU缓存java实现
算法 LRU 缓存机制可以通过哈希表配合双向链表实现,插入缓存或者获取缓存时移动相对应节点至链表尾部,起到保存访问顺序作用。哈希表可以实现O(1)时间复杂度查找链表节点,对于移动链表节点,节点保存了前置指针和后置指针,可以实现O(1)时间复杂度的删除与插入。具体操作如下: 缓存插入 判断哈希表思否存在该该key,如果存在,获取该链表节点,并更新value;如果不存在则将键值对封装成新的链表节点;将该节点加入哈希表并插入链表尾部,tail指针指向当前节点,如果插入时缓存为空,则head与ta
2020-07-05 23:20:34
178
原创 二叉树的遍历
二叉树 二叉树(Binary tree)是树形结构的一个重要类型,二叉树的特点是每个结点最多只能有两棵子树,且有左右之分,下图所示就是一棵二叉树。 先序遍历 前序遍历(DLR)是二叉树遍历的一种,也叫做先根遍历、前序遍历、前序周游,可记做根左右。前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树。 对于上图中的二叉树,先序遍历结果为:1、2、4、5、3、6、7 中序遍历 中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。可记做左根右,中序遍历首先遍
2020-06-30 22:37:34
196
原创 Redis的淘汰策略
Redis的淘汰策略 当 Redis 内存超出物理内存限制(maxmemory)时,内存的数据会开始和磁盘产生频繁的交换(swap),使 Redis 的性能急剧下降。Redis 提供了配置参数 maxmemory 来限制内存超出期望大小。当实际内存超出 maxmemory 时, Redis 提供了几种可选策略(maxmemory-policy)来让用户自己决定该如何腾出新的空间以继续提供读写服务。 noeviction 不会继续服务写请求(del 请求可以继续服务),读请求可以继 续进行。
2020-06-29 23:03:14
231
原创 Redis的过期策略
过期策略 过期策略通常有以下三种: 主动删除 每个设置过期时间的key创建一个定时器,过期会立即清除。该策略可以及时清除过期的数据,对内存友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 优点:立即清除过期的数据,对内存友好 缺点:消耗CPU资源 惰性删除 当访问key时,才判断该key是否已过期,过期则清除。该策略最大化地节省了CPU资源,却对内存不友好。极端情况下会出现大量的过期key没有再次被访问,无法清除,占用大量内存。 优点:基本不耗CPU资源
2020-06-29 21:53:13
200
原创 IP转换二进制
8位二进制每位从左到右对应的权值分别是 128、64、32、16、8、4、2、1,即2^(n-1),n为位数。 1 1 1 1 1 1 1 1 128 64 32 16 8 4 2 1 2^(8-1) 2^(7-1) 2^(6-1) 2^(5-1) 2^(4-1) 2^(3-1) 2^(2-1) 2^(1-1) 一个256以内的数给你化为二进制,都可以分解为权值相加,对应的...
2018-12-19 10:40:47
12731
1
Akka应用模式-分布式应用程序设计实践指南.pdf
2018-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人