Redis
文章平均质量分 69
seolinAziz
这个作者很懒,什么都没留下…
展开
-
Redis核心数据结构底层实现
String使用SDS(simple dynamic string)实现。3.2版本前struct sdshdr { //长度 int len; //剩余长度 int free; //数据本体 char buf[]; }3.2版本以后主要有以下几个字段len 长度,有uint8_t、uint16_t、uint64_t 这几种类型alloc 已经分配的空间,有uint8_t、uint16_t、uint64_t 这几种类型unsigned char原创 2021-03-16 20:05:38 · 988 阅读 · 0 评论 -
Redis Sentinel(哨兵)
作用当故障发生时可以自动进行主从切换,程序可以不用重启。将Redis Sentinel集群看成是一个Zookeeper集群,它是集群高可用的心脏,它一般是由3~5个节点组成,这样挂了个别节点集群还可以正常运转。它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的(优先级->数据量->run ID)从节点切换为主节点。客户端来连接集群时,会首先连接sentinel,通过sentinel来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点故障时,客户端会重新想sentin原创 2021-03-15 16:14:22 · 1778 阅读 · 0 评论 -
Redis主从同步流程
主从同步流程(全量)slave与master建立socket连接;slave向master发送PSYNC命令请求复制数据(无论slave是否为第一次连接);master收到PSYNC命令后,会在后台进行数据持久化;通过bgsave生成最新的rdb快照文件bgsave期间,将客户端发送的命令(会修改数据集的)缓存到内存中;持久化完毕后,master将这份RDB数据发送给slave;slave会把接收到的数据进行持久化生成RDB,然后再加载到内存中。master继续将之前缓存在内存中的命原创 2021-03-13 23:21:53 · 1035 阅读 · 2 评论 -
Redis过期策略
Redis所有的数据结构都可以设置过期时间,时间一到就会自动删除。思考:Redis是单线程的,删除key的时间也会占用线程的处理时间,如果删除过于频繁,会导致CPU负载过高吗,会导致线上读写指令出现卡顿吗?下面来谈谈Redis的两种删除策略。两种删除策略定时删除(集中处理)Redis会将每个设置了过期时间的key放入到一个独立的字典中,定时遍历这个字典来删除到期的key。Redis默认每秒进行十次过期扫描,过期扫描不会遍历过期字典中的所有key,而是采用了一种简单的贪心策略。从过期字典中随机原创 2021-03-12 09:39:06 · 933 阅读 · 0 评论 -
Redis缓存穿透案例
表关系描述类似于好友之间的关联关系,有表N,M以及N与M的关联关系表,N表与M表假设均有100W的数据,M与N两者关系是一个稀疏矩阵(只有少部分之间有关系,大约10%)。业务场景通过表N中的一条记录,来查询关联的M有哪些人,并且这是一个高频次操作。存在的问题mysql单库承受如此多的查询请求,容易拖垮整个库。解决方案以下解决方案的目的是为了过滤掉空查询。Redis设置空值方案描述在查询到N与M关联关系表中的空值时,就往Redis存储一个空值,设置一个的过期时间(固定时间+随机时间),大约原创 2021-03-11 09:39:44 · 1049 阅读 · 0 评论 -
Redis缓存穿透、缓存击穿、缓存雪崩、热点key过期
缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常处于容错考虑,如果从存储层查不到数据,则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:自身业务代码或者数据出现问题。恶意攻击、爬虫等造成大量空命中。缓存穿透问题的解决方案:缓存空对象布隆过滤器缓存击穿(失效)由于大批量缓存在同一时间失效可能导致大量请求同事穿透缓存直达数据库,可能会造成数据库瞬间压力过大甚至挂掉,对于这种情况原创 2021-03-09 22:29:30 · 1005 阅读 · 1 评论