1. MySQL 和 Redis的区别

redis 面试题大全_缓存

2. Redis 和 memcached 的区别

Redis 和 memcached 都是从内存中读取,memcached比Redis读取更快,

但是redis有很多优点

  1. redis支持更丰富的数据类型,memcached只支持String。
  2. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,而Memecache不支持。
  3. memcached没有原生的集群模式,但是 redis支持集群.
  4. Memcached是多线程;Redis使用单线程的多路 IO 复用模型。

3. Redis的数据结构

  • 字符串String
  • 字典Hash
  • 有序非唯一列表List
  • 无序唯一集合Set
  • 有序唯一集合SortedSet

4. Redis持久化

  • RDB 全量的快照,默认5分钟备份一次
  • AOF 增量的日志,实时追加

当Redis停机时,会先用RDB恢复到一个点,然后用AOF补缺

5. Redis缓存击穿、缓存雪崩、缓存穿透

缓存雪崩:

大面积的缓存失效,全部打在了数据库----过期时间随机值,热点key永不过期

缓存穿透:

不断发起数据库和缓存中都不存在的请求(因为数据库不存在,则不会再缓存中存储),导致数据库压力增大----布隆过滤器、限流

缓存击穿:

热点key失效的瞬间,大量请求打到数据库—热点key永不过期

6. 布隆过滤器

如何判断一个元素在亿级数据中是否存在?—布隆过滤器

7. Redis高可用,同步

高可用:

  • 主从模式
    读写分离,master写,slave读。master挂了需要手动切换
  • 哨兵模式
    主从模式的基础上又增加了哨兵角色来监听master,master挂了会自动选举新的master
  • 集群模式
    无中心节点,数据分片存储,每一片都是一个多台机子组成的主从结构。互相监听

同步:

  • 主从同步
    首先从通知主,然后主备份rdb,发送给从,从更新
    最后主再把备份期间的数据通过aof发送给从,从就全部同步完了

8. Redis保持热点数据

首先设置过期时间

然后是设置淘汰机制,最常用的是一个机制是:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key

9. Redis分布式锁

实现原理

利用setNx命令

  • 返回1,当 key 的值被设置
  • 返回0,当 key 的值没被设置

为了防止死锁,需要设上过期时间。并且要保证这两步的原子性,需要保证原子性

Redission

用lua脚本保证原子性

我们项目中调用方法需要的参数

  1. 锁的范围key,比如一个前缀+订单id,就是锁这票订单
  2. 获取锁超时时间
  3. 过期时间(大于业务执行时间,或者不设)

另外还提供了一个WatchDog来续期

默认的加锁时间为 30s。如果你自己自定义时间,超过这个时间,锁就会自定释放,并不会延长。Watch Dog 机制其实就是一个后台定时任务线程,会每隔10秒检查一下,如果还持有锁key,就会重新设置过期时间为30s

跟zk实现分布式锁的区别

原理:zk的非临时节点,加上节点是有顺序的。当我们获取锁时,会在zk上加一个临时节点,标记01.其他线程在获取锁时,会排在后面02.然后01锁释放后会通知02