自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小识的博客

放弃很容易,但坚持一定很酷

  • 博客(12)
  • 资源 (14)
  • 收藏
  • 关注

原创 Redis源码解析:数据结构详解-skiplist

跳表是个什么数据结构?本文的很多内容参考自如下文章《Redis 为什么用跳表而不用平衡树?》,为了加深理解,所以用自己的话复述一遍。如图所示,redis中的zset在元素少的时候用ziplist来实现,元素多的时候用zskiplist来实现。那么skiplist是一个什么样的数据结构呢?skiplist(跳表)是一种为了加速查找而设计的一种数据结构。它是在有序链表的基础上发展起来的。如下图是一个有序链表(最左侧的灰色节点为一个空的头节点),当我们要插入某个元素的时候,需要从头开始遍历直到找到该元.

2021-01-30 20:53:35 1861 3

原创 Redis源码解析:数据结构详解-intset

介绍intset是Redis中set的底层数据结构,当集合中全为整数,并且元素数据不多时,会用intset来实现set,inset和ziplist一样,都是一块连续的存储空间typedef struct intset { // 编码方式 uint32_t encoding; // 元素数量 uint32_t length; // 保存元素的数组 int8_t contents[];} intset;contents:contents数组是整数集合的底层.

2021-01-27 23:26:46 880

原创 Redis源码解析:数据结构详解-quicklist

介绍在redis 3.0版本及以前,采用压缩链表(ziplist)以及双向链表(linkedlist)作为list的底层实现。当元素少时用ziplist,当元素多时用linkedlist在redis 3.0版本以后,采用quicklist作为list的底层实现quicklist是一个双向链表,链表中每个节点是一个ziplist假如说一个quicklist包含4个quickListNode,每个节点的ziplist包含3个元素,则这里list中存的值为12个。quicklist为什么要这样设计.

2021-01-24 23:49:01 1372

原创 Redis源码解析:缓存淘汰策略

介绍Redis是一个内存数据库,当Redis使用的内存超过物理内存的限制后,内存数据会和磁盘产生频繁的交换,交换会导致Redis性能急剧下降。所以在生产环境中我们通过配置参数maxmemoey来限制使用的内存大小。当实际使用的内存超过maxmemoey后,Redis提供了如下几种可选策略。noeviction:写请求返回错误volatile-lru:使用lru算法删除设置了过期时间的键值对volatile-lfu:使用lfu算法删除设置了过期时间的键值对volatile-random:在设置.

2021-01-24 12:47:39 12796 17

原创 Redis源码解析:dict与迭代器

介绍在之前的文章中我们提到,Redis中的数据是放在一个字典中的。例如当我们执行如下命令后,redis的字典结构如下set bookName redis;rpush fruits banana apple;Redis中hash也用dict来实现的,zset中存储value和score值的映射关系也是用dict来实现的。其实Reids中dict的实现和Java中HashMap的实现很类似,也是采用数组+链表的形式实现的。结构如下typedef struct dict { // 类型特定.

2021-01-16 18:32:08 1425 1

原创 Redis源码解析:数据结构详解-sds

介绍我们知道Redis是一个键值对数据库,当你执行如下命令时set testKey testValue;rpush fruits banana apple;其中的键就是用sds(Simple Dynamic String,简单动态字符串)来实现的,redis中string类的值也是用SDS实现的(如上面的testValue)。我们来看一下SDS的底层数据结构是啥?3.0版本及以前struct sdshdr { // buf数组中已使用字符的数量 unsigned int len;.

2021-01-16 15:13:48 1074

原创 Redis源码解析:Redis持久化策略详解(一)

介绍Redis中的数据存在内存中,如果突然宕机,那么内存中的数据将全部丢失。如果数据能从后端数据库恢复还好,如果数据只存在Redis中,那数据就全丢失了。并且如果请求量很多,MySQL服务器的压力会很大。所以最好的方式是对数据进行持久化,并能当宕机的时候能快速恢复在Redis中有如下两种持久化方式,rdb快照和aof日志RDBrdb就是对当前数据库的状态做一个快照,将某个阶段的数据通过二进制文件保存下来。你可以类比照相。内存中的数据越多,生成快照的时候就越长,同时将快照写入磁盘耗费的时间也越长。.

2021-01-10 15:48:49 1905

原创 Redis源码解析:数据结构详解-ziplist

压缩列表的数据结构zset和hash容器对象在元素个数较少的时候,采用压缩列表(ziplist)来存储。压缩列表是一块连续的内存空间。结构如下属性类型长度用途zlbytesuint32_t4字节整个压缩列表占用字节数zltailuint32_t4字节最后一个元素距离压缩列表起始位置的偏移量,用于快速定位最后一个元素zllenuint16_t2字节压缩列表的节点数量,值小于UINT16_MAX(65535)时,这个属性值就是压缩列表包含节点的数量,.

2021-01-09 20:56:35 900

原创 Redis源码解析:数据明明都过期了,为啥还占着内存?

介绍我们可以给Redis中的key设置过期时间,那么当key过期了,它在什么时候会被删除呢?如果让我们写Redis过期策略,我们会想到如下三种方案定时删除,在设置键的过期时间的同时,创建一个定时器。当键的过期时间来临时,立即执行对键的删除操作惰性删除,每次获取键的时候,判断键是否过期,如果过期的话,就删除该键,如果没有过期,则返回该键定期删除,每隔一段时间,对键进行一次检查,删除里面的过期键定时删除策略对CPU不友好,当过期键比较多的时候,Redis线程用来删除过期键,会影响正常请求的响应.

2021-01-09 18:44:46 1250 1

原创 Redis源码解析:主从复制

介绍在生产环境中,为了系统的可靠性,我们会对Redis搭建主从。这样当一个实例发生宕机,另一个实例中还有数据,还能继续提供服务。主从库之间采用的是读写分离的模式。读操作:主库,从库都可以执行写操作:只能主库上执行,主库将操作同步给从库因为主从库都可以接收读请求,提高了系统的QPS。那么主从库之间如何进行数据同步呢?全量复制我们可以通过replicaof命令或者replicaof设置来让redis形成主从库的关系(redis 5.0之前使用slaveof命令)假设现在有两个实例,实例一(17.

2021-01-09 18:38:18 994

原创 面试官:Synchronized和Lock接口有哪些区别?

Lock接口的使用既然有了synchronized,为啥还要提供Lock接口呢?也许你会说Lock接口比synchronized性能高。在jdk1.5之前确实如此,但是在jdk1.6之后,两者性能差不多了。直接来看Lock接口的定义,看看比synchronized多了哪些功能?public interface Lock { // 加锁 void lock(); // 能够响应中断 void lockInterruptibly() throws InterruptedExcepti.

2021-01-03 19:00:29 920

原创 面试官:同样是注册中心,Zookeeper和Eureka有哪些区别?

CAP定理在分布式系统的发展中,影响最大的莫过于CAP定理了,是分布式系统发展的理论基石。2000年,加州大学的计算机科学家 Eric Brewer提出了CAP猜想2002 年,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP 猜想,CAP猜想成为了CAP定理CAP定理,简单来说就是分布式系统不可能同时满足Consistency 一致性、Availability 可用性、Partition Tolerance 分区容错性三个要素Consisten.

2021-01-01 16:14:29 2930 1

mybatis-generator-core-1.3.5.jar

支持接口和XML更名的mybatis-generator,具体使用参考 https://blog.csdn.net/zzti_erlie/article/details/99606620

2019-08-15

MongoDB权威指南第2版(书签,高清).zip

MongoDB权威指南第2版(书签,高清).zip,MongoDB权威指南第2版(书签,高清).zip

2019-05-14

Linux系统命令及Shell脚本实践指南

Linux系统命令及Shell脚本实践指南,书签,清晰,完整版

2019-04-17

Maven实战(高清完整带书签)

Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签

2018-01-09

将doc文件批量转为docx文件,用python将doc文件批量转为docx文件

用python将doc文件批量转为docx文件,用python将doc文件批量转为docx文件,

2017-12-28

Spring MVC学习指南

Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。, 本书重在讲述如何通过Spring MVC来开发基于Java的Web应用。全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,本书还配有丰富的示例以供读者练习和参考。, 本书是一本Spring MVC的教程,内容细致、讲解清晰,非常适合Web开发者和想要使用Spring MVC开发基于Java的Web应用的读者阅读。

2017-10-13

用Python将Word中的内容写入Excel

用Python将Word中的内容写入Excel

2017-08-28

Qt实现多语言的切换

Qt实现国际化,能切换程序的语言

2017-02-25

Qt加载字体文件删除字体文件

Qt加载自己的字体,不用系统提供的QFontComboBox

2017-02-25

Qt实现字体文件的加载和删除

Qt实现字体文件的加载和删除

2017-02-25

Qt实现语言切换

Qt实现语言切换

2017-02-23

Qt5串口助手V2.0(能记录上次打开的文件)

Qt5串口助手V2.0(能记录上次打开的文件)

2016-09-27

Qt5串口助手

用Qt5自身的类库开发的串口助手

2016-09-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除