redis常见面试题(一)

1.redis是什么?

    (1)Redis是一个高性能的键值数据库,它是完全开源免费的,而且redis是一种NOSQL(非关系型)类型的数据库,是为了解决高并发,高扩展,大数据储存等一系列问题而产生的数据库解决方案,是一个非关系型数据库,但是它是不能替代关系型数据库的,只能作为特定环境下的扩充。

    (2)Redis是一个以键值储存的数据库结构型服务器,它支持数据结构类型包括:字符串(string),链表(list),哈希(hash),集合(set),有序集合(zset/sortedset)等,为了保证读取效率,redis把数据对象都储存在内存当中,它可以支持周期性的把更新的数据写入磁盘中文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。

2.Redis有什么特点?

    (1)Redis是一个Key-Value类型的内存数据库,和memcached有点像,整个数据库都是在内存当中进行加载操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。Redis的性能很高,可以处理超过10万次/秒的读写操作,是目前已知性能最快的Key-Value DB。

    (2)除了性能外,Redis还支持保存多种数据结构,此外单个value的最大限制是1GB,比memcached的1MB高太多了,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。

    (3)当然,Redis也有缺陷,那就是是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis比较适合那些局限在较小数据量的高性能操作和运算上。

3.reids有几种类型。

(1)字符串string
(2)散列hash
(3)列表list
(4)集合set
(5)有序集合sorted set

4.redis持久化数据有几种类型,它们的区别?

答:有两种类型
(1)RDB 类似于快照在指定的时间把数据存储到磁盘中,恢复数据时将保存的数据全部覆盖数据库中的数据。
    优点:

  •         占用内存小
  •         恢复速度快

    缺点:

  •         数据太大的话会影响性能
  •         由于时隔一段时间做一次备份,所以如果中途down掉了就会失去最后一次快照后的所有数据。

(2)AOF 以日志的形式来记录每一个写的数据,将redis所有执行过的数据都保存下来,只许追加文件但不可以改写文件。

    优点:

  •         备份机制更稳健,数据丢失的机率更低。
  •         可以读日志文件(人可以读懂),可以处理误操作(哪些地方写错了可以改)。

    缺点:

  •         比起RDB占用磁盘的空间更大。
  •         回复备份速度要慢。
  •         每次读写都同步的话,有一定的性能压力。
  •         存在个别bug,造成数据不能回复。

5.Redis和MySQL数据一致性问题解决方案?

(1)第一种方案:采用延时双删策略。
    ①先删除缓存
    ②再写数据库
    ③休眠1秒
    ④再删缓存
    ⑤需要评估自己的项目读数据业务逻辑的耗时,这么做的目的,就是确保读请求结束,写请求可以删除读请求造成的缓存脏数据。
    ⑥该方案的弊端:结合双删策略+缓存超时设置,这样最差的情况就是在超时时间内数据存在不一致,而又增加了写请求的耗时。
(2)第二种方案:异步更新缓存(基于订阅binlog的同步机制)
    ①MySQL binlog增量订阅消费+消息队列+增量数据跟新到redis
    ②读redis:热数据基本都在reids
    ③写MySQL:增删改都是操作MySQL
    ④更新Redis数据:MySQL的数据操作binlog,来更新到redis

6.Redis相比memcached有哪些优势?

(1)Memcached所有的值都是简单的字符串,redis作为其的代替者拥有更丰富的数据类型。
(2)Redis速度要比memcached快很多
(3)Redis可以将数据持久化到磁盘

7.Redis与memcached有哪些区别?

    (1)存储方式:memcache是将数据都存储在内存中,断电的话数据会全部丢失,数据不能超过内存大小,redis支持持久化将数据持久化到磁盘中,这样能保证数据的持久性。
    (2)数据类型支持:memcache只支持简单的类型,redis可以支持复杂的类型。
    (3)使用底层模型不同:它们之间底层实现方式以及与客户端之间的通信的应用协议不一样,redis 直接自己构建了vm机制,因为一般的系统调用系统函数的话,会浪费一定的时间区移动和请求。
    (4)Reids 支持主从结构,可以进行读写分离。
    (5)Redis有强大的命令,不是像Memcache那样仅仅使用内存,而浪费掉了CPU资源。

8.使用redis有哪些好处?

    (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
    (2) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行2) 支持丰富数据类型,支持string,list,set,sorted set,hash
    (3) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。

9.redis常见性能问题和解决方案。

    (1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
    (2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
    (3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
    (4). Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

10. mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

    相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6种数据淘汰策略:
  volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  no-enviction(驱逐):禁止驱逐数据。

11.为什么redis需要把所有数据放到内存中?

        Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值