
Redis
文章平均质量分 92
Redis相关知识点
Minor王智
好好学习,天天向上!
展开
-
Redis实现可靠的分布式锁
不管是单机的锁还是分布式锁,要达成锁的功能一定要有原子性、互斥性的能力,Redis提供了好几个命令可以选择,其中使用最常用的就是命令:如果key不存在,就设置,否则就什么也不做。在分布式环境下,多个线程都来对某个key执行SETNX命令,Redis能够保证只有1个线程能够执行成功,这样就可以基于这个特点来做一个分布式锁。如果单纯用Redis的SETNX命令来实现分布式锁,还有很多问题。例如某个线程加锁成功,如果这个线程发生了永久性的阻塞或者进程结束,那么Redis里面的这个Key就永远无法释放,这样就发生了原创 2022-07-09 23:42:19 · 398 阅读 · 0 评论 -
面试必问Redis五大数据结构的底层编码实现(RedisObject、压缩列表、跳跃表、SDS等)
Redis虽然是通过C语言编写,但是他的字符串类型并没有采用C语言的字符串,而是自己定义了一个字符串类型叫SDS来作为Redis字符串类型的默认实现。例如执行,name作为key也是使用的SDS,value张三仍然是一个SDS对象作为底层实现。再例如,student作为key使用的是SDS,键值对的值是Redis五大结构中的List列表对象,列表对象底层也有对应的底层实现,那么列表的元素张三、李四仍然是通过SDS存储的。SDS除了用来保存数据库中的字符串值以外,SDS还用来作为一些缓冲区Buffer,例原创 2022-07-09 23:41:25 · 1362 阅读 · 0 评论 -
Redis底层机制(RESP协议、IO模型、淘汰策略和删除策略)
RESP(redis serialization protocol)redis序列化协议,底层采用的是TCP的连接方式,通过tcp进行数据传输,然后根据解析规则解析相应信息,它具有着实现简单、解析极快、人类可读的特点。RESP可以序列化不同的数据类型,如整数,字符串,数组,还有一种特定的错误类型,它是二进制安全的,因为它使用前缀长度来传输数据。RESP虽然是为Redis设计的,但是同样也可以用于其他C/S的软件,但是Redis Cluster集群模式,节点间通信协议不是resp而是基于Gossip方式。原创 2022-07-09 23:30:09 · 1216 阅读 · 0 评论 -
面试必问Redis缓存一致性问题和缓存击穿、雪崩、穿透、大Key/HotKey、倾斜
所谓一致性问题,指的是缓存和数据库对同一份变量如何保持一致。一致性问题根据对缓存不一致的容忍程度可以划分为强一致和最终一致。强一致性保证只能通过一致性协议、分布式锁来进行控制。最终一致性可以通过MQ、最大努力通知等手段来实现。这个方案是最不可取的,因为如果一旦更新缓存成功,但是数据库写入失败就会发生脏数据问题。有可能发生数据库成功更新但是缓存更新失败,那么缓存中值永远都是旧的值。这个设计存在2个问题:1.如果先把缓存删掉,那么将会有大量读请求直接落地到DB层,造成DB压力。2.如果A线程删了缓存,还没来原创 2022-07-09 23:27:40 · 716 阅读 · 0 评论 -
Redis的高可用架构
Redis的主从架构分为三类:1.从节点执行slaveof成为master的从节点开始,保存master节点地址信息。2.从节点后台线程发现master,与之建立连接。3.权限校验。4.数据同步(全量、部分)5.命令的持续复制,master将写命令复制到从节点。1.6 心跳主从建立复制关系后,他们之间维持着心跳。master节点默认每隔10s对从节点发起ping心跳命令。从节点默认每隔1s上报自己当前的复制偏移量给master。主从架构一旦出现master故障就需要人工处理,redis提出了哨兵原创 2022-07-09 23:23:34 · 1005 阅读 · 0 评论 -
Redis高级特性RDB、AOF、事务、Stream、Pipeline和Lua脚本
和MySQL一样,Redis也有相应的慢查询统计,Redis的慢查询统计的是步骤3的耗时。Redis提供了一个配置参数来设置慢查询的阈值,默认是10毫秒。其中1+4称为 Round Trip Time (RTT,往返时间),也就是数据在网络上传输的 时间。 Redis提供了批量操作命令(例如 mget、mset等),有效地节约 RTT。但大部分命令是不支持批量操作的,需要消耗n次RTT。Pipeline(流水线)机制能改善上面这类问题,它能将一组Redis命令进行组装,通过传输给Redis,再将这组Re原创 2022-07-09 23:22:03 · 701 阅读 · 0 评论 -
Redis高级数据结构
现代计算机用二进制位作为信息的基础单位,1字节=8位,比原创 2022-07-09 23:18:21 · 732 阅读 · 0 评论