Redis面试题
Redis面试题
微软MVP Eleven
这个作者很懒,什么都没留下…
展开
-
2021-05-14 Redis面试题 如何保证缓存与数据库双写时的数据一致性?
如何保证缓存与数据库双写时的数据一致性?你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。还有一种方式就是可能会暂时产生不一致的原创 2021-05-14 12:44:14 · 58730 阅读 · 0 评论 -
2021-05-14 Redis面试题 redis进行缓存降级
什么时候需要缓存降级?当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。缓存降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。在进行降级之前要对系统进行梳理,看看系统是不是可以丢卒保帅;从而梳理出哪些必须誓死保护,哪些可降级;比如可以参考日志级别设置预案:一般:比如有些服务偶尔因为网络抖动或者服务正在上线而超转载 2021-05-14 12:41:40 · 59429 阅读 · 0 评论 -
2021-05-14 Redis面试题 什么是 RedLock?
什么是 RedLock?Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:安全特性:互斥访问,即永远只有一个 client 能拿到锁避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区容错性:只要大部分 Redis 节点存活就可以正常提供服务...原创 2021-05-14 12:41:04 · 58654 阅读 · 0 评论 -
2021-05-14 Redis面试题 如何解决 Redis 的并发竞争 Key 问题?
如何解决 Redis 的并发竞争 Key 问题?所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同!推荐一种方案:分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并发竞争 Key 问题,不要使用分布式锁,这样会影响性能)基于zookeeper临时有序节点可以实现的分布式锁。大致思想为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定原创 2021-05-14 12:40:31 · 58644 阅读 · 0 评论 -
2021-05-14 Redis面试题 redis 部署生产环境
生产环境中的 redis 是怎么部署的?redis cluster,10 台机器,5 台机器部署了 redis 主实例,另外 5 台机器部署了 redis 的从实例,每个主实例挂了一个从实例,5 个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每秒 5 万,5 台机器最多是 25 万读写请求/s。机器是什么配置?32G 内存+ 8 核 CPU + 1T 磁盘,但是分配给 redis 进程的是10g内存,一般线上生产环境,redis 的内存尽量不要超过 10g,超过 10g 可能会有问题。5原创 2021-05-14 12:39:23 · 58286 阅读 · 1 评论 -
2021-05-14 Redis面试题 Redis事务其他实现方式?
Redis事务其他实现方式?1、基于Lua脚本,Redis可以保证脚本内的命令一次性、按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程中如果部分命令运行错误,剩下的命令还是会继续运行完2、基于中间标记变量,通过另外的标记变量来标识事务是否执行完成,读取数据时先读取该标记变量判断是否事务执行完成。但这样会需要额外写代码实现,比较繁琐...原创 2021-05-14 12:38:47 · 58397 阅读 · 0 评论 -
2021-05-14 Redis面试题 简单描述下Redis线程模型
简单描述下Redis线程模型Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器(file event handler)。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)原创 2021-05-14 12:38:14 · 58064 阅读 · 0 评论 -
2021-05-14 Redis面试题 Redis的内存淘汰策略有哪些?
Redis的内存淘汰策略有哪些?Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。1、全局的键空间选择性移除noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。(这个是最常用的)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。2、设置过期时间的键空间选择性移除volatile-l原创 2021-05-14 12:37:38 · 58246 阅读 · 1 评论 -
2021-05-14 Redis面试题 Redis持久化数据和缓存怎么做扩容?
Redis持久化数据和缓存怎么做扩容?1、如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。2、如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Redis集群可以做到这样。...原创 2021-05-14 12:36:46 · 59422 阅读 · 4 评论 -
2021-05-14 Redis面试题 如何选择合适的持久化方式?
如何选择合适的持久化方式?1、一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。2、如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。3、有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB原创 2021-05-14 12:36:14 · 58172 阅读 · 0 评论 -
2021-05-14 Redis面试题 为什么要用 Redis 而不用 map/guava 做缓存?
为什么要用 Redis 而不用 map/guava 做缓存?缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复原创 2021-05-14 12:35:42 · 58191 阅读 · 0 评论 -
2021-05-14 Redis面试题 遇到缓存一致性问题,你怎么解决的?
遇到缓存一致性问题,你怎么解决的?由于缓存和数据库不属于同一个数据源,本质上非原子操作,所以是无法保证强一致性的,只能去实现最终一致性。解决方案:延时双删:先更新数据库同时删除缓存,等2秒后再删除一次缓存,等到读的时候在回写到缓存。利用工具(canal)将数据库的binlog日志采集发送到MQ中,然后通过ACK机制确认处理删除缓存...原创 2021-05-14 12:35:06 · 58319 阅读 · 0 评论 -
2021-05-14 Redis面试题 项目中有出现过缓存击穿,简单说说怎么回事?
项目中有出现过缓存击穿,简单说说怎么回事?缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般会从数据库中加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮解决方案:用分布式锁控制访问的线程,使用redis的setnx互斥锁先进行判断,这样其他线程就处于等待状态,保证不会有大并发操作去操作数据库。不设超时时间,采用volatile-lru淘汰策略缺点:会造成写一致问题,当数据库数据发生更新时,缓存中的数据不会及时更新,这样会造成数原创 2021-05-14 12:34:33 · 58217 阅读 · 0 评论 -
2021-05-14 Redis面试题 缓存穿透怎么导致的?
缓存穿透怎么导致的?在高并发下查询key不存在的数据,会穿过缓去存查询数据库。导致数据库压力过大而宕机。解决方法:对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。缺点:缓存太多空值占用了更多的空间使用布隆过滤器。在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回,存在再查缓存和DB。布隆过滤器原理: 当一个元素被加入集合时,将这个元素通过n次Hash函数结果映射成一个数组中的n个原创 2021-05-14 12:33:29 · 57598 阅读 · 0 评论 -
2021-05-13 Redis面试题 简单说说缓存雪崩及解决方法
简单说说缓存雪崩及解决方法缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。)解决办法:大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲原创 2021-05-13 09:45:30 · 56930 阅读 · 1 评论 -
2021-05-13 Redis面试题 AOF的优缺点?
AOF的优缺点?● 优点:使用AOF持久化会让Redis变得非常耐久(much more durable):你可以设置不同的fsync策略,比如无fsync,每秒钟一次fsync,或者每次执行写入命令时fsync。AOF的默认策略为每秒钟fsync一次,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据(fsync会在后台线程执行,所以主线程可以继续努力地处理命令请求)。AOF文件是一个只进行追加操作的日志文件(append onlylog),因此对AOF文原创 2021-05-13 09:44:54 · 57606 阅读 · 0 评论 -
2021-05-13 Redis面试题 RDB的优缺点?
RDB的优缺点?**优点:**RDB是一个非常紧凑(compact)的文件,它保存了Redis在某个时间点上的数据集。这种文件非常适合用于进行备份:比如说,你可以在最近的24小时内,每小时备份一次RDB文件,并且在每个月的每一天,也备份一个RDB文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心,或者亚马逊S3中。RDB可以最大化Redis的性能:父原创 2021-05-13 09:44:22 · 57176 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis的持久化是什么?
Redis的持久化是什么?RDB持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾。Redis还可以在后台对AOF文件进行重写(rewrite),使得AOF文件的体积不会超出保存数据集状态所需的实际大小。AOF和RDB的同时应用:当Redis重启时,它会优先使用AOF文件原创 2021-05-13 09:43:46 · 56980 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis有哪几种数据结构?
Redis有哪几种数据结构?● String——字符串String数据结构是简单的key-value类型,value不仅可以是String,也可以是数字(当数字类型用Long可以表示的时候encoding就是整型,其他都存储在sdshdr当做字符串)。● Hash——字典在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般是JSON格式),比如用户的昵称、年龄、性别、积分等。● List——列表List说白了就是链表(redis使用双原创 2021-05-13 09:43:13 · 57035 阅读 · 0 评论 -
2021-05-13 Redis面试题 Memcache与Redis的区别都有哪些?
Memcache与Redis的区别都有哪些?● 存储方式不同,Memcache是把数据全部存在内存中,数据不能超过内存的大小,断电后数据库会挂掉。Redis有部分存在硬盘上,这样能保证数据的持久性。● 数据支持的类型不同memcahe对数据类型支持相对简单,redis有复杂的数据类型。● 使用底层模型不同 它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。● 支持的value大小不一样redis最原创 2021-05-13 09:42:42 · 56987 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis最适合的场景有哪些?
Redis最适合的场景有哪些?● 会话缓存(Session Cache)● 全页缓存(FPC)● 队列● 排行榜/计数器● 发布/订阅原创 2021-05-13 09:42:05 · 56843 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis常见的性能问题都有哪些?如何解决?
Redis常见的性能问题都有哪些?如何解决?● Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。● Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Sl原创 2021-05-13 09:41:29 · 56619 阅读 · 0 评论 -
2021-05-13 Redis面试题 为什么redis需要把所有数据放到内存中?
为什么redis需要把所有数据放到内存中?Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。...原创 2021-05-13 09:40:54 · 56614 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis回收进程如何工作的?
Redis回收进程如何工作的?一个客户端运行了新的命令,添加了新的数据。Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。...原创 2021-05-13 09:29:48 · 56476 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis如何做内存优化?
Redis如何做内存优化?尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。...原创 2021-05-13 09:28:44 · 56673 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis key的过期时间和永久有效分别怎么设置?
Redis key的过期时间和永久有效分别怎么设置?EXPIRE和PERSIST命令。原创 2021-05-13 09:28:11 · 57028 阅读 · 2 评论 -
2021-05-13 Redis面试题 Redis事务相关的命令有哪几个?
Redis事务相关的命令有哪几个?MULTI、EXEC、DISCARD、WATCH原创 2021-05-13 09:27:16 · 56218 阅读 · 0 评论 -
2021-05-13 Redis面试题 怎么理解Redis事务?
怎么理解Redis事务?事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。...原创 2021-05-13 09:26:43 · 56600 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis中的管道有什么用?
Redis中的管道有什么用?一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。...原创 2021-05-13 09:26:11 · 55968 阅读 · 0 评论 -
2021-05-13 Redis面试题 怎么测试Redis的连通性?
怎么测试Redis的连通性?ping原创 2021-05-13 09:25:39 · 55267 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis集群如何选择数据库?
Redis集群如何选择数据库?Redis集群目前无法做数据库选择,默认在0数据库。原创 2021-05-13 09:25:06 · 55600 阅读 · 3 评论 -
2021-05-13 Redis面试题 Redis集群最大节点个数是多少?
Redis集群最大节点个数是多少?16384个。原创 2021-05-13 09:24:28 · 55740 阅读 · 3 评论 -
2021-05-13 Redis面试题 Redis集群之间是如何复制的?
Redis集群之间是如何复制的?异步复制原创 2021-05-13 09:23:54 · 54235 阅读 · 1 评论 -
2021-05-13 Redis面试题 Redis集群会有写操作丢失吗?为什么?
Redis集群会有写操作丢失吗?为什么?Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。原创 2021-05-13 09:23:22 · 48902 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis集群的主从复制模型是怎样的?
Redis集群的主从复制模型是怎样的?为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.原创 2021-05-13 09:22:51 · 48924 阅读 · 0 评论 -
2021-05-13 Redis面试题 说说Redis哈希槽的概念?
说说Redis哈希槽的概念?Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。...原创 2021-05-13 09:22:14 · 48201 阅读 · 4 评论 -
2021-05-13 Redis面试题 Redis如何设置密码及验证密码?
Redis如何设置密码及验证密码?设置密码:config set requirepass 123456授权密码:auth 123456原创 2021-05-13 09:21:37 · 48069 阅读 · 2 评论 -
2021-05-13 Redis面试题 Jedis与Redisson对比有什么优缺点?
Jedis与Redisson对比有什么优缺点?Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。...原创 2021-05-13 09:21:05 · 48127 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis和Redisson有什么关系?
Redis和Redisson有什么关系?Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLo原创 2021-05-13 09:20:29 · 48023 阅读 · 0 评论 -
2021-05-13 Redis面试题 Redis支持的Java客户端都有哪些?官方推荐用哪个?
Redis支持的Java客户端都有哪些?官方推荐用哪个?Redisson、Jedis、lettuce等等,官方推荐使用Redisson。原创 2021-05-13 09:19:49 · 47889 阅读 · 0 评论