SQL和NOSQL
文章平均质量分 96
杨博东的博客
阿里云数据库-NoSQL组,开源贡献者,Valkey Contributor,Valkey-Java Client Maintainer。
展开
-
跬步千里 —— 阿里云Redis bitfield命令加速记
简介: 在一次阿里云客户问题解决中,通过给Redis添加bitfield_ro命令,解决了Redis官方bitfield命令无法加速执行的问题,向客户交付了满意的答卷。本文详细描述了阿里云是怎么进行产品中每一点细小的功能改进和体验优化,并持续地反馈社区的全过程。https://developer.aliyun.com/article/757841...转载 2020-05-07 11:47:05 · 602 阅读 · 0 评论 -
Redis源码分析(dict)
一、dict 简介dict (dictionary 字典),通常的存储结构是Key-Value形式的,通过Hash函数对key求Hash值来确定Value的位置,因此也叫Hash表,是一种用来解决算法中查找问题的数据结构,默认的算法复杂度接近O(1),Redis本身也叫REmote DIctionary Server (远程字典服务器),其实也就是一个大字典,它的key通常来说是String类型的,原创 2017-11-07 14:35:08 · 10419 阅读 · 9 评论 -
Redis源码分析(sds)
一、SDS简介sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心。String是字符串的意思。说白了就是用C语言自己封装了一个字符串类型,这个项目由Redis作者antirez创建,作为Redis中基本的数据结构之一,现在也被独立出来成为了一个单独的项目,项目地址位于这里。sds 有两个版本,在原创 2017-11-01 23:09:21 · 7432 阅读 · 3 评论 -
Redis源码分析(skiplist)
源码版本: redis-4.0.1 源码位置:server.h :zskiplistNode和zskiplist的数据结构定义。 t_zset.c: 以zsl开头的函数是SkipList相关的操作函数。一、跳跃表简介跳跃表(SkipList),其实也是解决查找问题的一种数据结构,但是它既不属于平衡树结构,也不属于Hash结构,它的特点是元素是有序的。有关于跳跃表的更多解释,大家可以参考 张原创 2017-11-13 19:47:20 · 4361 阅读 · 0 评论 -
Redis源码分析(intset)
源码版本:4.0.1 源码位置:intset.h:数据结构的定义intset.c:创建、增删等操作实现 1. 整数集合简介intset是Redis内存数据结构之一,和之前的 sds、 skiplist、dict、adlist 等通用数据相比,它是Redis特有的,用来实现Redis的Set结构(当元素较小且为数字类型时),它的特点有:元素类型只能为数字。元素有三种类型:int16_t、i原创 2017-11-30 00:52:45 · 3902 阅读 · 0 评论 -
Redis监控调研
1 调研目的主要的目的是想调研各大云平台有关Redis监控功能的实现,但是最后我发现各大云平台提供的监控功能都比较基础,比如我想看诸如访问频率较高的HotKey、占用内存较大的Bigkey等指标,它们都没有提供,一部分Redis监控的开源工具实现了这样的功能,但是实现方法实用性不大,见后文汇总。2 调研情况2.1 常见公有云平台监控我所调研的阿里云、腾讯云、青云这三个平台给用户提供的监控信息均是采用原创 2017-11-15 22:12:22 · 1932 阅读 · 0 评论 -
Kioskcached(2) 之 使用tcmalloc 替换 ptmalloc
前言我在 Kioskcached(1)之 Memcached & Redis & Kioskcached 性能测试对比 中找到的一个问题是 malloc,对于一个内存型数据库,很容易理解,当数据量不断增大的过程中,我们势必需要大量的malloc内存,但是如果malloc不给力,性能就会受到影响。glibc中使用ptmalloc作为默认的内存分配器,但是还有一些性能更好的第三方工具,例如 TCMa原创 2017-03-10 12:51:06 · 1207 阅读 · 1 评论 -
Redis INFO 命令详解
没有代码的解释不是解释,没有deadline的任务不是任务,没有流程图或分享的源码阅读不是源码阅读,没有报告的性能测试不是性能测试。 —— 漠冰 曰这篇文章打算作为INFO命令的输出整理汇总,目前还未全部完成…1. 环境代码版本:redis-4.0.6 工具:本地用CLion打开,增加CMakeLists.txt就可以调试了原创 2018-01-27 19:03:44 · 7657 阅读 · 0 评论 -
Redis 专栏(使用介绍、源码分析、常见问题...)
一、介绍相关说Redis : 介绍Redis特性,使用场景,使用Jedis操作Redis等。二、源码分析1. 数据结构Redis源码分析(sds):Redis自己封装的C语言字符串类型。Redis源码分析(dict):字典的实现,Hash表。 Redis源码分析(adlist):Redis中的双向链表。 Redis源码分析(skiplist) :Redis 中的跳跃表,原创 2017-11-14 13:08:51 · 1723 阅读 · 1 评论 -
Redis源码分析(adlist)
源码版本redis-4.0.1一、adlist简介Redis中的链表叫adlist(A generic doubly linked list implementation 一个通用的双端链表实现),和普通单链表相比,它的方向可以向前或者向后,这是由于数据结构中定义了next和prev两个指针决定的,下面看下它的数据结构实现。二、数据结构定义typedef struct listNode {原创 2017-11-08 13:52:36 · 4793 阅读 · 0 评论 -
Redis INFO CPU 信息详解
一、INFO CPU通过INFO CPU命令可以查看Redis进程对于CPU的使用情况,如下: 这几个字段的含义如下所示:used_cpu_sys: System CPU consumed by the Redis server used_cpu_user:User CPU consumed by the Redis serverused_cpu_sys_children: System C原创 2017-10-11 21:30:43 · 7495 阅读 · 7 评论 -
ShardedJedisPipeline 源码分析
一、什么是pipeline?什么是ShardedJedis?由于pipeline和ShardedJedis的介绍和源码分析在网上已经有了,本文就不再赘述,直接给出链接:pipeline的介绍: http://blog.csdn.net/freebird_lb/article/details/7778919pipeline源码分析: http://blog.csdn.net/ouyang11122原创 2017-06-18 10:49:45 · 3941 阅读 · 0 评论 -
MySQL 表的操作语句(2)
一:MySQL支持的数据类型1:CHAR和TEXT :分别表示定长的和可变长的串。CHAR:1-255个字符的定长串,它的长度必须在创建时指定。TEXT:最大长度为64K的文本VARCHAR:长度为0-255之间的可变字符串。//MySQL处理不定长的串比处理定长的串的效率低的多。2:数值,取值范围越大,需要的字节数越多,除过BIT和BOOLEAN之外,所有的都支持有符号和无符号两种类型。原创 2016-04-05 19:41:56 · 659 阅读 · 0 评论 -
MySQL 查询语句(1)
一:创建数据库 1:CREATE DATABASE test; //创建数据库test2:SHOW DATABASES; //查看目前数据库中可用的数据库,默认会有系统数据库3:USE test; //将test设置为目前操作的数据库4:SHOW TABLES; //显示一个数据库中的所有表5:SHOW COLUMNS FROM te原创 2016-03-23 10:00:50 · 516 阅读 · 0 评论 -
最简单的数据库“范式”教程
既然都叫最简单的数据库“范式”教程,我觉得它一定要满足这个要求:看完这篇博客,你一定会明白数据库的“范式”和那些诸如“完全函数依赖”,“部分函数依赖”,“传递函数依赖”等烦人的概念,前提是你得跟着我的思路认真的读完它,好,准备好你的半个小时了吗?我们开始。目录什么是范式?贯穿全文的一个例子。第一范式(1NF)几个重要的概念。第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四原创 2016-06-11 10:53:15 · 17583 阅读 · 19 评论 -
数据库乱弹
这篇博客我就是想把期末数据库复习过程中遇到的自己平时不太注意的点总结备忘下,以后用到的时候翻翻。1:数据存储在历史演变的过程中经历了下面几个管理阶段: 人工管理阶段文件系统管理阶段数据库管理阶段2:数据模型:对现实世界数据的抽象。 3:数据模型的三要素:数据结构,数据操作,数据的完整性。 4:关系型数据库的三级模式和两级映象。外模式:外模式外模式/模式印象:保证数据逻辑独立性模式原创 2016-07-18 19:30:57 · 584 阅读 · 0 评论 -
Kioskcached(1)之 Memcached & Redis & Kioskcached 性能测试对比
前言:本文仅仅是作者自己在学习过程中的一次实验而已,或许因为各种因素会导致实验结果与你之前的认知不太一样,因此请你带着批判的眼光看待本文(本文不具有实际环境的参考性)。一:测试目的在了解了一些NoSQL的知识之后,我发现Memcached是一个多线程的模型,对于一个NoSQL数据库,如果不考虑数据持久化功能(读写磁盘),剩余的内存操作应该是非常快的。但是多线程就意味着需要互斥和同步,锁是必须的,因此原创 2017-03-09 01:00:45 · 717 阅读 · 0 评论 -
Redis网络库源码分析(1)之介绍篇
一、前言Redis网络库是一个单线程EPOLL模型的网络库,和Memcached使用的libevent相比,它没有那么庞大,代码一共2000多行,因此比较容易分析。其实网上已经有非常多有关这个网络库的分析了,但是我觉得它们的不足在于只是分析了各个文件中各个函数的单独含义,而没有将其统一起来,不能给读者一种宏观的把握。比如我如果想把这个网络库直接拿出来为我所用该怎么办,但是 @浅墨 学长已经完成了这个原创 2017-03-23 15:30:03 · 3831 阅读 · 1 评论 -
Redis网络库源码分析(2)之启动服务器
一、从main开始main函数定义在server.c中,它的内容如下://server.cint main(){ signal(SIGPIPE, SIG_IGN); //忽略SIGPIPE信号,防止给一个已经关闭socket的客户端连续两次发送数据导致SIGPIPE信号 //的产生,它的默认做法是终止进程。 server_t server;原创 2017-03-23 17:42:03 · 1011 阅读 · 1 评论 -
Redis网络库源码分析(3)之ae.c
一、aeCreateEventLoop & aeCreateFileEvent上一篇文章中,我们已经将服务器启动,只是其中有些细节我们跳过了,比如aeCreateEventLoop函数到底做了什么? 接下来我们要分析ae.c文件,它是整个Redis网络事件框架,其中定义了各个管理事件的函数,比如aeCreateFileEvent,aeDeleteFileEvent分别是注册新的事件和删除事件。其实原创 2017-03-23 23:53:15 · 1776 阅读 · 1 评论 -
说Redis
一:简单介绍Redis(Remote Dictionary Server 远程字典服务器)key-value内存数据库key是一个stringvalue可以是string,list,hash,set,zset,bitmaps等等几乎所有的互联网公司都会使用,新浪微博是全球最大的Redis使用者二:特性C语言实现,单线程Epoll模型,无锁的争用,速度快客户端语言众多,非常容易上手使原创 2017-06-17 21:56:35 · 1850 阅读 · 2 评论 -
数据库集合运算与关系代数
一:域:具有一组相同类型的数据集合。 D1=姓名集合(NAME)={yang,li} D2=年龄集合(AGE)={17,18} 二:笛卡尔积:域上定义的一种集合运算,就是将每个域中的元素与其它域中的元素分别去组合,组合得到的笛卡尔积中每一个元素叫做一个元组。如图,是D1和D2的笛卡尔积。 NAME AGE yang 17 yang 18 li 17 li原创 2016-03-17 15:45:44 · 6985 阅读 · 2 评论