文章分类 -  Redis高频面试题2024

摘要:你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就 阅读全文
posted @ 2024-12-13 14:47 似梦亦非梦 阅读(27) 评论(0) 推荐(0) 编辑
摘要:当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。缓存降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。在进 阅读全文
posted @ 2024-12-13 14:32 似梦亦非梦 阅读(11) 评论(0) 推荐(0) 编辑
摘要:Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性: 安全特性:互斥访问,即永远只有一个 client 能拿到锁 避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 cl 阅读全文
posted @ 2024-12-13 14:27 似梦亦非梦 阅读(18) 评论(0) 推荐(0) 编辑
摘要:所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同! 推荐一种方案:分布式锁(zookeeper) 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用 阅读全文
posted @ 2024-12-13 14:25 似梦亦非梦 阅读(10) 评论(0) 推荐(0) 编辑
摘要:redis cluster,10 台机器,5 台机器部署了 redis 主实例,另外 5 台机器部署了 redis 的从实例,每个主实例挂了一个从实例,5 个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每秒 5万,5 台机器最多是 25 万读写请求/s。 机器是什么配置?32G 内存+ 阅读全文
posted @ 2024-12-13 14:23 似梦亦非梦 阅读(22) 评论(0) 推荐(0) 编辑
摘要:1、基于Lua脚本,Redis可以保证脚本内的命令一次性、按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程中如果部分命令运行错误,剩下的命令还是会继续运行完。 2、基于中间标记变量,通过另外的标记变量来标识事务是否执行完成,读取数据时先读取该标记变量判断是否事务执行完成。但这样会需要额外写代 阅读全文
posted @ 2024-12-13 14:20 似梦亦非梦 阅读(2) 评论(0) 推荐(0) 编辑
摘要:Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器(file event handler)。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。 文件事件处理器使用 I 阅读全文
posted @ 2024-12-13 14:16 似梦亦非梦 阅读(10) 评论(0) 推荐(0) 编辑
摘要:Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间 的数据。 1、全局的键空间选择性移除 noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。 allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的ke 阅读全文
posted @ 2024-12-13 14:12 似梦亦非梦 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1、如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。 2、如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Red 阅读全文
posted @ 2024-12-13 14:09 似梦亦非梦 阅读(11) 评论(0) 推荐(0) 编辑
摘要:1、一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。 2、如果你非常关心你的数据, 但仍然可以承受数分钟 阅读全文
posted @ 2024-12-13 14:07 似梦亦非梦 阅读(11) 评论(0) 推荐(0) 编辑
摘要:缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。 使用 redis 或 memcached 之类的称为分布 阅读全文
posted @ 2024-12-13 14:05 似梦亦非梦 阅读(8) 评论(0) 推荐(0) 编辑
摘要:由于缓存和数据库不属于同一个数据源,本质上非原子操作,所以是无法保证强一致性的,只能去实现最终一致性。 解决方案: 延时双删:先更新数据库同时删除缓存,等2秒后再删除一次缓存,等到读的时候在回写到缓存。 利用工具(canal)将数据库的binlog日志采集发送到MQ中,然后通过ACK机制确认处理删除 阅读全文
posted @ 2024-12-13 14:03 似梦亦非梦 阅读(22) 评论(0) 推荐(0) 编辑
摘要:缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般会从数据库中加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮 解决方案: 用分布式锁控制访问的线程,使用redis的setnx互斥锁先进行判断,这样其他线程就处于等待状态,保证不会 阅读全文
posted @ 2024-12-13 14:00 似梦亦非梦 阅读(7) 评论(0) 推荐(0) 编辑
摘要:在高并发下查询key不存在的数据,会穿过缓去存查询数据库。导致数据库压力过大而宕机。 解决方法: 对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。 缺点:缓存太多空值占用了更多的空间 使用布隆过滤器。在缓存之前在加一层布隆过滤器,在查询 阅读全文
posted @ 2024-12-13 13:51 似梦亦非梦 阅读(7) 评论(0) 推荐(0) 编辑
摘要:缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。) 解决办法: 阅读全文
posted @ 2024-12-13 13:46 似梦亦非梦 阅读(27) 评论(0) 推荐(0) 编辑
摘要:● 优点: 使用AOF持久化会让Redis变得非常耐久(much more durable):你可以设置不同的fsync策略,比如无fsync,每秒钟一次fsync,或者每次执行写入命令时fsync。AOF的默认策略为每秒钟fsync一次,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生 阅读全文
posted @ 2024-12-13 13:44 似梦亦非梦 阅读(65) 评论(0) 推荐(0) 编辑
摘要:优点:RDB是一个非常紧凑(compact)的文件,它保存了Redis在某个时间点上的数据集。这种 文件非常适合用于进行备份:比如说,你可以在最近的24小时内,每小时备份一次RDB文件,并 且在每个月的每一天,也备份一个RDB文件。这样的话,即使遇上问题,也可以随时将数据集还原 到不同的版本。RDB 阅读全文
posted @ 2024-12-13 13:40 似梦亦非梦 阅读(38) 评论(0) 推荐(0) 编辑
摘要:RDB持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 AOF持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数 据集。AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Re 阅读全文
posted @ 2024-12-13 13:36 似梦亦非梦 阅读(11) 评论(0) 推荐(0) 编辑
摘要:● String——字符串 String数据结构是简单的key-value类型,value不仅可以是String,也可以是数字(当数字类型用Long可以表示的时候encoding就是整型,其他都存储在sdshdr当做字符串)。 ● Hash——字典 在Memcached中,我们经常将一些结构化的信息 阅读全文
posted @ 2024-12-13 13:34 似梦亦非梦 阅读(9) 评论(0) 推荐(0) 编辑
摘要:● 存储方式不同,Memcache是把数据全部存在内存中,数据不能超过内存的大小,断电后数据库会挂 掉。Redis有部分存在硬盘上,这样能保证数据的持久性。 ● 数据支持的类型不同memcahe对数据类型支持相对简单,redis有复杂的数据类型。 ● 使用底层模型不同 它们之间底层实现方式以及与客户 阅读全文
posted @ 2024-12-13 13:32 似梦亦非梦 阅读(5) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示