学习笔记整理
文章平均质量分 75
禾夕
这个作者很懒,什么都没留下…
展开
-
JVM基础知识
一.JVM运行时数据区包括哪几部分? 根据《深入理解Java虚拟机》可知,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。 程序计数器、Java栈和本地方法栈统称为栈区,这部分是每个线程私有的。堆和方法区是所有原创 2016-03-16 20:30:42 · 2603 阅读 · 2 评论 -
redis学习笔记(20)---发布与订阅
发布与订阅 redis的发布与订阅功能由以下几个命令实现: 序号命令及描述1SUBSCRIBE 订阅给定的一个或多个频道的信息2PUBLISH 将信息 message 发送到指定的频道 channel3PUBSUB 查看订阅与发布系统状态4PSUBSCRIBE 订阅一个或多个符合给定模式的频道 使用示例 客户端A通过subscribe命令订阅频道“news”,客户端B通过命令pu原创 2016-05-15 16:43:56 · 556 阅读 · 0 评论 -
redis学习笔记(4)---跳表zskiplist
跳表 跳表(skiplist)是一种有序的数据结构,它通过在每个节点中维护多个指向其它节点的指针,来达到快速访问的目的。 跳表查找的时间复杂度平均为O(lgn),最坏情况下退化为单链表的O(n)。在大部分情况下,跳表的效率可以和平衡树相媲美,但是由于跳表的实现更加简单,因此很多地方用跳表来代替平衡树。redis使用跳表作为有序集合键的底层实现。 跳表的定义在redis.h中 节原创 2016-05-04 19:05:27 · 2354 阅读 · 0 评论 -
redis学习笔记(5)---整数集合intset
intset 当一个集合中只包含整数,且这个集合中的元素数量不多时,redis就会使用整数集合intset作为集合的底层实现。整数集合的实现typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;encoding:当前整数集合的编码方式length:集原创 2016-05-04 20:07:03 · 1373 阅读 · 0 评论 -
redis学习笔记(6)---压缩列表ziplist
ziplist 压缩列表是列表键和哈希键的底层实现之一。 当一个列表键只包含少量表项,并且每个列表项要么是小整数,要么是较短的字符串 ,那么redis就会使用压缩列表来作为列表键的底层实现。 当一个哈希键只包含少量key-value对,且每个key-value对的key和value要么是小整数,要么是较短字符串,那么redis就会使用ziplist作为哈希键的底层实现。 ziplist原创 2016-05-05 11:21:34 · 7389 阅读 · 0 评论 -
redis学习笔记(7)---压缩字典zipmap
zipmap 在hashtable实现中,Redis引入了zipmap数据结构,保证在hashtable刚创建以及元素较少时,用更少的内存来存储,同时对查询的效率也不会受太大的影响。 zipmap利用字符串实现了简单的hash表,来存储少量key-value对。内存布局 zipmap的内存布局如下: 1)zmlen:1个字节 ,记录当前zipmap中key-value对原创 2016-05-06 10:17:24 · 3965 阅读 · 0 评论 -
redis学习笔记(8)---微线图sparkline
sparkline 微线图,即用一个一个信息点形成的图,类似于折线图。在表示时延的时候,就可以用微线图的形式来表示。示例: 微线图中的信息点可以有两种形式:”_-`” 和 “_o#” 两种情况最后形成的微线图分别如下所示: 可以看到,用一个一个的信息点,非常形象明了的形成了所需的折线图 sparkline的实现 sparkline中每个信息点的定义为:struc原创 2016-05-06 15:58:15 · 2724 阅读 · 0 评论 -
redis学习笔记(9)---对象robject
robject 之前对redis基本的数据结构分别进行了简单的介绍,包括字符串、链表、哈希表、整数集合、压缩列表、压缩字典等,但是redis并不是直接使用这些数据结构来实现key-value对数据库的,而是基于这些数据结构为每一个对象创建一个对象robject。robject对象再根据数据类型,来选择合适的底层数据结构来存储数据。robject的定义如下: typedef struct redi原创 2016-05-08 16:10:45 · 1345 阅读 · 0 评论 -
redis学习笔记(10)---ubuntu下redis的安装
环境:Ubuntu 3.11.3 版本:redis 3.0.71、Makesudo make1)如果出现错误:jemalloc/jemalloc.h: No such file or directory redis编译时,默认的allocator是jemalloc,而如果系统中没有安装jemalloc就会报错 解决办法是利用MALLOC环境变量设置默认的分配器。sudo make MALL原创 2016-05-08 16:25:10 · 667 阅读 · 0 评论 -
redis学习笔记(3)---字典dict
字典dict redis中的字典,即hash表,其实现与Java中的HashMap基本类似。同样是基于数组和链表的,通过“拉链法”来处理碰撞。 字典中的每一个key都是独一无二的,当要加入一个key-value对时,如果key在字典中已经存在,则会直接返回,而不会重新将其加入到字典中。字典的实现 hash节点的定义如下: typedef struct dictEntry { vo原创 2016-05-04 16:29:09 · 2447 阅读 · 0 评论 -
redis学习笔记(2)---链表adlist
adlist redis通过prev、next指针实现了双向链表adlist,并通过void*指向数据,用来实现泛型。 与list相关的命令主要有:LPOP,LPUSH,RPOP,RPUSH,LLEN 定义typedef struct listNode { //链表节点 struct listNode *prev; struct listNode *next;原创 2016-05-03 20:03:09 · 528 阅读 · 0 评论 -
redis学习笔记(1)---字符串sds
字符串 在C语言中,字符串通常有以下两种方式来表示:char *buf1="redis";char buf2[]="redis"; buf1是通过一个char指针指向一个字符串字面量,其内容是不能改变的,即不能使用buf1[3]=’c’;这种方式来改变字符串中的某个字符,要改变字符串内容只能通过给buf1指针重新赋值,因此不能重用buf1指向的内存空间。 buf2是一个char数组,末尾原创 2016-05-03 19:13:31 · 1032 阅读 · 0 评论 -
redis学习笔记(12)---server基本流程
server工作流程 当执行./redis-server后,redis数据库的server端就会启动。 然后就会执行redis.c中的main()函数 其中main()函数中的工作可以主要分为以下几个部分: 1、初始化server端的配置信息—initServerConfig() 2、解析运行时的命令参数,并根据参数进行处理,eg。./redis-server –help原创 2016-05-09 22:10:34 · 3959 阅读 · 0 评论 -
redis学习笔记(16)---过期键的设置与删除
expires 在之前数据库的结构中可以看到,每一个数据库除了用变量dict来保存所有的key-value对之外,还通过一个expires成员变量来保存所有设置了过期时间的keytypedef struct redisDb { dict *dict; /* 数据库 */ dict *expires; /* 过期键集合 */ ......} redisD原创 2016-05-11 15:23:45 · 6071 阅读 · 0 评论 -
redis学习笔记(13)---列表命令及实现
列表命令Redis中的List对象的类型为REDIS_LIST,是一种双向链表结构,主要支持以下几种命令:LPUSH 向列表左端添加元素,用法:LPUSH key valueRPUSH 向列表右端添加元素,用法:RPUSH key valueLPOP 从列表左端弹出元素,用法:LPOP keyRPOP 从列表右端弹出元素,用法:RPOP keyLLEN 获取列表中元素个数,用法:LLEN keyL原创 2016-05-10 14:57:18 · 2285 阅读 · 0 评论 -
redis学习笔记(14)---redis基本命令总结
概述Redis的键值可以使用物种数据类型:字符串,散列表,列表,集合,有序集合。本文详细介绍这五种数据类型的使用方法。本文命令介绍部分只是列举了基本的命令,至于具体的使用示例,可以参考Redis官方文档:Redis命令大全字符串类型字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为5转载 2016-05-10 15:11:45 · 7209 阅读 · 0 评论 -
redis学习笔记(15)---redis数据库
创建数据库 在redis的server端,维护着多个数据库(默认为16个)。 所有的数据库以数组的形式保存在redisServer结构中 struct redisServer { ...... redisDb *db; //数据库数组 int dbnum; //数据库的个数 ...... }; 在initServer()初始化server时,会根据db原创 2016-05-10 20:25:06 · 4548 阅读 · 1 评论 -
redis学习笔记(17)---RDB持久化
RDB文件 redis是一个基于内存的数据库,数据库中的所有数据都是保存在内存中的。 当进程退出时,内存中的数据库状态也会全部丢失。为了解决这个问题,redis提供了RDB持久化功能,RDB持久化可以将redis保存在内存中的数据存储到磁盘上,避免数据意外丢失。 通过该文件,可以还原RDB文件生成时的数据库状态。 RDB文件的创建 有两个命令可以生成RDB文件:SAVE和BG原创 2016-05-12 17:16:59 · 1163 阅读 · 0 评论 -
redis学习笔记(18)---事件
事件 之前在redis学习笔记(12)—server基本流程 中,对redis的事件机制已经进行了简单的介绍。 redis服务器是一个事件驱动程序,server需要处理两类事件: 1)文件事件:如server与client之间的通信 2)时间事件:在特定的时间点执行,如serverCron函数 IO复用机制 redis的IO多路复用的实现都是通过封装select、epoll等I原创 2016-05-12 20:25:56 · 869 阅读 · 0 评论 -
redis学习笔记(19)---事务
事务的性质ACID 一般数据库的事务需要满足ACID四条性质: redis事务 为了保持简单,redis事务保证了其中的一致性和隔离性; 不满足原子性和持久性; 1)原子性:redis事务在执行的中途遇到错误,不会回滚,而是继续执行后续命令;(违反原子性) 2)持久性:事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能 Redis 事务可以原创 2016-05-13 16:38:12 · 515 阅读 · 0 评论 -
redis学习笔记(11)---字符串命令及实现
对象类型与编码方式 对于字符串类型的命令,redis数据库会为每个对象创建一个字符串类型(REDIS_STRING)的对象。 对于字符串类型的对象,可以支持三种编码方式:#define REDIS_ENCODING_RAW 0 /* Raw representation */#define REDIS_ENCODING_INT 1 /* Encoded as integ原创 2016-05-09 16:18:39 · 2193 阅读 · 0 评论