redis
文章平均质量分 76
redis原理,源码,实战
一只牛_007
这个作者很懒,什么都没留下…
展开
-
redis性能分析
https://blog.csdn.net/qq_40500045/article/details/113773382原创 2021-06-02 22:06:13 · 145 阅读 · 0 评论 -
redis灵魂拷问:19图+11题带你面试通关
又到了金三银四跳槽季,好多同学已经开始行动了。今天我来助力一把,送出这套redis面试题,助力大家通关。1 redis为什么响应快1.1数据保存在内存中redis数据保存在内存中,读写操作只要访问内存,不需要磁盘IO。1.2.底层数据结构 redis的数据以key:value的格式存储在散列表中,时间复杂度o(1)。 redis为value定义了丰富的数据结构,包括动态字符串、双向链表、压缩列表、hash、跳表和整数数组,可以根据value的特性选择选择最高效的数据结构。原创 2021-04-07 15:11:05 · 234 阅读 · 0 评论 -
Redis Cluster Gossip 协议详解
Redis Cluster Gossip 协议大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示。集群模式和 Gossip 简介对于数据存储领域,当数据量或者请求流量大到一定程度后,就必然会引入分布式。比如 Redis,虽然其单机性能十分优秀,但是因为下列原因时,也不得不引入集群。单机无法保证高可用,需要引入多实例来提供高可用性 单机能够提供高达 8W 左右的QPS,再高的QPS则需要引入多实例 单机能够支持的数据量原创 2021-03-16 13:51:25 · 693 阅读 · 0 评论 -
Redis设计与实现AOF持久化
什么是AOF持久化?在前边也说了RDB持久化,AOF(Append only File)也是保存数据库状态的一种方式。它和RDB持久化的区别就是RDB是存的数据,而AOF存的是命令。AOF的实现AOF的实现可以分为命令追加,文件写入,文件同步三个步骤。命令追加在AOF功能打开时,服务器每执行一个指令后,它会以协议格式将被执行的命令追加到服务器状态的aof_buf缓冲区的末尾。这也就是命令的追加。文件写入与同步前文也提到过,Redis服务器的进程就是一个事件循环,在循环的过程中负责接受原创 2020-10-29 17:48:16 · 372 阅读 · 0 评论 -
Redis设计与实现RDB持久化
什么是RDB持久化? RDB持久化就是将Redis在内存中产生的数据保存在磁盘里,防止数据的丢失。(Redis是一个内存数据库,一旦进程退出,数据库状态也就消失不见了) RDB文件是一个二进制文件,保存的是某一个时间点的数据状态。 RDB的文件结构完整的RDB文件包含以下部分|REDIS|db_version|databases|EOF|check_sum| REDIS:长度五个字节,保存的REDIS这几个字母(不是字符串),RDB文件的标识符。 db_versi原创 2020-10-29 17:47:03 · 162 阅读 · 0 评论 -
Redis的设计与实现之对象
Redis中对象概述在前面说的是一些Redis的底层数据结构,那些数据结构是对象实现的基础。在Reids的对象系统中有五种类型的对象。字符串对象 列表对象 哈希对象 集合对象 有序集合对象在Java中也有对象,也可以将这些对象看作为相对独立的个体。还有一个和Java中很相似的地方就是Redis对象系统实现了内存回收机制(基于引用计数技术),当程序不需要的话就会被自动释放。Redis还可以在引用计数技术下,在适当的条件,可以让多个数据库键共享同一个对象来节约资源。在Redis对象中还有比较好原创 2020-10-29 15:26:53 · 110 阅读 · 0 评论 -
Redis的设计与实现之整数集合和压缩列表
整数集合(intset)整数集合概念整数集合是一个集合(set) 整数集合里只包含整数,并且集合元素不能太多 整数集合不会有重复的元素(有重复元素集合就没意义了)整数集合的实现方式typedef struct intest{ //编码方式 uint32_t encoding; //包含元素的数量 uint32_t length; //保存元素的数组 int8_t contents[];}intest1 2 3 4 5 6原创 2020-10-29 15:03:04 · 184 阅读 · 0 评论 -
Redis的设计与实现之跳表
跳跃表基本概念?跳跃表是(skiplist)是一种有序的数据结构,通过在每个节点中维持多个指向其他节点的指针,从而使查找更加迅速。 跳跃表的查找时间复杂度平均O(logN),最坏O(n)。 跳跃表可以看作为是一个升级版的链表,从原理来推的话也有些像是从二叉树演变过来的。 Redis中有序集合键的底层实现之一就是跳跃表(有序集合元素数量比较多,有序集合元素的成员是比较长的字符串)快速了解跳跃表的底层推荐一篇博客:https://www.jianshu.com/p/09c3b0835ba6。跳跃原创 2020-10-29 13:58:52 · 181 阅读 · 0 评论 -
Redis设计于实现之字典
字典简介字典又称符号表,映射或关联数组,是一种保存键值对的抽象数据结构。 Redis数据库的底层也是用字典实现的,对数据库的增删改查也是基于对字典的操作之上的。 字典还是哈希键的底层实现之一,当哈希键对比较多或者键值对中的元素都是比较长的,Redis就会使用字典作为底层实现。字典实现字典的实现是以哈希表作为它的底层实现,一个哈希表可以有多个哈希表节点,每个节点保存了字典中的一个键值对。1.哈希表节点key就是键,v就是键中的值(可以是指针,unit64_t 整数, int64_t s64原创 2020-10-29 10:14:39 · 162 阅读 · 0 评论 -
Redis设计与实现之SDS和链表
Redis的数据结构与对象redis数据库里的键值对都是由object组成的,数据库建总是一个字符串对象。 redis数据库里的值可以是字符串对象,列表对象,哈希对象,集合对象,有序集合对象中的一种。Redis的SDS(simple dynamic string ,简单动态字符串)比如我们可以在redis客户端敲redis> set msg "helloRedis"那么就会在Redis数据库中创建一个新的键值对,keg是msg,value是helloRedis,两个都是SDS。原创 2020-10-29 10:05:32 · 209 阅读 · 0 评论 -
redis性能9个checklist和实操
遇到 Redis 性能变慢时,按照这些步骤逐一检查,高效地解决问题。1. 获取 Redis 实例在当前环境下的基线性能。2.是否用了慢查询命令?如果是的话,就使用其他命令替代慢查询命令,或者把聚合计算命令放在客户端做。3.是否对过期 key 设置了相同的过期时间?对于批量删除的 key,可以在每个 key 的过期时间上加一个随机数,避免同时删除。4.是否存在 bigkey? 对于 bigkey 的删除操作,如果你的 Redis 是 4.0 及以上的版本,可以直接利用异步线程机制减少主线程阻塞原创 2020-10-28 15:49:18 · 188 阅读 · 0 评论 -
redis中KEYS替代命令
在 Redis 中,还有哪些其他命令可以代替 KEYS 命令,实现同样的功能呢?这些命令的复杂度会导致 Redis 变慢吗?如果想要获取整个实例的所有key,建议使用SCAN命令代替。客户端通过执行SCAN $cursor COUNT $count可以得到一批key以及下一个游标$cursor,然后把这个$cursor当作SCAN的参数,再次执行,以此往复,直到返回的$cursor为0时,就把整个实例中的所有key遍历出来了。关于SCAN讨论最多的问题就是,Redis在做Rehash时,会不会漏key或原创 2020-10-28 15:29:37 · 1688 阅读 · 0 评论 -
redis的关键路径和lazy-free
Redis的写操作(例如SET,HSET,SADD等)是在关键路径上吗?我觉得这需要客户端根据业务需要来区分:1、如果客户端依赖操作返回值的不同,进而需要处理不同的业务逻辑,那么HSET和SADD操作算关键路径,而SET操作不算关键路径。因为HSET和SADD操作,如果field或member不存在时,Redis结果会返回1,否则返回0。而SET操作返回的结果都是OK,客户端不需要关心结果有什么不同。2、如果客户端不关心返回值,只关心数据是否写入成功,那么SET/HSET/SADD不算关键路径,多次执原创 2020-10-28 14:51:00 · 403 阅读 · 0 评论 -
摸透 Redis 主从复制、哨兵、Cluster 三种模式
概述Redis作为缓存的高效中间件,在我们日常的开发中被频繁的使用,今天就来说一说Redis的四种模式,分别是「单机版、主从复制、哨兵、以及集群模式」。可能,在一般公司的程序员使用单机版基本都能解决问题,在Redis的官网给出的数据是10W QPS,这对于应付一般的公司绰绰有余了,再不行就来个主从模式,实现读写分离,性能又大大提高。但是,我们作为有抱负的程序员,仅限于单机版和主从模式的crud是不行的,至少也要了解「哨兵」和「集群模式」的原理,这样面试的时候才能和面试官扯皮啊。之前对于...原创 2020-10-16 18:09:00 · 992 阅读 · 1 评论 -
mysql一个用户SQL慢查询分析,原因及优化
小结做join的字段尽量设计为类型完全相同。问题描述一个用户反映先线一个SQL语句执行时间慢得无法接受。SQL语句看上去很简单(本文描述中修改了表名和字段名):SELECT count(*) FROM a JOIN b ON a.`S` = b.`S` WHERE a.`L` > '2014-03-30 00:55:00' AND a.`L` 且查询需要的字段都建了原创 2015-12-05 22:23:29 · 520 阅读 · 0 评论 -
MYSQL的binary解决mysql数据大小写敏感问题
【本文为转载】http://www.jb51.net/article/41546.htmBINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写复制代码代码如下:(说明不用binary是大写不敏感,用了binary后大小写敏感了)mysql> select binary 'ABCD'='abc原创 2015-12-05 21:53:44 · 850 阅读 · 0 评论