![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 62
大叶子不小
这个作者很懒,什么都没留下…
展开
-
极客时间redis
21 主从复制:基于状态机的设计与实现.md原创 2023-02-15 17:40:00 · 56 阅读 · 0 评论 -
Redis容量预估
Redis容量预估-极数云舟原创 2023-02-15 16:35:43 · 93 阅读 · 0 评论 -
redis主从同步
Redis 数据同步机制分析_逍遥子_的博客-CSDN博客https://suntw2015.github.io/2019/09/16/redis-replication/redis源码分析(8)——replication_chosen0ne的博客-CSDN博客原创 2023-02-15 15:46:06 · 52 阅读 · 0 评论 -
redis持久化之AOF(Append Only File)及其总结
是因为我们在写flushall命令的时候一并写入到了appendonly.aof文件中,如上所示,于是我们进入到appendonly.aof文件中,用命令dd删除掉flushall,再次重启,就可以显示数据,后来我们又用vim appendonly.aof,进入里面瞎写了一些数据,然后重新启动服务,会发现。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令方式重写了一个新的aof文件,这点和快照有点类似。相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb。原创 2023-02-15 15:44:47 · 521 阅读 · 0 评论 -
cluster nodes(集群节点)
复制O(N)其中N是 Cluster 节点的总数Redis 集群中的每个节点都有其当前集群配置的视图,由已知节点的集合给出,我们与这些节点的连接状态,它们的标志,属性和分配的槽等等。CLUSTER NODES 以串行格式提供所有这些信息,即我们正在联系的节点的当前集群配置,该格式恰好与 Redis Cluster 自身使用的格式相同,以便在磁盘上存储集群状态(但磁盘群集状态在最后附加了一些附加信息)。原创 2023-02-15 14:27:53 · 1693 阅读 · 0 评论 -
聊聊 Redis 是如何进行请求处理
我记得我在一文说透 Go 语言 HTTP 标准库首先是注册处理器;开启循环监听端口,每监听到一个连接就会创建一个 Goroutine;然后就是 Goroutine 里面会循环的等待接收请求数据,然后根据请求的地址去处理器路由表中匹配对应的处理器,然后将请求交给处理器处理;...for {// 接收 listener 过来的网络连接...// 创建协程处理连接。原创 2023-02-09 16:49:03 · 295 阅读 · 0 评论 -
redis配置之lazy freeing
Redis是single-thread程序(除少量的backgroup I/O 任务), 当运行一个耗时较大的请求时,会导致所有请求排队等待redis不能响应其他请求,引起性能问题, 甚至集群发生故障切换。lazy free可译为惰性删除或延迟释放;当删除键的时候, redis提供异步延时释放key内存的功能,把key释放操作放在bio(Background I/O)单独的子线程处理中,减少删除big key对redis主线程的阻塞。有效地避免删除big key带来的性能和可用性问题。原创 2023-02-07 17:54:31 · 827 阅读 · 2 评论 -
Redis 4.0 自动内存碎片整理(Active Defrag)源码分析
我们先看一下redis.conf 中关于的注释(google 翻译)功能介绍警告此功能是实验性的。然而,即使在生产中也进行了压力测试,并且由多个工程师手动测试了一段时间。什么是主动碎片整理?自动(实时)碎片整理允许Redis服务器压缩内存中小数据分配和数据释放之间的空间,从而允许回收内存。碎片化是每个分配器都会发生的一个自然过程(幸运的是,对于Jemalloc来说却不那么重要)和某些工作负载。通常需要重新启动服务器以降低碎片,或者至少刷新所有数据并再次创建。原创 2023-02-07 17:41:41 · 1167 阅读 · 0 评论 -
Redis Client Pause 命令
Redis Client Pause 命令用于阻塞客户端命令一段时间(以毫秒计)。原创 2023-02-01 10:59:33 · 112 阅读 · 0 评论 -
Redis的过期策略和内存淘汰策略不要搞混淆
每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。过期策略用于处理过期的缓存数据。Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。原创 2023-01-19 16:12:47 · 571 阅读 · 0 评论 -
Redis删除了大量数据后,为什么内存占用还是很高?
上周刚来了个应届小师弟,组长说让我带着,周二问了我这样一个问题:师兄啊,我用top命令看了下服务器的内存占用情况,发现Redis内存占用严重,于是我就删除了大部分不用的keys,为什么内存占用还是很严重,并没有释放呢?嗯?为什么呢?今天就带着这个问题来介绍一下如何正确释放Redis的内存。内存碎片这个概念应该不是第一听说了,熟悉JVM或者操作系统的应该都熟悉,以火车卖票为例,一个车厢128个车位,由于高峰期,只剩余两个位置了,但是此时三个。原创 2023-01-19 11:44:45 · 2886 阅读 · 0 评论 -
主从全量同步使用RDB而不使用AOF的原因
主从全量同步使用RDB而不使用AOF的原因: 1、RDB文件内容是经过压缩的二进制数据(不同数据类型数据做了针对性优化),文件很小。在主从全量数据同步时,传输RDB文件可以尽量降低对主库机器网络带宽的消耗,从库在加载RDB文件时,一是文件小,读取整个文件的速度会很快,二是因为RDB文件存储的都是二进制数据,从库直接按照RDB协议解析还原数据即可,速度会非常快,而AOF需要依次重放每个写命令,这个过程会经历冗长的处理逻辑,恢复速度相比RDB会慢得多,所以使用RDB进行主从全量同步的成本最低。原创 2023-01-11 14:20:42 · 232 阅读 · 0 评论 -
repl_backlog_buffer和replication buffer的区别
2、replication buffer:Redis和客户端通信也好,和从库通信也好,Redis都需要给分配一个 内存buffer进行数据交互,客户端是一个client,从库也是一个client,我们每个client连上Redis后,Redis都会分配一个client buffer,所有数据交互都是通过这个buffer进行的:Redis先把数据写到这个buffer中,然后再把buffer中的数据发到client socket中再通过网络发送出去,这样就完成了数据交互。原创 2023-01-11 14:20:16 · 366 阅读 · 0 评论 -
why redis-cluster use 16384 slots?
The reason is:So 16k was in the right range to ensure enough slots per master with a max of 1000 maters, but a small enough number to propagate the slot configuration as a raw bitmap easily. Note that in small clusters the bitmap would be hard to compress原创 2022-11-01 18:00:11 · 105 阅读 · 0 评论 -
Mac安装Redis,原来就是这么简单
Mac安装Redis使用Homebrew安装Redis1、没有安装Homebrew,首先安装npm国内的吧,快一些。打开终端输入以下命令:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2、使用Homebrew安装命令brew install redis执行上述命令后出现以下,则成功安装:==> Downloading https://mirrors.u原创 2021-06-29 10:14:38 · 178 阅读 · 0 评论 -
分布式原理:一文了解 Gossip 协议
gossip 是什么gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的数据一样。从 gossip 单词就可以看到,其中文意思是八卦、流言等意思,我们可以想象下绯闻的传播(或者流行病的传播);gossip 协议的工作原理就类似于这个。gossip 协议利用一种随机的方式将信息传播到整个网络中.原创 2021-04-25 15:16:55 · 536 阅读 · 0 评论 -
基于Redis的分布式锁到底安全吗(下)?
自从我写完这个话题的上半部分之后,就感觉头脑中出现了许多细小的声音,久久挥之不去。它们就像是在为了一些鸡毛蒜皮的小事而相互争吵个不停。的确,有关分布式的话题就是这样,琐碎异常,而且每个人说的话听起来似乎都有道理。今天,我们就继续探讨这个话题的后半部分。本文中,我们将从antirez反驳Martin Kleppmann的观点开始讲起,然后会涉及到Hacker News上出现的一些讨论内容,接下来我们还会讨论到基于Zookeeper和Chubby的分布式锁是怎样的,并和Redlock进行一些对比。最后,我们原创 2021-03-04 17:32:06 · 184 阅读 · 1 评论 -
基于Redis的分布式锁到底安全吗(上)?
网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词“Redis 分布式锁”随便到哪个搜索引擎上去搜索一下就知道了。这些文章的思路大体相近,给出的实现算法也看似合乎逻辑,但当我们着手去实现它们的时候,却发现如果你越是仔细推敲,疑虑也就越来越多。实际上,大概在一年以前,关于Redis分布式锁的安全性问题,在分布式系统专家Martin Kleppmann和Redis的作者antirez之间就发生过一场争论。由于对这个问题一直以来比较关注,所以我前些日子仔细阅读了与这场争论相关的资料。这场争原创 2021-03-04 17:31:10 · 79 阅读 · 1 评论 -
聊聊Twemproxy是什么
最近看了京东的一些技术,发现京东中使用较多的,技术是nginx+redis+lua , 还有一种常用的就是Twemproxy,这个东西是干什么的呢,根据名字可以看出它是一个代理的中间件 ,因为他的后端是多台REDIS 或memcached所以也可以被称为分布式中间件。Twemproxy介绍Twemproxy 也叫 nutcraker。是 Twtter 开源的一个 Redis 和 Memcache 代理服务器,主要用于管理 Redis 和 Memcached 集群,减少与Cache 服务器直接连.原创 2021-03-02 17:18:36 · 303 阅读 · 0 评论 -
redis Proxy支持的命令
https://github.com/twitter/twemproxy/blob/master/notes/redis.md原创 2021-03-02 16:54:12 · 249 阅读 · 0 评论 -
Redis分布式锁的正确实现方式
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持原创 2021-02-07 14:46:07 · 79 阅读 · 0 评论 -
scan命令
比如这里查询key111开头的key有哪些?若使用keys命令,则执行keys key1111*,一次性全部查出来。同样,如果使用scan命令,则用scan 0 match key1111* count 20scan的语法为:SCAN cursor [MATCH pattern] [COUNT count]The default COUNT value is 10.SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,..原创 2021-01-21 11:52:40 · 3775 阅读 · 0 评论 -
redis的expire总结
在排查问题的时候,对这个知识点有点模糊,实操了下。String和其他redis数据结构expire是不一样的。String 有点不一样:具体见我置顶的博文redis手写总结1.2.3 容器型数据结构的通用规则list,set,hash,zset 是容器型数据结构create if not existsdrop if no ellements1.2.4 过期时间过期是以对象为单位的,比如一个hash结构的过期是整个hash对象的过期,而不是其中某个子key的过期注意:..原创 2021-01-18 19:28:17 · 595 阅读 · 0 评论 -
redis,mongodb区别
redis缓存,mongodb数据库详见:MySQL、MongoDB、Redis 数据库之间的区别总结:如果数据量少:用redis如果要支持事物,用mysql用mongoDB就是方便mongodb:优点:1.因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的这一鲜明特性就脱颖而出了。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。2.文档的数据库,即可以存放 xml、json、bson 类型系那...原创 2020-11-16 20:24:05 · 165 阅读 · 0 评论 -
Redis面试千万千万不能踩的坑
redis集群不支持管道。如果key1,key2不在一个节点上,不支持mget。是数据结构而非类型很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义。redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们按照合理的格式解码后,可以变成一个字符串,整数或对象,此时才具有数据类型。这一点必须要记住。所以任何东西只要能转化成字节数组(byte[])的,都可以存到redis里。管你是字符串、数字、对象、图片、声音、视频、还是文原创 2020-10-10 10:07:52 · 382 阅读 · 0 评论 -
一致性哈希算法的缺陷是什么?(但我感觉rediscluster也没有解决这几个问题,求指导)
参考:https://www.zhihu.com/question/307084129原创 2020-10-10 09:24:35 · 1284 阅读 · 0 评论 -
Redis 集群到底支持不支持批处理指令MGET等
目前,这不是一个确定的答案,对于不同集群的实现方式其支持度也是不一样的原生Redis Cluster 3.* 和 4.*版本集群3.0 不支持,即使在某些客户端下返回了值,很可能仅仅只是某一个节点的值4.0 仅支持相同slot,key不能保证在相同slot还是没用参考:Redis阿里云Redis Cluster支持MGET MSET HMGET HMSET指令受限MGETNX MSETNXHMGETNX HMSETNX和所有事务指令参考:阿里云Redis指令Ca...原创 2020-10-10 09:19:43 · 1824 阅读 · 0 评论 -
redis cluster mget 引发的讨论
背景:近期由于跨机房数据同步问题,准备调研使用redis替换memcache,在调研过程中发现棘手的问题,原有的memcache提供大量批量获取操作(mget)操作,程序最大支持同时获取2000个。而redis最新的3.x版本引入了cluster模式,而也正是因为引入了cluster模式导致了redis的mget命令无法使用,过去的一周抽空调研了一些方法,但是很遗憾还是没有找到完美的方案来解决这个问题,这篇文章把整个过程沉淀总结一下。 首先,先贴出一个概念叫作《缓存-无底洞问题》,该问题由 fac..原创 2020-10-10 09:13:05 · 2022 阅读 · 0 评论 -
Redis-怎么让相关键都分配到集群中的同一个节点
为什么有时候要让相关键都分配到同一个节点?因为如果命令涉及到多个键,那么只有这些键都位于同一个节点里,Redis才能正常支持该命令。Redis是按照什么路由规则,分配键到节点的?因为Redis集群内置插槽为16384个,所以Redis会将每个键的键名的有效部分使用CRC16算法计算出散列值,然后对16384的取余。余数为多少就表示该键应该被分配到哪个节点,这样的话,每个键都可以被分配到16384个插槽中,而集群中的每个节点都会被分配一定的插槽。关键就在每个键的键名的有效部分,因为Re.原创 2020-10-10 09:11:41 · 467 阅读 · 0 评论 -
Redis之AOF重写及其实现原理(问题待解释)
个人小问题:aof重写的过程中,如果出现了对键值对的修改操作,即子进程在执行AOF重写时,主进程需要执行以下三个工作: 执行client发来的命令请求;将写命令追加到现有的AOF文件中;将写命令追加到AOF重写缓存中。 现在假想一种情况,开始AOF重写了,有一个lpush key. v1 v2 v3,这个key还没有被子进程从数据库读取,然后又来了一个lpush key v4.这个时候内存中有4个v,然后AOF重写缓存中也有v4,导致重写后的aof文件中有5个v。这种情况怎么解释目录..原创 2020-10-09 22:33:38 · 705 阅读 · 0 评论 -
一致性hash和hash槽的对比
一致性hash是一个0-2^32的闭合圆从hash(key)在圆上映射的位置开始顺时针方向找到的一个节点即为存储key的节点。如果到圆上的0处都未找到节点,那么0位置后的顺时针方向的第一个节点就是key的存储节点。删除节点,可能导致雪崩节点过少,导致分配不均为了解决雪崩现象和数据倾斜现象,提出了虚拟节点:一个节点宕机:数据会被分配到多个节点上去注意:真实节点不放置到哈希环上,只有虚拟节点才会放上去。redis cluster一共有2^14(16384)个槽,crc...原创 2020-10-09 21:46:12 · 1492 阅读 · 0 评论 -
为什么Redis单线程能够达到数十万、百万级的QPS?
性能测试报告查看了下阿里Redis的性能测试报告如下,能够达到数十万、百万级别的QPS(暂时忽略阿里对Redis所做的优化),我们从Redis的设计和实现来分析一下Redis是怎么做的。Redis的设计与实现其实Redis主要是通过三个方面来满足这样高效吞吐量的性能需求 高效的数据结构 多路复用 IO 模型 事件机制 1、高效的数据结构Redis支持的几种高效的数据结构 string(字符串)、hash(哈希)、li...原创 2020-10-02 22:13:44 · 638 阅读 · 0 评论 -
Redis分布式锁的原理以及如何续期
面试问题Redis锁的过期时间小于业务的执行时间该如何续期?问题分析首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了,其实Redis分布式锁比较正确的姿势是采用redisson这个客户端工具如何回答只要客户端一旦加锁成功,就会启动一个***watch dog看门狗***,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁原创 2020-09-18 14:39:59 · 785 阅读 · 0 评论 -
限流算法
1.漏桶算法请求入桶,出桶(被消费)平稳速率被消费(用处:流量整流)2.令牌桶算法平稳速率生产支持突发流量原创 2020-09-15 08:54:14 · 68 阅读 · 0 评论 -
Redis 使用monitor造成的内存飙升
美团在Redis上踩过的坑-Redis内存占用飙升一、现象:redis-cluster某个分片内存飙升,明显比其他分片高很多,而且持续增长。并且主从的内存使用量并不一致。二、分析可能原因:redis-cluster的bug (这个应该不存在)客户端的hash(key)有问题,造成分配不均。(redis使用的是crc16, 不会出现这么不均的情况)存在个别大的key-value: 例如一个包含了几百万数据set数据结构(这个有可能)主从复制出现了问题。其他原因三.原创 2020-08-29 14:16:58 · 885 阅读 · 0 评论 -
Redis实操(源码篇)
5.1 丝分缕析----探索“字符串”内部Redis的对象头结构struct RedisObject { int4 type; //4bits int4 encoding;//4bits int24 lru; //24bits int32 refcount;//4bytes void *ptr; //8bytes,64-bit system}SDS的结构struct SDS{ int8 capacity; //1byte int8 len;原创 2020-08-23 10:26:38 · 186 阅读 · 0 评论 -
redis为何单线程 效率还这么高
转自 https://www.cnblogs.com/aspirant/p/11704530.html如果想了解 redis 与Memcache的区别参考:Redis和Memcache的区别总结https://www.cnblogs.com/aspirant/p/8883871.html阿里的面试官问问我为何redis 使用跳表做索引,却不是用B+树做索引因为B+树的原理是 叶子节点存储数据,非叶子节点存储索引,B+树的每个节点可以存储多个关键字,它将节点大小设置为磁盘页的大小,充分利用了磁盘预读的功原创 2020-08-18 18:25:36 · 350 阅读 · 0 评论 -
redis集群下使用lua脚本时有多个key的解决办法
redis单节点key都在同一个节点上;redis集群key经过算法后,会分布在不同的节点上;lua脚本限制执行脚本中涉及到的key要在同一个节点上;解决方案在key中使用‘{}’,redis计算key要保存到那个节点上时,是根据‘{}’它里面的值来计算的,只要这里面的值是相同的,就会保存到相同的节点上;注意:保存的key也会带上‘{}’;例如{key}abcd、 {key}1234、abcd{key}1234集群命令计算key会保存到的slot;cluster keyslot {原创 2020-08-13 08:24:09 · 3109 阅读 · 3 评论 -
Redis字典为什么缩容不用考虑 bgsave?
这是我看的《Redis 深度历险:核心原理和应用实践》中的一个思考问题,我在这里写下个人的一点理解。扩容时考虑 BGSAVE 是因为,扩容需要申请额外的很多内存,且会重新链接链表(如果会冲突的话), 这样会造成很多内存碎片,也会占用更多的内存,造成系统的压力。而缩容过程中,由于申请的内存比较小,同时会释放掉一些已经使用的内存,不会增大系统的压力。因此不用考虑是否在进行 BGSAVE 操作。...原创 2020-07-31 07:17:51 · 1010 阅读 · 0 评论 -
redis里append的用法(看不懂)
key-valueAPPEND key value起始版本:2.0.0时间复杂度:O(1)。均摊时间复杂度是O(1), 因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间,所以在添加的value较小而且已经存在的 value是任意大小的情况下,均摊时间复杂度是O(1) 。如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND原创 2020-07-30 16:06:53 · 1646 阅读 · 0 评论