![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 75
菜鸟日常
公众号:菜鸟日常
展开
-
常见的缓存中间件缓存击穿、缓存穿透、缓存雪崩问题与解决方案
概述面试中常常被问到 缓存击穿、缓存穿透、缓存雪崩 指什么以及对应的解决方案,下面进行详细总结:缓存穿透指查询一个不存在的数据,缓存中没有,数据库中也没有;解决方案:布隆过滤器,向布隆过滤器中添加一个元素 key 时,我们通过多个 hash 函数,算出对应的值,然后将这个值所在的方格置为 1。查询的时候也是计算 Hash 值,若有一个格子不为 1,那么说明元素肯定不在数组中。布隆过滤器可以判断某个数据一定不存在,但是无法判断一定存在。对空结果进行缓存返回缓存击穿指查询一个热点 k原创 2021-07-08 21:27:42 · 173 阅读 · 0 评论 -
Redis 跳跃表的实现
概述跳跃表 SkipList 是一种有序数据结构,通过在每个节点中维持多个指向其它节点的指针,达到快速访问节点的目的平均时间复杂度 O(logN),在大部分情况下,跳跃表的效率与平衡树相近,由于跳跃表实现的简易性,所以 Redis 使用跳表代替平衡树。为什么用跳跃表...原创 2021-07-08 20:36:57 · 266 阅读 · 0 评论 -
Redis 持久化实现 RDB 与 AOF
RDB数据生成 rdb 结尾的快照文件,采用二进制 + 数据压缩的方式写磁盘,体积小恢复快,适合全量复制。手动触发save,阻塞 Redis 服务器不能处理任何请求,禁止使用bgsave,创建子进程,让子进程创建快照;同一时刻只会有一个 bgsave 命令执行,避免产生竞态条件自动触发配置文件 save m n,m 秒内发生 n 次变化时,触发 bgsave;save m n 可以多行,主要满足一条即可触发。Redis的 save m n,是通过serverCron函数、dirty 计原创 2021-06-12 18:03:41 · 81 阅读 · 1 评论 -
Redis 字典的实现以及渐进式 Rehash 过程
Redis 字典Redis 字典 dict 用途有两个,首先实现数据库键空间(Key space),Redis 是一个保存键值对的数据库,数据库的键值对由字典保存,每个数据库都有一个对应的字典, 这个字典被称之为键空间(key space)。其次字典 dict 还作为 Hash 类型键的底层实现之一,当 Hash 类型的键使用 hashtable 编码时,也使用 dict 进行存储。Redis 采用链地址法解决 key hash 冲突问题,以头插的方式插入到冲突节点的前面。底层源码单机 Redi原创 2021-06-12 15:22:30 · 261 阅读 · 2 评论 -
Redis 多机数据库实现主从哨兵集群
Redis 高可用,主要涉及持久化,复制(主从复制),哨兵(自动故障转移),集群(写操作负载均衡与单机存储能力限制问题)。Redis replication 主从模式参考启用方式配置文件:conf 文件配置加入 replicaof ,5.0 之后 replicaof启动命令:redis-server xxx replicaof 客户端命令:通过客户端执行命令 replicaof 复制阶段建立连接从节点保存主节点 IP 和 port;建立 socket 连接;主节点发送 ping 命令;原创 2021-06-06 22:38:33 · 127 阅读 · 0 评论 -
Redis Key 过期策略以及内存淘汰策略
过期删除策略删除到达过期时间的 Key,一般有以下几种实现定时检查删除为每个 Key 创建一个定时器,到达删除时间进行删除操作。但是这样会占用大量 CPU 的资源去处理过期数据惰性检查删除访问 Key 的时候,再去判断 Key 是否过期,若已过期则删除。对内存不太友好,若 Key 一直没访问,就永远不会删除定期检查删除隔一段时间,扫描 Redis 过期字典中的 Key,清除一部分过期的 Key。属于前两种方法的折中。可以通过设置 hz 参数,控制定期删除的频率。 hz 10原创 2021-06-06 11:26:42 · 198 阅读 · 0 评论 -
Redis 支持的数据类型以及底层编码方式
概述Redis Key 最大支持的大小为 512MBRedis Key 不宜太大,首先会比较占用内存,其次查找元素过程中会进行多次 Key 比对,比较耗时。Redis Key 也不宜太小,这样会导致可读性较差。Redis Value 可以支持不同的数据类型,如下图所示1. String使用简单动态字符(SDS)串保存 String 类型的 value,SDS 有专门的结构记录已使用的空间长度,所以能够在 O(1) 时间获取到值的长度。预分配空间为将来的 value 值增长做保留2. L原创 2021-06-06 10:03:46 · 438 阅读 · 0 评论 -
Redis Lua 介绍基于官方文档
原子性lua 脚本于 2.6.0 版本开始支持,Redis 使用同一个 Lua 脚本解释器去执行所有的脚本命令,并且在脚本命令执行期间,其它的脚本命令和 Redis 命令将会等待其执行完成,所以 Lua 脚本执行命令具有原子性。有个注意的点,就是如果脚本命令执行时间太长,那么会影响服务的性能,其它的客户端执行命令都会受到影响。若 Lua 脚本执行期间出错,那么脚本执行过程将会中断,并返回一个 error 给客户端。参考官方文档...原创 2021-06-05 22:52:53 · 322 阅读 · 0 评论