Redis笔记搬迁
作者:互联网
Redis原理
从不同的角度来详细介绍redis
存储方式
数据结构
Redis的过期策略
数据淘汰策略
高可用
主从复制
分布式缓存
哨兵
缓存异常
缓存穿透
缓存雪崩
缓存与数据库数据一致性
分布式锁
其他优化
Redis的性能瓶颈
Redis(REmote DIctionary Server)
https://www.cnblogs.com/lfs2640666960/p/11263620.html
多路复用IO,事件循环(Event Loop)的机制
为什么Redis是单线程执行却能同时处理多个请求?(当然严格来说Redis运行起来并非只有一个线程,但除了主线程之外,Redis的其它线程只是起辅助作用,它们是一些在后台运行做异步耗时任务的线程)
单进程单线程,性能高,同时,Redis所有操作都是原子性的,也支持对几个操作合并后原子性的执行。
另外,Redis有丰富的扩展特性,它支持publish/subscribe,通知,key过期等等特性。
与其他key-value缓存框架相比:
1⃣️Redis不仅仅支持key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
2⃣️Redis支持数据持久化,可以将内存中的数据保存到磁盘,重启的时候可以再加载使用;
3⃣️Redis支持数据的备份,即master-slave模式的数据备份。
Redis 快速的原因:
绝大部分请求是纯粹的内存操作(非常快速)
采用单线程,避免了不必要的上下文切换和竞争条件
非阻塞 IO
内部实现采用 epoll,采用了 epoll+自己实现的简单的事件框架。epoll 中的读、写、关闭、连接都转化成了事件,然后利用 epoll 的多路复用特性,绝不在 io 上浪费一点时间。
Redis 为单进程单线程模式,采用队列模式将并发访问变为串行访问。
Redis 本身没有锁的概念,Redis 对于多个客户端连接并不存在竞争,但是在业务客户端对 Redis 进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成
哪些数据需要缓存?
库存查询 操作记录 品牌数据 看版数据
Redis原理
https://cloud.tencent.com/developer/article/1408753
初始化流程和事件循环概述
Redis源码的main函数在源文件server.c中。main函数开始执行后的逻辑可以分为两个阶段:
- 各种初始化(包括事件循环的初始化);
- 执行事件循环。
- 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
- 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
- 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
标签:存储,缓存,搬迁,Redis,redis,笔记,内存,数据 来源: https://www.cnblogs.com/novalist/p/11621344.html