(面试题)简单介绍一下redis?

花生 可爱的博主

时间: 2021-04-21 阅读: 95 字数:3270

{}
redis是一个key+value类型,类似Java中的map集合的非关系型的数据库,基于内存也可以持久化的数据库,相对于关系型数据库(由于数据存储在硬盘上),性能高,因此我们将redis用于做缓存使用

问题:简单介绍一下redis?

  • 答:redis是一个key+value类型,类似Java中的map集合的非关系型的数据库,基于内存也可以持久化的数据库,相对于关系型数据库(由于数据存储在硬盘上),性能高,因此我们将redis用于做缓存使用,redis有五大数据类型(如下)。
  1. string

    string类型是最简单的数据类型,一个key对应一个value,项目中我们主要用于单点登录,用于储存用户的token,用string类型保存!

  2. hash

    hash类型中的key是string类型,value又是一个map(也就是一个key+value的类型),针对这种数据特性,比较适合存储对象,在我们购物车中的商品就是用这种数据类型来进行储存。

  3. list

    list类型是按照插入顺序的字符串链表(双向链表结构),主要命令是lpushrpush,可以支持反向查找和遍历,如果使用的话主要储存商品评论列表,key是该商品的id,vlaue是该商品的评论列表!

  4. set

    Set类型是用哈希表类型的字符串序列,没有顺序,集合成员是唯一的,没有重复数据,底层主要是由一个value永远为null的hashmap来实现的。 我们的电商项目中没有用到这个数据类型。这个应用场景一般存储一个列表数据,但列表里面又不希望出现重复数据,比如微博应用中,可以将一个用户所有关注的对象放在一个集合中,将其所有粉丝存在一个集合,这样我们就可以实现两个人的共同好友、共同关注等需求;

  5. zset

    zset(sorted set)类型和set类型基本是一致的,不同的是zset这种类型会给每个元素关联一个double类型的分数(score),这样就可以为成员排序,并且插入是有序的。这种数据类型如果使用的话主要用来统计商品的销售排行榜,比如:items:sellsort 10 1001 20 1002 这个代表编号是1001的商品销售数量为10,编号为1002的商品销售数量为20。

(3)我们项目中主要用redis的java客户端Jedis来操作redis数据库,用来缓存各种操作频繁,不经常修改的数据,这样就减轻了数据库的访问压力,提高了查询效率

问题:你知道redis中的持久化吗?

  • 答:redis中有两种持久化的机制,RDB、AOF

RDB(半持久化方式)

RDB模式下,会根据配置文件中的save n m ,表示在n秒时间内,该数据被修改m次,则把数据持久化!由于在服务器中进行io的操作,及其占用内存,这样可以减少io的操作。优点:效率高,缺点:数据库一旦宕机,没有被持久化的数据将会丢失!不安全

AOF(全持久化方式)

在AOF的模式下,每一次数据发生变化,就持久化一次。redis默认使用的RDB模式,如果想使用AOF,将配置文件中的appendonly on改为yes即可!优点:保证了数据的完整性。缺点:这样使得效率极低。

问题:你用redis做过集群吗?你们做集群的时候用了几台服务器,怎么搭建的?

答:做过,由于redis的数据是放在缓存当中的,所有不适合做大型的数据存储,大型数据的存储主要是hadoop(还度铺)Hbase(分布式存储系统)或者MogoDB。因此redis主要是用于来处理高并发的,对于我们的项目来说,电商项目如果并发大的话,一台单独的redis服务器是不够支撑并发的,这就需要我们扩展多态设备进行协同合作,即用到集群!

redis搭建集群的方式有很多种,例如有客户端分片、Twemproxy、Codis等,但是redis3.0之后就支持redis-cluster集群,,这种方式采用的是无中心结构,每个节点保存数据和整个集群的状态,每个节点都和其他所有节点连接。如果使用的话就用redis-cluster集群。

集群这块直接说是公司运维搭建的,小公司的话也有可能由我们自己搭建,开发环境我们也可以直接用单机版的。但是可以了解一下redis的集群版。搭建redis集群的时候,对于用到多少台服务器,每家公司都不一样,大家针对自己项目的大小去衡量。举个简单的例子:

我们项目中redis集群主要搭建了6台,3主(为了保证redis的投票机制)3从(高可用),每个主服务器都有一个从服务器,作为备份机。

问题:redis有事务吗?

答:redis是有事物的,redis的事物的开始命令为MULTI事物结束的命令为EXEC 当输入MULTI命令之后,再执行对数据的操作语句,是不会马上生效的,只会返回一个QUEUED,表示这个命令已经被服务器接收并保护起来,,只有在输入命令exec时,语句才会逐条执行。

  • 如下图

图片的描述

redis的哨兵机制

  • redis的哨兵机制主要有,监控、提醒;

监控:用于监控主服务器、从服务器是否正常运行。

提醒:当有一台redis服务器挂掉之后,将会通过api自动发送通知

自动故障迁移:当redis主服务器挂掉了,从服务器自动转换为主服务器!

redis中的缓存穿透

缓存穿透就是当有人去访问一个不存在的key的数据时,redis当中不存在,就要去数据库查找一下,去数据库中也没有对应的value,这时还对key并发请求很大,这就对数据库造成了很大的压力!这就是缓存穿透

  • 解决方法:将数据库查到的空,也缓存到redis当中!

redis中的缓存雪崩

缓存雪崩,就是当服务器中的数据在一个固定的时间段,集体失效,在这个瞬间对数据库的访问压力就很大。

  • 解决办法:让每个不同的key失效的时间均匀一点,或者在缓存失效之前更新缓存(缓存预热)!
本文章网址:https://www.sjxi.cn/detil/53746d8ba5ec470ebd0535b0851f9ec6

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复