1. 数据类型和接口
单机模式下,Redis支持以下的数据结构和接口:
2. Redis集群
Redis集群实现了单机模型功能集合的一个子集,包含所有单个key的功能。Redis 集群中的节点有以下责任:
- 持有键值对数据。
- 记录集群的状态,包括键到正确节点的映射(mapping keys to right nodes)。
- 自动发现其他节点,识别工作不正常的节点,并在有需要时,在从节点中选举出新的主节点。
Redis 集群的键空间被分割为 16384
个槽(slot), 集群的最大节点数量也是 16384
个。每个主节点都负责处理 16384
个哈希槽的其中一部分。以下是负责将键映射到槽的算法:
HASH_SLOT = CRC16(key) mod 16384
集群的容错功能是通过使用主节点(master)和从节点(slave)两种角色(role)的节点(node)来实现的:
- 主节点和从节点使用完全相同的服务器实现, 它们的功能(functionally)也完全一样, 但从节点通常仅用于替换失效的主节点,也就是所谓的冷备份。
- 不过, 如果不需要保证“先写入,后读取”操作的一致性(read-after-write consistency), 那么可以使用从节点来执行只读查询。
客户端可以自由地向集群中的任何一个节点发送命令请求, 并可以在有需要时, 根据转向错误所提供的信息, 将命令转发至正确的节点, 所以在理论上来说, 客户端是无须保存集群状态信息的。
3.CAP分析
对redis集群进行CAP分析,有集群的实现方式,不难发现
- 对Redis集群的读写操作,都由负责给定key的节点处理,redis的单节点是单线程处理的,所以是满足强一致性C的。
- 某个主节点失效的情况下,由此主节点处理的key的读写会返回失败。所以是不满足可用性的A。
- Redis可以在部分节点失效的情况下,继续提供服务,所以是满足分区容错性P的。
可以看出Redis是比较典型的CP型分布式系统。
4. 高效指南
SCAN命令
SCAN 命令及其相关的 SCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):
- SCAN 命令用于迭代当前数据库中的数据库键。
- SSCAN 命令用于迭代集合键中的元素。
- HSCAN 命令用于迭代哈希键中的键值对。
- ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像KEYS命令、SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。