redis
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
Redis pub/sub机制在实际运用场景的理解(转载)
Redis 的pub/sub机制与23种设计模式中的观察者设计模式极为类似。但Redis对于这个机制的实现更为轻便和简结,没有观察者模式的那么复杂的逻辑考虑而仅仅需要通过两个Redis客户端配置channel即可实现,因此它也仅仅做了消息的"发布"和"订阅"的实现,而在实际处理这类场景时遇到的情况根本没有考虑到。数据可靠性无法保证一个redis-cli发布消息n个redis-cli接受消息。...转载 2020-04-13 14:21:21 · 194 阅读 · 0 评论 -
redis RDB持久化中save和bgsave区别
SAVE和BGSAVE两个命令都会调用rdbSave函数,但它们调用的方式各有不同:SAVE直接调用rdbSave,阻塞Redis主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。 BGSAVE则fork出一个子进程,子进程负责调用rdbSave,并在保存完成之后向主进程发送信号,通知保存已完成。Redis服务器在BGSAVE执行...原创 2020-04-06 23:03:11 · 4134 阅读 · 2 评论 -
Redis的持久化机制
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。Redis 的持久化机制有两种,第一种是RDB快照,第二种是 AOF 日志。快照是一次全量备份,AOF 日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本...转载 2020-04-06 22:57:08 · 159 阅读 · 0 评论 -
内存淘汰机制 LRU cache
LRU cache机制的目的是为了减少频繁查找的开销,包括磁盘IO等。(1)、如果LRU中存在则从LRU缓存中查找,查找到了之后放到容器(list)的最前面(2)、如果缓存中没有,则从其地方(数据库、磁盘、文件)中读取,读取之后放到容器的最前面(3)、用户设定缓存的大小例如:redis使用LRU机制来做内存淘汰机制其他关系型数据库使用LRU减少磁盘IO的消耗templ...原创 2019-12-14 16:36:00 · 337 阅读 · 0 评论 -
SkipList 以及高度的确定
转载:https://www.cnblogs.com/lnlvinso/p/8848883.html 结果:skiplist的高度是个随机值。SkipList理解 记下自己对跳表SkipList的理解。 SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的。 数据库LevelDB和RocksDB中用到了SkipLis...转载 2019-11-18 14:04:56 · 1278 阅读 · 0 评论 -
为什么分布式一定要有redis,redis的一些优缺点
1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果...转载 2019-05-22 19:10:23 · 248 阅读 · 0 评论 -
Redis源码分析之工具类util
在redis源码中的辅助工具类中,主要包括大小端转换、SHA算法以及util.h中对应的算法。大小端转换:LittleEndian:低位字节数据存放于低地址,高位字节数据存放于高地址。BigEndian:低位字节数据存放于高地址,高位字节数据存放于低地址。Linux系统中有自带的大小端转换方法,16位、32位的转换,但是没有针对64位的转换,但是redis中加入了对64位数据的大小...原创 2019-05-12 20:44:25 · 200 阅读 · 0 评论 -
Redis源码分析之anet网络通信的封装
anet是redis对tcp/ip网络中socket api接口的一个全面的封装,针对server/client端。封装的api的接口如下,注释了主要的接口:// tcp连接int anetTcpConnect(char *err, char *addr, int port);// 非阻塞连接int anetTcpNonBlockConnect(char *err, char *add...原创 2019-05-12 18:13:49 · 484 阅读 · 0 评论 -
redis源码之main()函数剖析
今天看了redis的源码之中的main()函数,将大概的流程进行梳理。在代码中进行了相应的注释,便于阅读者理解:int main(int argc, char **argv) { struct timeval tv; int j;#ifdef REDIS_TEST if (argc == 3 && !strcasecmp(argv[1], "t...原创 2019-05-07 16:05:50 · 1010 阅读 · 0 评论 -
Redis基数统计之HyperLogLog小内存大用处
转载:https://blog.csdn.net/azhegps/article/details/71158952我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。这里我们就来简单介绍下HyperLogLog结构。先说用处:这个结构...转载 2019-05-19 17:58:04 · 246 阅读 · 0 评论 -
Redis源码分析之内存检测memtest
redis的内存检测会和机器的CPU位数有关,32位或64位会影响后面的一些宏定义参数。首先给出memtest中的API:void memtest_progress_start(char *title, int pass) /* 内存检测加载开始,输出开始的一些图线显示 */void memtest_progress_end(void) /* progress bar加载完再次清屏操作 *...原创 2019-05-09 17:04:19 · 1310 阅读 · 0 评论 -
Redis源码分析之小型测试框架testhelp.h和redis-check-aof.c日志检测
使用的是redis 3.2版本test中的文件主要分为以下几个:1.memtest.c 内存检测2.redis_benchmark.c 用于redis性能测试的实现,后续会当做单独的一个章节进行分析3.redis_check_aof.c 用于更新日志检查的实现。4.redis_check_dump.c 用于本地数据库检查的实现。5.testhelp.h 一个C风格的小型测试框架。今...原创 2019-05-09 16:23:54 · 422 阅读 · 0 评论 -
Redis之压缩列表ziplist
Redis是基于内存的nosql,有些场景下为了节省内存redis会用“时间”换“空间”。ziplist就是很典型的例子。ziplist是list键、hash键以及zset键的底层实现之一(3.0之后list键已经不直接用ziplist和linkedlist作为底层实现了,取而代之的是quicklist)这些键的常规底层实现如下:list键:双向链表 hash键:字典di...原创 2019-04-30 15:42:38 · 14135 阅读 · 4 评论 -
Redis之整数集合intset
intset是Redis集合的底层实现之一,当存储整数集合并且数据量较小的情况下Redis会使用intset作为set的底层实现。当数据量较大或者集合元素为字符串时则会使用dict实现set。intset将整数元素按顺序存储在数组里,并通过二分法降低查找元素的时间复杂度。数据量大时,依赖于“查找”的命令(如SISMEMBER)就会由于O(logn)的时间复杂度而遇到一定的瓶颈,所以数据量大时会用...原创 2019-04-30 14:32:56 · 1704 阅读 · 0 评论 -
Redis之简单动态字符串sds
转载:https://segmentfault.com/a/1190000012262739redis在处理字符串的时候没有直接使用以'\0'结尾的C语言字符串,而是封装了一下C语言字符串并命名为sds(simple dynamic string),在sds.h文件里我们可以看到如下类型定义:typedef char *sds;也就是说实际上sds类型就是char*类型,那sds和char...转载 2019-04-29 13:52:03 · 962 阅读 · 0 评论 -
redis消息队列
(1)、一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。(2)、使用pub/sub主题订阅者模式,可以实现1:N的消息队列,也就是说一个客户端可以订阅1个或多个内容。 (3)、如果消费者下线,则生产的消息会丢失。如果想要生产的消息不...原创 2019-04-28 19:19:03 · 1819 阅读 · 0 评论 -
redis事务的简单介绍
所谓事务应具有以下特效:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID,但redis所提供的事务比较简单,它通过MULTI、EXEC、DISCARD和WATCH等命令实现事务。而Redis只支持简单的事务,将执行命令放入队列缓存,当程序中有异常或命令出错,执行DISCARD清空缓存队列不执行队列中命令...原创 2019-04-28 16:35:43 · 134 阅读 · 0 评论 -
Redis基础知识点
Redis基础知识点:1、Redis 采用的是基于内存的单进程单线程模型的 key-value 数据库。2、默认16个数据库,类似数组下表从 0 开始,初始默认使用零号库。 select 0~15 命令用于在 0 ~ 15 号库之间进行切换3、dbsize 命令查看当前数据库的 key 的数量4、keys * 用于查询所有的 key 的列表...原创 2019-04-26 11:49:33 · 98 阅读 · 0 评论