你们使用Redis是单点还是集群 ? 哪种集群 ?
我们Redis使用的是哨兵集群 , 一主二从 , 三个哨兵 , 三台Linux机器
Redis集群有哪些方案, 知道嘛 ?
我所了解的Redis集群方案
- 主从复制集群 : 读写分离, 一主多从 , 解决高并发读的问题
- 哨兵集群 : 主从集群的结构之上 , 加入了哨兵用于监控集群状态 , 主节点出现故障, 执行主从切换 , 解决高可用问题
- Cluster分片集群 : 多主多从 , 解决高并发写的问题, 以及海量数据存储问题 , 每个主节点存储一部分集群数据
什么是 Redis 主从同步?
Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。
主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据。一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
主从数据同步主要分二个阶段 :
第一阶段 : 全量复制阶段
- slave节点请求增量同步
- master节点判断replid,发现不一致,拒绝增量同步
- master将完整内存数据生成RDB,发送RDB到slave
- slave清空本地数据,加载master的RDB
第二阶段 : 增量复制阶段
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
- slave执行接收到的命令,保持与master之间的同步
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
你们用过Redis的事务吗 ? 事务的命令有哪些 ?
Redis 作为 NoSQL 数据库也同样提供了事务机制。在 Redis 中,MULTI / EXEC / DISCARD / WATCH 这四个命令事务的相关操作命令
我们在开发过程中基本上没有用到过Redis的事务
Redis 和 Memcached 的区别有哪些?
- Redis 提供复杂的数据结构,丰富的数据操作 , Memcached 仅提供简单的字符串。
- Redis原生支持集群模式 , Memcached不支持原生集群
- Memcached 不支持持久化存储,重启时,数据被清空, Redis 支持持久化存储,重启时,可以恢复已持久化的数据
Redis的内存用完了会发生什么?
如果达到设置的上限,Redis 的写命令会返回错误信息( 但是读命令还可以正常返回。) 也可以配置内存淘汰机制, 当 Redis 达到内存上限时会冲刷掉旧的内容。