摘要:概述 1.数据库结构 2.数据库键空间 3.键生存时间 4.持久化对过期键处理 5.数据库通知 1.数据库结构 Redis服务器将所有server状态都保存在数据结构中的db数组,服务器会根据dbnum来决定创建多个个数据库,默认为16个。 创建db后,如下所示: 同样的在redisClient的数
阅读全文
09 2017 档案
摘要:概述 1.数据库结构 2.数据库键空间 3.键生存时间 4.持久化对过期键处理 5.数据库通知 1.数据库结构 Redis服务器将所有server状态都保存在数据结构中的db数组,服务器会根据dbnum来决定创建多个个数据库,默认为16个。 创建db后,如下所示: 同样的在redisClient的数
阅读全文
摘要:概述 前面几张介绍了一些Redis的数据结构,比如SDS,集合,字典等,但是Redis并不会直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象包括字符串对象,列表对象,哈希对象,集合对象和有序集合对象。每种对象都用到了一种或多种前面介绍的数据结构。 通过不同类型
阅读全文
摘要:概述 1.intset概述 2.intset实现 3.intset升级 intset概述 整数集合是Redis集合键的底层实现之一,当值都为整数时,redis就会选择整数集合作为底层实现。 可以保存int16_t,int32_t,int64_t类型的整数值,并且集合中不会出现重复元素。 intset
阅读全文
摘要:概述 1.跳跃表的介绍 2.跳跃表的数据结构 跳跃表的介绍 跳跃表是一个有序的数据结构,通过在每个节点维护多个执行其他节点的指针,从而达到快速访问的目的。 在Redis中只有两个地方用到了跳跃表,一个是有序集合键,另一个是在集群节点作为Redis内部的数据结构。具体源码在本章不介绍了,感兴趣可以去查
阅读全文
摘要:概述 1.字典介绍 2.字典实现 3.字典API 字典介绍 Redis里面很多地方用到了字典,比如Redis数据库就是使用字典作为底层实现的,哈希键的底层实现也是使用的字典。Redis字典底层使用的哈希表来实现,每个哈希表节点就保存了一个键值对。hash表的原理可以参考java里面的hashmap介
阅读全文
摘要:概述 1.链表介绍 2.链表API 链表介绍 链表在Redis中的应用非常广泛,比如列表键list的底层实现就是使用的链表。除了列表键外,Redis的发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还使用了链表来保存客户端连接状态,以后使用链表来构建客户端输出缓冲区。 链表在Red
阅读全文
摘要:概述 1.SDS介绍 2.SDS API 3.SDS与C的比较 SDS介绍 在C语言中,用来表达字符串的方式通常有两种, char *buf1="redis"; char buf2[]="redis"; 方式1,通过一个char指针指向一个字符串字面量,起内容无法改变,即无法通过buf1[1]='c
阅读全文
摘要:摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用My
阅读全文
摘要:MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系
阅读全文
摘要:1.什么是存储过程?有哪些优缺点? 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。 由于存储过程在创建时即
阅读全文
摘要:概述 1.Mysql锁介绍 2.MyISAM锁 3.InnoDB锁 Mysql锁介绍 Mysql不同的存储引擎支持不同的锁机制,根据不同的引擎划分,mysql锁机制分类如下: 很明显可以看到,MyISAM不支持行锁,而InnoDB支持行锁,可能还有人说BDB引擎的页锁呢? 这里不做介绍,BDB已经被
阅读全文
摘要:mysql的查询效率提升通常可以通过几个方面来回答: 数据库设计: 建立索引: 1.避免全表扫描,在设计where,order by的列上建立索引; 2.索引对null值是不生效的,如果查询语句用到了null,则查询引擎会放弃使用索引,比如 select a from table where c i
阅读全文
摘要:之前看到一个面试题,静态工厂方法有什么优缺点,这个表示说不上来。。。 惭愧 所以单独开一篇介绍下静态工厂方法的特点,先看代码实现。这里举例了一个静态工厂方法的实现 先看一下有什么缺点: 1.static的静态工厂方法和普通的静态方法没什么明显区别; 2.在继承Fruit的时候,必须将Fruit的构造
阅读全文
摘要:JDK1.8新增的功能 JDK1.8新增的功能 字符流和字节流的区别,使用场景,相关类 字符流和字节流的区别,使用场景,相关类 那是用字符流好还是字节流好? 当然是字节流,所有文件在硬盘或文件都是以字节流方式进行的,而字符只有在内存中是。 线程安全的概念,实现线程安全的几种方法 线程安全的概念,实现
阅读全文
摘要:概述 1.Semaphore介绍 2.Semaphore源码分析 3.Semaphore示例 Semaphore介绍 Semaphore是一个计数信号量,在计数器不为0的时候对线程放行,一旦计数器为0,所有新请求的线程都会被阻塞,包括增加请求到已经许可的线程,也就是说Semaphore是不可重入的。
阅读全文
摘要:概述 1.CyclicBarrier介绍 2.CyclicBarrier源码分析 3.CyclicBarrier示例 CyclicBarrier介绍 CyclicBarrier翻译过来也叫栅栏,意思很明显,就是一组线程相互等待,均到达栅栏的时候,再运行。CyclicBarrier是可以重复使用的,而
阅读全文
摘要:概述 1.CountDownLath介绍 2.CountDownLatch源码分析 3.CountDownLatch示例 CountDownLath介绍 CountDownLatch是闭锁的一种实现,它允许一个或多个线程等待某一事件发生。CountDownLatch有一个正数计数器,countdow
阅读全文
摘要:概述 1.Condition介绍 2.Condition源码分析 3.Condition示例 Condition介绍 在互斥锁ReentrantLock文章中的生产者消费者示例中用到Condition了,分布设置生产者和消费者的Condition,即条件仓库满时,生产者等待,唤醒消费者;条件仓库为空
阅读全文
摘要:概述 1.公平锁概念 2.ReentrantLock数据结构 3.公平锁的获取过程 4.公平锁释放 公平锁概念 讲解公平锁会涉及到一些理论性的概念,先在这里做个说明。 1.AQS--指AbstractQueuedSynchronizer类 AQS是java中管理锁的抽象类,锁的很多公共方法都是在AQ
阅读全文
摘要:概述 1.ReentrantLock简介 2.ReentrantLock示例 3.ReentrantLock与Condition示例 ReentrantLock简介 ReentrantLock是一个可重入的互斥锁,又称独占锁; 即ReentrantLock是同一时间点只能被一个线程持有,可重入的意思
阅读全文
摘要:概述 1.wait、notify介绍,与锁的关系; 2.wait、notify、notifyAll的使用; 3.生产者消费者通过wait、notify来实现 wait、notify介绍,与锁的关系 1.wait、notify、notifyAll不属于Thread类,而是属于object类,也就是说每
阅读全文
摘要:概要 1.start()与run()介绍 2.start()与run()源码查看 3.start()与run()测试 start()与run()介绍 1.通过我们在启动线程的时候使用的start,为什么不用run呢? 因为start()会新开一个线程来执行;而run只是一个普通想法,相当于当前线程来
阅读全文
摘要:概要 1.Thread与Runnable的简单介绍 2.Thread与Runnable的区别 3.Thread与Runnable举例 Thread与Runnable的简介 Runnable就是一个接口,实现接口就需要实现run方法; Thread其实也是实现了Runnable接口,如源码所示,在继承
阅读全文
摘要:最近招聘经常会问到别人i++和++i的区别,于是这里来总结一下,当然除了那个大家都知道的先加后加的区别; 在性能上的区别 1.i++,会创建一个tmp值来保存i值,所有会额外带来开销,而++i不会。当然这个性能区别不会特别明显,基本上可以忽略。 原子性比较 1.i++和++i是否都具有原子性? 答案
阅读全文
|