常见的Redis面试题

什么是Redis

Redis是一款内存高速缓存数据库,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,如字符串(string),哈希(hash),列表(list),集合(set),有序集合(zset)

Redis有什么特点

  • Redis以内存作为数据存储介质,读写数据的效率极高
  • Redis中存储的数据是持久化的,断电或重启,数据不会丢失
  • Redis的存储分为内存存储、磁盘存储和log文件
  • Redis可以利用快照和AOF把数据存到磁盘中因此redis才能持久化
  • Redis支持主从,可以配置集群

使用Redis有哪些好处?

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

Redis与memcache区别

  • 从数据存储位置上来分,memcache的数据存在内存中,而redis既可以存储在内存中,也可以存储的到磁盘中,达到持久化存储的功能,memcache一旦断电,数据全部丢失,redis可以利用快照和AOF把数据存到磁盘中,当恢复时又从磁盘中读取到内存中,当物理内存使用完毕后,可以把数据写入到磁盘中。
  • 从存储数据的类型上来分,memcache和redis存储的方式都是键值对,只不过redis值的类型比较丰富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存储的是字符串。
  • 从架构层次来分,Redis支持master-slave(主—从)模式应用,memcache支持分布式。
  • 另外从存储数据的大小上来分,Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。但是Memcache在存储100K以上的数据,性能稍微好一点。
  • 另外redis只支持单核,memcache可以支持多核,当然关于redis取代memcache的说法,在一般情况下,两者性能都很高,在大多的业务场景选择上,redis的选择可能更加具有优势,但也不能说可以完全取代,最终还是取决于你的应用场景。

Redis缓存问题

缓存穿透:缓存穿透是指查询一条数据库和缓存都没有的一条数据,就会一直查询数据库,对数据库的访问压力就会增大
解决方案:

  • 缓存空对象:代码维护较简单,但是效果不好
  • 布隆过滤器:代码维护复杂,效果很好

缓存击穿:缓存击穿是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,瞬间对数据库的访问压力增大
造成缓存击穿的原因

  • 该数据没有人查询过,第一次就大并发的访问(冷门数据)
  • 添加到了缓存,redis有设置数据失效的时间,这条数据刚好失效,大并发访问(热点数据)

解决方案:

  • 后台刷新
  • 检查更新
  • 分级缓存
  • 加锁

缓存雪崩:缓存雪崩是指在某一个时间段,缓存集中过期失效,此刻无数的请求直接绕开缓存,直接请求数据库
造成雪崩的原因

  • redis宕机
  • 大部分数据失效

解决方案:

  • 缓存数据的时间设计随机,防止同一时间大量数据过期现象发生
  • 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据中
  • 设置热点数据永远不过期

redis数据类型和各自的应用场景

数据类型应用场景
字符串(string)缓存
哈希(hash)存储数据
队列(list)商品抢购
集合(set)共同好友
有序结合(zset)排行榜

Redis如何防止高并发

配置主从复制,一旦发现主机宕机,让下一个从机当主机

主从复制如何实现

mysql 中有一种日志,叫做 bin 日志(二进制日志),会记录下所有修改过数据库的 sql 语句。主从复制的原理实际是多台服务器都开启 bin 日志,然后主服务器会把执行过的 sql 语句记录到bin 日志中,之后从服务器读取这个 bin 日志,把该日志的内容保存到自己中继日志里面,从服务器再把中继日志中记录的 sql 语句同样的执行一遍。这样从服务器上的数据就和主服务器相同了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值