redis知识点总结

redis知识点总结,第1张

redis知识点总结

1、redis为什么可以高效的进行存储和读取?
redis的存储的数据结构也是通过 key 进行hash 然后找到对应的数组位置 链表到对应的key/value对象,如果发生hash碰撞 则直接链表到其后边,取值的时候 根据其key 进项hash 找到其对应下标后迭代链表中的key 相同就取出

redis的key都是String类型的

redis单线程快的原因?

1、存内存 *** 作
2、核心是基于非阻塞的IO多路复用机制
3、单线程反而避免了多线程的频繁上下文切换带来的性能问题

redis的持久化机制?
RDB: 某个时间点的内存快照,以二进制的方式存入磁盘。
手动触发:
save命令 保存数据为dump.rdb save命令会使redis处于阻塞状态,知道RDB完成。bgsave命令 会fork出一个子进程进行持久化,主进程知道fork的过程中会有短暂的阻塞,子进程创建之后,主进程就可以继续响应客户端请求了
自动触发: save m n : 在m秒内如果有n个键发生改变,则自动触发持久化,通过bgsave执行。

AOF: append only File 以日志的形式 记录服务器所处理的每一个写、删除 *** 作、
1、 所有的写命令会追加到aof缓冲中
2、aof缓冲区 根据不同的策略 想硬盘进行同步 *** 作
3、随着aof文件越来越大,需要定期对aof文件进行重写,达到压缩的目的。
4、redis重启时,加载aof文件 完成数据恢复
同步策略: 每秒同步 和 每修改同步

aof文件 比rdb 更新频率高,优先使用aof还原数据

redis 过期键的删除策略?

惰性过期: 只有在访问key的时候 去判断当前key是否过期,如果过期就删除,节省cpu资源 但是占用了大量内存。

定期过期: 每隔一段时间,会扫描expire一定数量的key,清除已过期的key。

redis是将两者结合使用的

redis 分布式锁的实现原理?
1、利用setnx来保证获取到锁
2、然后利用lua脚本来保证多个redis *** 作的原子性
3、同时还要考虑锁的过期,需要有一个看门狗的机制的定时任务来完成锁的续约

redis 和mysql 如何保证数据一致?
1、先更新mysql 再更新redis
2、先删除 再更新mysql 再次查询的时候将数据更新到redis中
3、延时双删 先删除redis 再更新mysql 再过几百毫秒再删除redis ,这样就算在更新mysl的时 有其他线程读了mysql 把数据读到了redis 也会被删除掉,从而保持了数据一致

redis 集群方案

主从模式

哨兵模式

Redis cluster

redis 主从复制的核心原理?

缓存雪崩、缓存穿透、缓存击穿 解决方案?

缓存雪崩: 是指缓存在同一时间大面积失效、后边的请求全部落在了数据库上,造成了数据库短时间承受了大量请求而崩掉。

解决方案:
1、缓存数据的过期时间设置随机,方式同一时间大量数据失效的场景发生
2、缓存预热 ,redis重启的时候 也会引发缓存雪崩,我们可以在重启的时候 对热点数据进行提前存储到redis 减轻数据库的压力
3、加互斥锁 使缓存请求进入排队阻塞的状态 从而避免雪崩

缓存穿透: redis中 和 数据库都不存在这个key ,导致请求都落到了数据库上,造成数据库承受大量的请求而崩掉。

解决方案:
1、接口增加校验,用户鉴权校验
2、缓存拿不到数据,数据库也拿不到,这时就把key-value 设置为key-null
3、采用布隆过滤器,将所有可能存在的数据hash到bitmap中 一定不存在的过滤器会帮你拦截

缓存击穿: 指缓存中没有,但数据库中有(缓存过期),并发量过大给数据库造成压力

解决方案: 1、设置热点数据永不过期
2、加互斥锁

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存