当前位置:   article > 正文

Redis面试题汇总_redis消除了传统数据库串行控制的开销

redis消除了传统数据库串行控制的开销

一、 Redis的优势有哪些? 

      1.性能极高,速度快,因为它可以在内存中运行,读的速度是110000次/s,写的速度是81000次/s。

      2.支持丰富的数据类型。 常用的5种数据类型为:String,list,set,hash及 zset(有序集合)等。

      3.原子性。单个Redis的操作要么全部成功,要么全部失败。多个操作是支持事务的,需要通过MULTI和EXEC指令包起来。

      4. 丰富的特性。Redis还支持消息的发布订阅,通知、key失效等特性。 

      5. 数据的持久性,在宕机时,可以自动将内存中的数据持久化到硬盘中。

二、Redis模块化

        布隆过滤器。通过bloomFilter过滤掉有很大可能不在数据库中的数据,减小Redis以及数据库的压力。 

        比如,先把所有用户的id存放到一个bloomFilter里,然后在访问时根据id来判断是否在过滤器里,如果存在那么放行,如果不存在那么就直接return。布隆过滤器默认的误判概率为3%,一般在应用启动的时候加载,使用@PostConstruct注解即可在应用启动时加载布隆过滤器。

三、Memcache与Redis的区别有哪些?  

       1. 存储方式。  Memcache会把数据库存到内存中,断电后会挂掉,数据不能超过内存的大小,而Redis有部分存在硬盘中,这样能保证数据的持久性。

       2. Memcache支持的数据类型相对比较简单。Redis有复杂的数据类型。

       3.使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议 不一样。 Redis 直接自己构建了 VM 机制(冷热数据分离,热数据保存到内存中,冷数据保存在磁盘里) ,因为一般的系统调用系统函数的话, 会浪费一定的时间去移动和请求。

四、Redis是多线程的嘛?

     1.  Redis是单进程单线程的。redis利用队列技术将并发访问由并行变为串行。消除了传统数据库串行控制的开销。

五、一个字符串类型能存储的最大容量是多少?

        512M。

六、Redis的持久化机制是什么?  各自的优缺点是什么?

         主要有2种方式,为RDB和AOF。

         RDB

         RDB(Redis Data Base)方式 ,使用快照的方式来备份数据,记录在某个时间点内,将数据写入到一个临时文件,持久化结束后,用这个临时文件替换上次的持久化文件,达到数据恢复。

         在config文件中的自带的配置文件redis.windows.conf可以看到 save 900 1 ,它表示在900s内有一个键发生改变时,需要执行快照备份,即将key进行备份。

我们可以在服务端的命令行来查看,redis-server会自动的300s内有10个key变化就备份key,900s内有一个key变化来开启一个线程来备份key。 

       

此方式的优点为:

       1.只有一个dump.db文件,方便持久化。

       2. 容灾性好,一个文件可以保存到安全的磁盘中。

       3.性能最大化,采用fork子线程来完成写操作,让主线程继续执行命令,所以是IO最大化。使用单独的子线程来保证redis的高性能,因为主线程不会进行任何的IO操作。 

       4. 相对于数据集大时,比AOF的启动效率更高。

        缺点:
        1.数据安全性低。RDB是间隔的时间来执行快照,如果持久化之间redis发生故障,那么会导致数据丢失,这种方式对于数据要求很严谨的时候不适合采用。

        AOF方式

         是指所有的命令行记录以redis命令请求协议的格式完全持久化存储,保存为AOF文件。

         优点:

        1.数据安全。通过配置apendfsync属性,有always,每进行一次命令操作记录到aof文件中一次。

        2. 通过append模式来写文件,即使中途服务器宕机,也可以通过redis-check-aof工具来解决数据一致性的问题。

         缺点:

         1.  AOF保存下来的数据文件比RDB要大,恢复速度要比RDB方式慢。

         2.  数据集大的时候比RDB启动效率要低。

七、Redis可以做异步队列嘛?

         1) 可以,一般使用list结构来作为队列。rpush生产消息,lpop消费消息。当lpop没有消息的时候,需要适当的sleep一下, redis 5.0 版本有自带消息队列,但是性能较差。

          2)如果不sleep可以实现消息队列嘛? 可以list还有一个指令叫 blpop,在没有消息的时候,会阻塞直到消息到来。

          3) 可以实现一对多的消费模式嘛?  可以。 使用pub/sub主题订阅模式,可以实现1:N的消息队列。但是pub/sub模式的缺点为: 在消费者下线的情况下,生产者的消息会丢失。 这个时候就要使用专业的消息队列如RabbitMQ, 其中吞吐量 kafka> rocketmq>rabbitmq。

八、Redis的Key淘汰策略有哪些?

      答:   1) LRU,  最近最少使用的key进行淘汰。

              2) 随机淘汰策略,随机选择一个key进行淘汰。

              3) key 剩余时间最短的淘汰。

九、Redis怎么保证并发的原子性?

     答:  通过使用lua脚本,将多个操作写到一个lua脚本里,redis会把lua脚本作为一个整体来执行,要么执行成功,要么执行失败,从而保证了原子性。

十、 Redis事务有了解过嘛?

       redis 事务的单个命令是原子性的,但是redis执行事务的过程不是原子性的。

命令含义
MUTI开启一个redis事务
EXEC结合MUTI命令,触发事务
DISCARD取消事务,同时事务块内所有命令会取消执行
WATCH  [KEY...]监控Key,如果被监控的key被修改了,那么事务会被打断
UNWATCH取消监控所有的key

十一、Redis的AOF 日志文件过大怎么解决?

     答:  通过重写AOF文件操作,相当于整理AOF文件里的内容,将AOF文件体积压缩, 通过命令 bgrewriteaof执行。

      

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/994959
推荐阅读
相关标签
  

闽ICP备14008679号