Redis相关面试题

1. 什么是Redis?(远程内存数据库)

Redis(Remote Dictionary Server)是一个开源免费的key-value的高性能数据库.

2. Redis的优势?

  1. 支持数据持久化
  2. 支持多种数据结构存储
  3. 支持数据备份
  4. 速度快
  5. 支持事务(原子性)

3. Redis支持的数据类型以及使用场景

  1. String : 常用的,做计数功能缓存
  2. hash : 一般用于存储用户信息
  3. list : 生产者-消费者场景,先进先出
  4. set : 全局去重
  5. Zset(有序集合) : 排行榜

4. Redis 相比 Memcached 的区别有哪些?

  1. 数据类型:Memcached只支持string,Redis有五种数据类型.
  2. 速度:Redis的速度更快.
  3. 支持持久化:Redis可以持久化其数据,Memcached数据在duan.
  4. 存储方式:Memcached存储在内存中,Redis有部分存在硬盘上.

5. 什么是缓存雪崩,解决方法?

  1. 缓存雪崩

原有的缓存过期,新的缓存未到。原本应该访问缓存的请求都去访问了数据库,给数据库和内存造成巨大压力,导致系统奔溃。

  1. 解决方案
  1. 使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入 DB,保证部分可用,其余的请求返回断路器的默认值。
  2. 设置不同的缓存时间,保证一直有缓存.对缓存做高可用,防止缓存宕机

6. 什么是缓存穿透,解决方法?

  1. 缓存穿透

用户查询的数据不存在于数据库中,缓存中也没有,这样当用户请求该数据的时候,还要去数据库中在查一下,才会返回空.

  1. 解决方案
  1. 空数据也加到缓存中设置一个默认值,设置很短的过期时间.
    使用布隆过滤器,把所有数据的哈希值存在一个bigMap中,这样不存在的数据就会被bigMap拦截.

7. Redis中是如何实现分布式锁的?

7.1 分布式锁常见的三种实现方式

  1. 基于数据库乐观锁
  2. 基于Redis的分布式锁
  3. 基于Zookeeper的分布式锁

7.2 Redis实现分布式锁的条件

  1. 互斥性: 在任何时候,只有一个客户端能持有锁
  2. 不能死锁:客户端奔溃未解锁的,后续客户端能加锁
  3. 容错性:只要大部分Redis节点正常运行,客户端就能加锁和解锁

7.3

set 命令要用 set key value px milliseconds nx,替代 setnx + expire 需要分两次执行命令的方式,保证了原子性

//加锁、解锁  Lua脚本
//获取锁(unique_value可以是UUID等)
SET resource_name unique_value NX PX  30000

//释放锁(lua脚本中,一定要比较value,防止误解锁)
if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

8 Redis主要消耗什么物理资源

内存

9 如何测试Redis的连通性

ping

10 Redis如何做内存优化

尽量使用散列表

11 Redis常见的性能问题和解决方案?

  1. Master最好不要做任何持久化工作;
  2. 如果数据比较重要,某个slave开启aof备份数据,策略设置每秒同步一次;
  3. 为了主从复制的速度,Master和Slave最好在同一个局域网内;
  4. 尽量避免在压力很大的主库上增加从库;
  5. 主从复制不要使用图状结构,使用链表结构更稳定.

12

13

14

15

16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值