总结
- 缓存穿透、击穿、雪崩解决方案
- Redis数据结构底层实现
- Redis线程模型
参考
-
常见的缓存策略有哪些,如何做到缓存(比如redis)与DB里的数据一致性,你们项目中用到了什么缓存系统,如何设计的。
常见的缓存策略有:
- 先进先出策略 FIFO(First In,First Out)
- 最少使用策略 LFU(Least Frequently Used)
- 最近最少使用策略 LRU(Least Recently Used)
-
如何防止缓存击穿和雪崩。
-
缓存数据过期后的更新如何设计。
-
redis的list结构相关的操作。
-
Redis的数据结构都有哪些。
五大常用数据类型:
1、String
单key,单value,memcached也支持此类型
Redis最基本的数据类型,一个redis中字符串中最大有512M
2、Hash
一个键值对集合
3、List
是个链表,linkedList。
4、Set(集合)
无序集合,无重复。
5、Zset(sorted set:有序集合)
游戏里面用这个数据结构多
带个double分数。
-
Redis的使用要注意什么,讲讲持久化方式,内存设置,集群的应用和优劣势,淘汰策略等。
Redis提供两种持久化机制 RDB 和 AOF 机制:
- RDBRedisDataBase)持久化方式:是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 优点:(1)只有一个文件 dump.rdb,方便持久化。(2)容灾性好,一个文件可以保存到安全的磁盘。(3)性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能) (4)相对于数据集大时,比 AOF 的启动效率更高。缺点:数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
- AOFAppend-only file)持久化方式: 是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。优点:(1)数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。(2)通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。(3)AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))缺点:(1)AOF 文件比 RDB 文件大,且恢复速度慢。(2)数据集大的时候,比 rdb 启动效率低。
-
redis2和redis3的区别,redis3内部通讯机制。
集群方式的区别,3采用Cluster,2采用客户端分区方案和代理方案
通信过程说明:
1) 集群中的每个节点都会单独开辟一个TCP通道, 用于节点之间彼此
通信, 通信端口号在基础端口上加10000。
2) 每个节点在固定周期内通过特定规则选择几个节点发送ping消息。
3) 接收到ping消息的节点用pong消息作为响应。
-
当前redis集群有哪些玩法,各自优缺点,场景 。
单机版
特点:简单
问题:
- 内存容量有限
- 处理能力有限
- 无法高可用。
主从复制
Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。
只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。
特点:
- master/slave 角色
- master/slave 数据相同
- 降低 master 读压力在转交从库
问题:
- 无法保证高可用
- 没有解决 master 写的压力
哨兵
Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
特点:
- 保证高可用
- 监控各个节点
- 自动故障迁移
缺点:
- 主从模式,切换需要时间丢数据
- 没有解决 master 写的压力
集群(proxy 型)
Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。
特点:
- 多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
- 支持失败节点自动删除
- 后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致
缺点:
- 增加了新的 proxy,需要维护其高可用。
- failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预
集群(直连型):
从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
特点:
- 无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。
- 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
- 可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
- 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本
- 实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master的角色提升。
缺点:
- 资源隔离性较差,容易出现相互影响的情况。
- 数据通过异步复制,不保证数据的强一致性
-
Memcache的原理,哪些数据适合放在缓存中。
-
redis和memcached 的内存管理的区别。
-
Redis的并发竞争问题如何解决,了解Redis事务的CAS操作吗。
-
Redis的选举算法和流程是怎样的。
-
redis的持久化的机制,aof和rdb的区别。
-
redis的集群怎么同步的数据的。
-
知道哪些redis的优化操作。
-
Reids的主从复制机制原理。
-
Redis的线程模型是什么。
-
请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存。
-
如何看待缓存的使用(本地缓存,集中式缓存),简述本地缓存和集中式缓存和优缺点。
-
本地缓存在并发使用时的注意事项。
-
如果service还没执行完,分布式锁在 redis 中已经过期了,怎么解决这种问题
只要客户端一旦加锁成功,启动一个watch线程,他是一个后台线程,会每隔10秒检查一下,如果客户端还持有锁key,那么就会不断的延长锁key的生存时间。