自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qinm的专栏

一步一个脚印。。

  • 博客(20)
  • 收藏
  • 关注

原创 redis学习笔记(20)---发布与订阅

发布与订阅  redis的发布与订阅功能由以下几个命令实现: 序号命令及描述1SUBSCRIBE 订阅给定的一个或多个频道的信息2PUBLISH 将信息 message 发送到指定的频道 channel3PUBSUB 查看订阅与发布系统状态4PSUBSCRIBE 订阅一个或多个符合给定模式的频道 使用示例  客户端A通过subscribe命令订阅频道“news”,客户端B通过命令pu

2016-05-15 16:43:56 537

原创 redis学习笔记(19)---事务

事务的性质ACID  一般数据库的事务需要满足ACID四条性质:    redis事务  为了保持简单,redis事务保证了其中的一致性和隔离性;   不满足原子性和持久性;  1)原子性:redis事务在执行的中途遇到错误,不会回滚,而是继续执行后续命令;(违反原子性)  2)持久性:事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能  Redis 事务可以

2016-05-13 16:38:12 487

原创 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 841

原创 redis学习笔记(17)---RDB持久化

RDB文件  redis是一个基于内存的数据库,数据库中的所有数据都是保存在内存中的。   当进程退出时,内存中的数据库状态也会全部丢失。为了解决这个问题,redis提供了RDB持久化功能,RDB持久化可以将redis保存在内存中的数据存储到磁盘上,避免数据意外丢失。   通过该文件,可以还原RDB文件生成时的数据库状态。    RDB文件的创建  有两个命令可以生成RDB文件:SAVE和BG

2016-05-12 17:16:59 1124

原创 redis学习笔记(16)---过期键的设置与删除

expires  在之前数据库的结构中可以看到,每一个数据库除了用变量dict来保存所有的key-value对之外,还通过一个expires成员变量来保存所有设置了过期时间的keytypedef struct redisDb { dict *dict; /* 数据库 */ dict *expires; /* 过期键集合 */ ......} redisD

2016-05-11 15:23:45 6014

原创 redis学习笔记(15)---redis数据库

创建数据库  在redis的server端,维护着多个数据库(默认为16个)。   所有的数据库以数组的形式保存在redisServer结构中 struct redisServer { ...... redisDb *db; //数据库数组 int dbnum; //数据库的个数 ...... };  在initServer()初始化server时,会根据db

2016-05-10 20:25:06 4432 1

转载 redis学习笔记(14)---redis基本命令总结

概述Redis的键值可以使用物种数据类型:字符串,散列表,列表,集合,有序集合。本文详细介绍这五种数据类型的使用方法。本文命令介绍部分只是列举了基本的命令,至于具体的使用示例,可以参考Redis官方文档:Redis命令大全字符串类型字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为5

2016-05-10 15:11:45 7183

原创 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 2242

原创 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 3873

原创 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 2129

原创 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 633

原创 redis学习笔记(9)---对象robject

robject  之前对redis基本的数据结构分别进行了简单的介绍,包括字符串、链表、哈希表、整数集合、压缩列表、压缩字典等,但是redis并不是直接使用这些数据结构来实现key-value对数据库的,而是基于这些数据结构为每一个对象创建一个对象robject。robject对象再根据数据类型,来选择合适的底层数据结构来存储数据。robject的定义如下:  typedef struct redi

2016-05-08 16:10:45 1301

原创 redis学习笔记(8)---微线图sparkline

sparkline  微线图,即用一个一个信息点形成的图,类似于折线图。在表示时延的时候,就可以用微线图的形式来表示。示例:  微线图中的信息点可以有两种形式:”_-`” 和 “_o#”   两种情况最后形成的微线图分别如下所示:         可以看到,用一个一个的信息点,非常形象明了的形成了所需的折线图 sparkline的实现  sparkline中每个信息点的定义为:struc

2016-05-06 15:58:15 2685

原创 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 3908

原创 redis学习笔记(6)---压缩列表ziplist

ziplist  压缩列表是列表键和哈希键的底层实现之一。   当一个列表键只包含少量表项,并且每个列表项要么是小整数,要么是较短的字符串 ,那么redis就会使用压缩列表来作为列表键的底层实现。   当一个哈希键只包含少量key-value对,且每个key-value对的key和value要么是小整数,要么是较短字符串,那么redis就会使用ziplist作为哈希键的底层实现。 ziplist

2016-05-05 11:21:34 7342

原创 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 1329

原创 redis学习笔记(4)---跳表zskiplist

跳表  跳表(skiplist)是一种有序的数据结构,它通过在每个节点中维护多个指向其它节点的指针,来达到快速访问的目的。   跳表查找的时间复杂度平均为O(lgn),最坏情况下退化为单链表的O(n)。在大部分情况下,跳表的效率可以和平衡树相媲美,但是由于跳表的实现更加简单,因此很多地方用跳表来代替平衡树。redis使用跳表作为有序集合键的底层实现。   跳表的定义在redis.h中    节

2016-05-04 19:05:27 2325

原创 redis学习笔记(3)---字典dict

字典dict  redis中的字典,即hash表,其实现与Java中的HashMap基本类似。同样是基于数组和链表的,通过“拉链法”来处理碰撞。   字典中的每一个key都是独一无二的,当要加入一个key-value对时,如果key在字典中已经存在,则会直接返回,而不会重新将其加入到字典中。字典的实现  hash节点的定义如下: typedef struct dictEntry { vo

2016-05-04 16:29:09 2416

原创 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 498

原创 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 1003

空空如也

空空如也

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

TA关注的人

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