Redis的一些面试题

什么是Redis

Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。
简单来说:C语言开发,单线程,基础内存操作,内存操作是很快,例如(商品的大分类,不会经常变更,但是每次都会查,这样放在Redis要比直接查省性能)

优点

读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点

主要从“高性能”和“高并发”。请求量小,完全没必要,任何的中间的件都会占用线上服务器资源,而且可能会出现中间件底层问题

支持的数据类型

(一)String
做一些复杂的计数功能的缓存。
(二)hash
保存实体,例如可做用户单点保存实体
(三)list
利用lrange命令,做基于redis的分页功能
可以实现简单的消息队列的功能。
list可以很好的完成排队,先进先出的原则。
(四)set
去重,性能很好
(五)sorted set
可配置权重,做排行的操作,是可行的

缓存雪崩

我们可以简单的理解为:原有的缓存大面积同一时刻过期,这一时刻大量请求又过来,原本查询缓存数据,全部查询数据库了
解决办法:
加锁或者队列或者过期时间分散开

缓存穿透

缓存穿透是指查询数据,在数据库没有,缓存中也不会有。查询两次,浪费资源
解决办法;
1.布隆过滤器:个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
布隆过滤器的误判率:是存在的数据存在误判。但是不存在布隆过滤器的一定不存在。
2.查询数据库,没有的值缓存在rdeis,设置过期时间

缓存击穿

热点高的一个缓存数据,过期的瞬间,大量请求过来,导致直接绕过缓存去查数据库。
解决办法;
采用SETNX锁住这个值,结束请求后删除

Memcache与Redis的区别都有哪些?

1.Memcache纯内存,宕机和断点会导致缓存数据丢失;Redis存在AOF(实时备份效率低set就备份)和RDB(可配置的定时备份)的策略,可持久化数据。
2.Memcache智能操作String,Redis是5种数据类型。
3.Redis 最大存储数据大小512M;memcache 最大 1mb。
4.Redis速度高于Memcache。
5.底层协议不同

单线程的redis为什么这么快

纯内存操作,非阻塞IO,单线程避免了上下文切换

redis的过期策略以及内存淘汰机制

redis默认定期删除策略:redis每个100ms随机抽取进行检查部分
redis默认惰性删除:获取某个key的时候,redis会检查一下当前key的过期时间,过期删除
除了以上在配置redis的redis.conf中有一行配置
这是必须要配置的策略(6种):
1.volatile-lru -> 在设定了超时时间的数据中,查找最近最少使用的数据进行删除
2.allkeys-lru -> 在所有的key中查询最近最少使用的数据进行删除
3.volatile-random -> 在设定了超时时间的数据中随机进行删除.
4.allkeys-random -> 在所有的key中进行随机的删除
5.volatile-ttl -> 删除最接近超时时间的数据
6.noeviction ->不做删除处理.只是返回报错信息.
默认使用是第6种

redis的分片处理

在不降低redis的效率的前提下使用分片操作,可以动态的对redis的内存进行扩容.
redis内存采用hash一致性算法

均衡性
说明:经过hash值运算结果,尽可能的让数据均匀的分配到节点中,保证数据的均衡性.
每个节点中的数据最好保持1/n的数据
在这里插入图片描述

单调性
说明:由于节点的新增.这时的数据应该动态的迁移.这种特性叫做单调性.
规则:已经挂载好的数据,原有节点尽可能保持不变.
在这里插入图片描述

分散性
原则:一个key经过hash计算后的位置一定是唯一的!!!
说明:由于分布式的操作,一个key可能落入多个位置(多个值)这种特性叫做分散性
在这里插入图片描述
说明:
从任意的角度而言,都满足哈希一致性算法的要求.但是从宏观角度而言可能会出现同一个key值所对应的位置是不用的.

负载
说明:负载是从另一个角度研究分散性.
概念说明:由于分布式的操作,同一个位置可能会有多个数据.哈希一致性算法要求应该尽可能的降低负载.
在这里插入图片描述
说明:根据哈希一致性算法的要求.当key值已经进行了数据的分配.这时key2也需要进行赋值操作.那么key2就会把key进行覆盖.那么这时的数据是有问题的.所有尽可能的降低负载.

Rdeis集群

我搭建过得应为3种:
1.主从模式
master主写,slave读
缺点:
master节点在主从模式中唯一,若master挂掉,则redis无法对外提供写服务。没实现高可用
2.哨兵模式
sentinel模式,客户端连接哨兵,当出现某台主机宕机,会自动分配到备用机上,实现高可用。
缺点:运维复杂,哨兵选举期间,不能对外提供服务
3.集群模式
哨兵模式监控权交给了哨兵系统,集群模式中是工作节点自己做监控
哨兵模式发起选举是选举一个leader哨兵节点来处理故障转移,集群模式是在从节点中选举一个新的主节点,来处理故障的转移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值