书籍详情
《Redis使用手册》[56M]百度网盘|亲测有效|pdf下载
  • Redis使用手册

  • 出版社:机械工业出版社
  • 出版时间:2019-09-01
  • 热度:8600
  • 上架时间:2024-06-30 08:52:20
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

内容简介
  本书系统化介绍Redis命令及其应用场景,内容深入,图文并茂,巨细靡遗,是掌握Redis的案头必备参考书。本书主要分为三大部分,共20章。第一部分“数据结构与应用”介绍Redis最核心的九种数据结构,列举了操作这些数据结构的众多命令及其详细信息,并在其中穿插介绍了多个使用 Redis 命令构建应用序的示例。通过这些程序示例,读者可以进一步加深对命令的认识,并学会如何在实际中应用这些命令,从而达到学而致用的目的。第二部分“附加功能”介绍Redis在数据结构的基础上为用户提供的额外功能。其中包括数据库管理、自动过期功能、流水线与事务、Lua 脚本、持久化、发布与订阅、模块管理等。读者可以通过阅读这一部分来学会如何将 Redis 应用在更多场景中。第三部分“多机功能”介绍 Redis 的三项多机功能:复制、Sentinel 和集群。读者可以通过阅读这一部分来获得扩展 Redis 读写性能的相关知识,并根据自己的情况为 Redis 系统选择合适的扩展方式。
作者简介
  黄健宏 2011年开始接触Redis,之后一直在持续地学习和研究Redis源码,并通过写书、翻译、讲授课程等方式分享Redis知识。他是《Redis设计与实现》的作者,《Redis实战》的译者,并且长期翻译和维护着在线的中文Redis文档《Redis命令参考》。他的个人网站是huangz.me。
目录
版权信息
前言
第1章 引言
1.1 Redis简介
1.2 内容编排
1.3 目标读者
1.4 预备工作
1.5 执行命令
1.6 配置服务器
1.7 示例代码
1.8 版本说明
1.9 读者服务网站
1.10 启程
第一部分 数据结构与应用
第2章 字符串
2.1 SET:为字符串键设置值
2.1.1 改变覆盖规则
2.1.2 其他信息
2.2 GET:获取字符串键的值
2.3 GETSET:获取旧值并设置新值
示例:缓存
示例:锁
2.4 MSET:一次为多个字符串键设置值
2.5 MGET:一次获取多个字符串键的值
2.6 MSETNX:只在键不存在的情况下,一次为多个字符串键设置值
示例:存储文章信息
2.7 STRLEN:获取字符串值的字节长度
2.8 字符串值的索引
2.9 GETRANGE:获取字符串值指定索引范围上的内容
2.10 SETRANGE:对字符串值的指定索引范围进行设置
2.10.1 自动扩展被修改的字符串
2.10.2 在值里面填充空字节
2.10.3 其他信息
示例:给文章存储程序加上文章长度计数功能和文章预览功能
2.11 APPEND:追加新内容到值的末尾
2.11.1 处理不存在的键
2.11.2 其他信息
示例:存储日志
2.12 使用字符串键存储数字值
2.13 INCRBY、DECRBY:对整数值执行加法操作和减法操作
2.13.1 类型限制
2.13.2 处理不存在的键
2.13.3 其他信息
2.14 INCR、DECR:对整数值执行加1操作和减1操作
2.15 INCRBYFLOAT:对数字值执行浮点数加法操作
2.15.1 处理不存在的键
2.15.2 使用INCRBYFLOAT执行浮点数减法操作
2.15.3 INCRBYFLOAT与整数值
2.15.4 小数位长度限制
2.15.5 其他信息
示例:ID生成器
示例:计数器
示例:限速器
2.16 重点回顾
第3章 散列
3.1 散列简介
3.2 HSET:为字段设置值
3.2.1 使用新值覆盖旧值
3.2.2 其他信息
3.3 HSETNX:只在字段不存在的情况下为它设置值
3.4 HGET:获取字段的值
3.4.1 处理不存在的字段或者不存在的散列
3.4.2 其他信息
示例:实现短网址生成程序
3.5 HINCRBY:对字段存储的整数值执行加法或减法操作
3.5.1 执行减法操作
3.5.2 处理异常情况
3.5.3 其他信息
3.6 HINCRBYFLOAT:对字段存储的数字值执行浮点数加法或减法操作
3.6.1 增量和字段值的类型限制
3.6.2 执行减法操作
3.6.3 其他信息
示例:使用散列键重新实现计数器
3.7 HSTRLEN:获取字段值的字节长度
3.8 HEXISTS:检查字段是否存在
3.9 HDEL:删除字段
3.10 HLEN:获取散列包含的字段数量
示例:实现用户登录会话
3.11 HMSET:一次为多个字段设置值
3.11.1 使用新值覆盖旧值
3.11.2 其他信息
3.12 HMGET:一次获取多个字段的值
3.13 HKEYS、HVALS、HGETALL:获取所有字段、所有值、所有字段和值
3.13.1 字段在散列中的排列顺序
3.13.2 其他信息
示例:存储图数据
示例:使用散列键重新实现文章存储程序
3.14 散列与字符串
3.14.1 散列键的优点
3.14.2 字符串键的优点
3.14.3 字符串键和散列键的选择
3.15 重点回顾
第4章 列表
4.1 LPUSH:将元素推入列表左端
4.1.1 一次推入多个元素
4.1.2 其他信息
4.2 RPUSH:将元素推入列表右端
4.2.1 一次推入多个元素
4.2.2 其他信息
4.3 LPUSHX、RPUSHX:只对已存在的列表执行推入操作
4.3.1 每次只能推入单个元素
4.3.2 其他信息
4.4 LPOP:弹出列表最左端的元素
4.5 RPOP:弹出列表最右端的元素
4.6 RPOPLPUSH:将右端弹出的元素推入左端
4.6.1 源列表和目标列表相同
4.6.2 处理空列表
4.6.3 其他信息
示例:先进先出队列
4.7 LLEN:获取列表的长度
4.8 LINDEX:获取指定索引上的元素
4.8.1 处理超出范围的索引
4.8.2 其他信息
4.9 LRANGE:获取指定索引范围上的元素
4.9.1 获取列表包含的所有元素
4.9.2 处理超出范围的索引
4.9.3 其他信息
示例:分页
4.10 LSET:为指定索引设置新元素
4.10.1 处理超出范围的索引
4.10.2 其他信息
4.11 LINSERT:将元素插入列表
4.11.1 处理不存在的元素
4.11.2 其他信息
4.12 LTRIM:修剪列表
4.12.1 处理负数索引
4.12.2 其他信息
4.13 LREM:从列表中移除指定元素
示例:待办事项列表
4.14 BLPOP:阻塞式左端弹出操作
4.14.1 解除阻塞状态
4.14.2 处理空列表
4.14.3 列表名的作用
4.14.4 阻塞效果的范围
4.14.5 其他信息
4.15 BRPOP:阻塞式右端弹出操作
4.16 BRPOPLPUSH:阻塞式弹出并推入操作
4.16.1 处理源列表为空的情况
4.16.2 其他信息
示例:带有阻塞功能的消息队列
4.17 重点回顾
第5章 集合
5.1 SADD:将元素添加到集合
5.1.1 忽略已存在元素
5.1.2 其他信息
5.2 SREM:从集合中移除元素
5.2.1 忽略不存在的元素
5.2.2 其他信息
5.3 SMOVE:将元素从一个集合移动到另一个集合
5.3.1 忽略不存在的元素
5.3.2 覆盖已存在的元素
5.3.3 其他信息
5.4 SMEMBERS:获取集合包含的所有元素
5.4.1 元素的无序排列
5.4.2 其他信息
5.5 SCARD:获取集合包含的元素数量
5.6 SISMEMBER:检查给定元素是否存在于集合
示例:唯一计数器
示例:打标签
示例:点赞
示例:投票
示例:社交关系
5.7 SRANDMEMBER:随机获取集合中的元素
5.7.1 返回指定数量的元素
5.7.2 其他信息
5.8 SPOP:随机地从集合中移除指定数量的元素
5.8.1 SPOP与SRANDMEMBER的区别
5.8.2 其他信息
示例:抽奖
5.9 SINTER、SINTERSTORE:对集合执行交集计算
5.9.1 SINTERSTORE命令
5.9.2 其他信息
5.10 SUNION、SUNIONSTORE:对集合执行并集计算
5.10.1 SUNIONSTORE命令
5.10.2 其他信息
5.11 SDIFF、SDIFFSTORE:对集合执行差集计算
5.11.1 SDIFFSTORE命令
5.11.2 其他信息
示例:共同关注与推荐关注
示例:使用反向索引构建商品筛选器
5.12 重点回顾
第6章 有序集合
6.1 ZADD:添加或更新成员
6.1.1 更新已有成员的分值
6.1.2 指定要执行的操作
6.1.3 返回被修改成员的数量
6.1.4 其他信息
6.2 ZREM:移除指定的成员
6.2.1 忽略不存在的成员
6.2.2 其他信息
6.3 ZSCORE:获取成员的分值
6.4 ZINCRBY:对成员的分值执行自增或自减操作
6.4.1 执行自减操作
6.4.2 处理不存在的键或者不存在的成员
6.4.3 其他信息
6.5 ZCARD:获取有序集合的大小
6.6 ZRANK、ZREVRANK:获取成员在有序集合中的排名
6.6.1 处理不存在的键或者不存在的成员
6.6.2 其他信息
6.7 ZRANGE、ZREVRANGE:获取指定索引范围内的成员
6.7.1 使用负数索引
6.7.2 获取成员及其分值
6.7.3 处理不存在的有序集合
6.7.4 其他信息
示例:排行榜
6.8 ZRANGEBYSCORE、ZREVRANGEBYSCORE:获取指定分值范围内的成员
6.8.1 获取成员及其分值
6.8.2 限制命令返回的成员数量
6.8.3 使用开区间分值范围
6.8.4 使用无限值作为范围
6.8.5 其他信息
6.9 ZCOUNT:统计指定分值范围内的成员数量
6.9.1 分值范围的格式
6.9.2 其他信息
示例:时间线
6.10 ZREMRANGEBYRANK:移除指定排名范围内的成员
6.10.1 使用负数排名
6.10.2 其他信息
6.11 ZREMRANGEBYSCORE:移除指定分值范围内的成员
6.12 ZUNIONSTORE、ZINTERSTORE:有序集合的并集运算和交集运算
6.12.1 指定聚合函数
6.12.2 设置权重
6.12.3 使用集合作为输入
6.12.4 其他信息
示例:商品推荐
6.13 ZRANGEBYLEX、ZREVRANGEBYLEX:返回指定字典序范围内的成员
6.13.1 ZREVRANGEBYLEX
6.13.2 限制命令返回的成员数量
6.13.3 其他信息
6.14 ZLEXCOUNT:统计位于字典序指定范围内的成员数量
6.15 ZREMRANGEBYLEX:移除位于字典序指定范围内的成员
示例:自动补全
6.16 ZPOPMAX、ZPOPMIN:弹出分值最高和最低的成员
6.17 BZPOPMAX、BZPOPMIN:阻塞式最大/最小元素弹出操作
6.18 重点回顾
第7章 HyperLogLog
7.1 HyperLogLog简介
7.2 PFADD:对集合元素进行计数
7.3 PFCOUNT:返回集合的近似基数
7.3.1 返回并集的近似基数
7.3.2 其他信息
示例:优化唯一计数器
示例:检测重复信息
7.4 PFMERGE:计算多个HyperLogLog的并集
7.4.1 PFCOUNT与PFMERGE
7.4.2 其他信息
示例:实现每周/月度/年度计数器
7.5 重点回顾
第8章 位图
8.1 SETBIT:设置二进制位的值
8.1.1 位图的扩展
8.1.2 偏移量只能为正数
8.1.3 其他信息
8.2 GETBIT:获取二进制位的值
8.2.1 处理范围之外的偏移量
8.2.2 其他信息
8.3 BITCOUNT:统计被设置的二进制位数量
8.3.1 只统计位图指定字节范围内的二进制位
8.3.2 使用负数偏移量定义统计范围
8.3.3 其他信息
示例:用户行为记录器
8.4 BITPOS:查找第一个指定的二进制位值
8.4.1 只在指定的字节范围内进行查找
8.4.2 使用负数偏移量定义查找范围
8.4.3 边界情况处理
8.4.4 其他信息
8.5 BITOP:执行二进制位运算
8.5.1 处理不同长度的位图
8.5.2 其他信息
示例:0-1矩阵
8.6 BITFIELD:在位图中存储整数值
8.6.1 根据偏移量对区域进行设置
8.6.2 根据索引对区域进行设置
8.6.3 获取区域存储的值
8.6.4 执行加法操作或减法操作
8.6.5 处理溢出
8.6.6 使用位图存储整数的原因
8.6.7 其他信息
示例:紧凑计数器
8.7 使用字符串命令对位图进行操作
8.8 重点回顾
第9章 地理坐标
9.1 GEOADD:存储坐标
9.1.1 更新已有位置的坐标
9.1.2 其他信息
9.2 GEOPOS:获取指定位置的坐标
9.3 GEODIST:计算两个位置之间的直线距离
9.3.1 指定距离的单位
9.3.2 处理不存在的位置
9.3.3 其他信息
示例:具有基本功能的用户地理位置程序
9.4 GEORADIUS:查找指定坐标半径范围内的其他位置
9.4.1 返回被匹配位置与中心点之间的距离
9.4.2 返回被匹配位置的坐标
9.4.3 排序查找结果
9.4.4 限制命令获取的位置数量
9.4.5 同时使用多个可选项
9.4.6 其他信息
9.5 GEORADIUSBYMEMBER:查找指定位置半径范围内的其他位置
示例:查找附近用户
9.6 GEOHASH:获取指定位置的Geohash值
9.6.1 在进行范围查找时获取Geohash值
9.6.2 其他信息
9.7 使用有序集合命令操作GEO数据
9.8 重点回顾
第10章 流
10.1 XADD:追加新元素到流的末尾
10.1.1 流元素的ID
10.1.2 不完整的流ID
10.1.3 流元素ID的限制
10.1.4 自动生成元素ID
10.1.5 限制流的长度
10.1.6 其他信息
10.2 XTRIM:对流进行修剪
10.3 XDEL:移除指定元素
10.4 XLEN:获取流包含的元素数量
10.5 XRANGE、XREVRANGE:访问流中元素
10.5.1 获取ID指定的单个元素
10.5.2 获取指定ID范围内的多个元素
10.5.3 获取所有元素
10.5.4 获取指定数量的元素
10.5.5 对流进行迭代
10.5.6 以逆序访问流中元素
10.5.7 其他信息
10.6 XREAD:以阻塞或非阻塞方式获取流元素
10.6.1 从多个流中获取大于指定ID的元素
10.6.2 迭代流
10.6.3 阻塞
10.6.4 只获取新出现的元素
10.6.5 其他信息
示例:消息队列
10.7 消费者组
10.7.1 创建消费者组
10.7.2 读取消费者组
10.7.3 消费者
10.7.4 消息的状态转换
10.7.5 实际示例
10.8 XGROUP:管理消费者组
10.8.1 创建消费者组
10.8.2 修改消费者组的最后递送消息ID
10.8.3 删除消费者
10.8.4 删除消费者组
10.9 XREADGROUP:读取消费者组中的消息
10.9.1 读取未递送过的新消息
10.9.2 其他信息
10.10 XPENDING:显示待处理消息的相关信息
10.11 XACK:将消息标记为“已处理”
10.12 XCLAIM:转移消息的归属权
10.12.1 只返回被转移消息的ID
10.12.2 其他信息
10.13 XINFO:查看流和消费者组的相关信息
10.13.1 打印消费者信息
10.13.2 打印消费者组信息
10.13.3 打印流消息
10.13.4 其他信息
示例:为消息队列提供消费者组功能
10.14 重点回顾
第二部分 附加功能
第11章 数据库
11.1 SELECT:切换至指定的数据库
11.2 KEYS:获取所有与给定匹配符相匹配的键
11.2.1 全局匹配符
11.2.2 其他信息
11.3 SCAN:以渐进方式迭代数据库中的键
11.3.1 一次简单的迭代示例
11.3.2 SCAN命令的迭代保证
11.3.3 游标的使用
11.3.4 迭代与给定匹配符相匹配的键
11.3.5 指定返回键的期望数量
11.3.6 数据结构迭代命令
11.3.7 其他信息
示例:构建数据库迭代器
11.4 RANDOMKEY:随机返回一个键
11.5 SORT:对键的值进行排序
11.5.1 指定排序方式
11.5.2 对字符串值进行排序
11.5.3 只获取部分排序结果
11.5.4 获取外部键的值作为结果
11.5.5 使用外部键的值作为排序权重
11.5.6 保存排序结果
11.5.7 其他信息
11.6 EXISTS:检查给定键是否存在
11.6.1 只能接受单个键的EXISTS命令
11.6.2 其他信息
11.7 DBSIZE:获取数据库包含的键值对数量
11.8 TYPE:查看键的类型
示例:数据库取样程序
11.9 RENAME、RENAMENX:修改键名
11.9.1 覆盖已存在的键
11.9.2 只在新键名尚未被占用的情况下进行改名
11.9.3 其他信息
11.10 MOVE:将给定的键移动到另一个数据库
11.10.1 不覆盖同名键
11.10.2 其他信息
11.11 DEL:移除指定的键
11.12 UNLINK:以异步方式移除指定的键
11.13 FLUSHDB:清空当前数据库
11.13.1 async选项
11.13.2 其他信息
11.14 FLUSHALL:清空所有数据库
11.14.1 async选项
11.14.2 其他信息
11.15 SWAPDB:互换数据库
示例:使用SWAPDB命令实行在线替换数据库
11.16 重点回顾
第12章 自动过期
12.1 EXPIRE、PEXPIRE:设置生存时间
12.1.1 更新键的生存时间
12.1.2 其他信息
示例:带有自动移除特性的缓存程序
12.2 SET命令的EX选项和PX选项
12.2.1 组合命令的安全问题
12.2.2 其他信息
示例:带有自动释放特性的锁
12.3 EXPIREAT、PEXPIREAT:设置过期时间
12.3.1 EXPIREAT使用示例
12.3.2 PEXPIREAT使用示例
12.3.3 更新键的过期时间
12.3.4 自动过期特性的不足之处
12.3.5 其他信息
12.4 TTL、PTTL:获取键的剩余生存时间
12.4.1 没有剩余生存时间的键和不存在的键
12.4.2 TTL命令的精度问题
12.4.3 其他信息
示例:自动过期的登录会话
示例:自动淘汰冷门数据
12.5 重点回顾
第13章 流水线与事务
13.1 流水线
示例:使用流水线优化随机键创建程序
13.2 事务
13.2.1 MULTI:开启事务
13.2.2 EXEC:执行事务
13.2.3 DISCARD:放弃事务
13.2.4 事务的安全性
13.2.5 事务对服务器的影响
13.2.6 流水线与事务
示例:实现mlpop()函数
13.3 带有乐观锁的事务
13.3.1 WATCH:对键进行监视
13.3.2 UNWATCH:取消对键的监视
示例:带有身份验证功能的锁
示例:带有身份验证功能的计数信号量
13.4 重点回顾
第14章 Lua脚本
14.1 EVAL:执行脚本
14.1.1 使用脚本执行Redis命令
14.1.2 值转换
14.1.3 全局变量保护
14.1.4 在脚本中切换数据库
14.1.5 脚本的原子性
14.1.6 以命令行方式执行脚本
14.1.7 其他信息
示例:使用脚本重新实现带有身份验证功能的锁
示例:实现LPOPRPUSH命令
14.2 SCRIPT LOAD和EVALSHA:缓存并执行脚本
14.3 脚本管理
14.3.1 SCRIPT EXISTS:检查脚本是否已被缓存
14.3.2 SCRIPT FLUSH:移除所有已缓存脚本
14.3.3 SCRIPT KILL:强制停止正在运行的脚本
14.4 内置函数库
14.4.1 redis包
14.4.2 bit包
14.4.3 struct包
14.4.4 cjson包
14.4.5 cmsgpack包
14.5 脚本调试
14.5.1 一个简单的调试示例
14.5.2 调试命令
14.5.3 断点
14.5.4 动态断点
14.5.5 输出调试日志
14.5.6 执行指定的代码或命令
14.5.7 显示调用链
14.5.8 重载脚本
14.5.9 调试模式
14.5.10 终止调试会话
14.6 重点回顾
第15章 持久化
15.1 RDB持久化
15.1.1 SAVE:阻塞服务器并创建RDB文件
15.1.2 BGSAVE:以非阻塞方式创建RDB文件
15.1.3 通过配置选项自动创建RDB文件
15.1.4 SAVE命令和BGSAVE命令的选择
15.1.5 RDB文件结构
15.1.6 载入RDB文件
15.1.7 数据丢失
15.2 AOF持久化
15.2.1 打开AOF持久化功能
15.2.2 设置AOF文件的冲洗频率
15.2.3 AOF重写
15.2.4 AOF持久化的优缺点
15.3 RDB-AOF混合持久化
15.4 同时使用RDB持久化和AOF持久化
15.5 无持久化
15.6 SHUTDOWN:关闭服务器
15.6.1 通过可选项指示持久化操作
15.6.2 其他信息
15.7 重点回顾
第16章 发布与订阅
16.1 PUBLISH:向频道发送消息
16.2 SUBSCRIBE:订阅频道
16.2.1 接收频道消息
16.2.2 其他信息
16.3 UNSUBSCRIBE:退订频道
16.3.1 UNSUBSCRIBE命令在不同客户端中的应用
16.3.2 其他信息
16.4 PSUBSCRIBE:订阅模式
16.4.1 接收模式消息
16.4.2 其他信息
16.5 PUNSUBSCRIBE:退订模式
16.5.1 PUNSUBSCRIBE命令在不同客户端中的应用
16.5.2 其他信息
16.6 PUBSUB:查看发布与订阅的相关信息
16.6.1 查看被订阅的频道
16.6.2 查看频道的订阅者数量
16.6.3 查看被订阅模式的总数量
16.6.4 其他信息
示例:广播系统
16.7 重点回顾
第17章 模块
17.1 模块的管理
17.1.1 编译模块
17.1.2 载入模块
17.1.3 列出已载入的模块
17.1.4 卸载模块
17.2 ReJSON模块
17.2.1 编译和载入
17.2.2 使用示例
17.2.3 ReJSON路径
17.2.4 API简介
17.3 RediSQL模块
17.3.1 编译模块
17.3.2 使用示例
17.3.3 API简介
17.4 RediSearch模块
17.4.1 下载与编译
17.4.2 使用示例
17.4.3 API简介
17.5 重点回顾
第三部分 多机功能
第18章 复制
18.1 REPLICAOF:将服务器设置为从服务器
18.1.1 通过配置选项设置从服务器
18.1.2 取消复制
18.1.3 其他信息
18.2 ROLE:查看服务器的角色
18.2.1 主服务器执行ROLE命令
18.2.2 从服务器执行ROLE命令
18.2.3 其他信息
18.3 数据同步
18.3.1 完整同步
18.3.2 在线更新
18.3.3 部分同步
18.4 无须硬盘的复制
18.5 降低数据不一致情况出现的概率
18.6 可写的从服务器
示例:使用从服务器处理复杂计算操作
18.7 脚本复制
18.7.1 脚本传播模式
18.7.2 命令传播模式
18.7.3 选择性命令传播
18.7.4 模式的选择
18.8 重点回顾
第19章 Sentinel
19.1 启动Sentinel
19.2 Sentinel网络
19.3 Sentinel管理命令
19.3.1 SENTINEL masters:获取所有被监视主服务器的信息
19.3.2 SENTINEL master:获取指定被监视主服务器的信息
19.3.3 SENTINEL slaves:获取被监视主服务器的从服务器信息
19.3.4 SENTINEL sentinels:获取其他Sentinel的相关信息
19.3.5 SENTINEL get-master-addr-by-name:获取给定主服务器的IP地址和端口号
19.3.6 SENTINEL reset:重置主服务器状态
19.3.7 SENTINEL failover:强制执行故障转移
19.3.8 SENTINEL ckquorum:检查可用Sentinel的数量
19.3.9 SENTINEL flushconfig:强制写入配置文件
19.4 在线配置Sentinel
19.4.1 SENTINEL monitor:监视给定主服务器
19.4.2 SENTINEL remove:取消对给定主服务器的监视
19.4.3 SENTINEL set:修改Sentinel配置选项的值
19.4.4 使用在线配置命令的注意事项
示例:使用redis-py管理Sentinel
19.5 重点回顾
第20章 集群
20.1 基本特性
20.1.1 复制与高可用
20.1.2 分片与重分片
20.1.3 高性能
20.1.4 简单易用
20.2 搭建集群
20.2.1 快速搭建集群
20.2.2 手动搭建集群
示例:使用客户端连接集群
20.3 散列标签
20.4 打开/关闭从节点的读命令执行权限
20.4.1 READONLY:打开读命令执行权限
20.4.2 READWRITE:关闭读命令执行权限
20.4.3 其他信息
20.5 集群管理工具redis-cli
20.5.1 创建集群
20.5.2 查看集群信息
20.5.3 检查集群
20.5.4 修复槽错误
20.5.5 重分片
20.5.6 负载均衡
20.5.7 添加节点
20.5.8 移除节点
20.5.9 执行命令
20.5.10 设置超时时间
20.5.11 导入数据
20.6 集群管理命令
20.6.1 CLUSTER MEET:将节点添加至集群
20.6.2 CLUSTER NODES:查看集群内所有节点的相关信息
20.6.3 CLUSTER MYID:查看当前节点的运行ID
20.6.4 CLUSTER INFO:查看集群信息
20.6.5 CLUSTER FORGET:从集群中移除节点
20.6.6 CLUSTER REPLICATE:将节点变为从节点
20.6.7 CLUSTER REPLICAS:查看给定节点的所有从节点
20.6.8 CLUSTER FAILOVER:强制执行故障转移
20.6.9 CLUSTER RESET:重置节点
20.7 槽管理命令
20.7.1 CLUSTER SLOTS:查看槽与节点之间的关联信息
20.7.2 CLUSTER ADDSLOTS:把槽指派给节点
20.7.3 CLUSTER DELSLOTS:撤销对节点的槽指派
20.7.4 CLUSTER FLUSHSLOTS:撤销对节点的所有槽指派
20.7.5 CLUSTER KEYSLOT:查看键所属的槽
20.7.6 CLUSTER COUNTKEYSINSLOT:查看槽包含的键数量
20.7.7 CLUSTER GETKEYSINSLOT:获取槽包含的键
20.7.8 CLUSTER SETSLOT:改变槽的状态
20.8 重点回顾
附录A Redis安装方法
附录B redis-py安装方法
附录C Redis命令索引表
前言
  时光荏苒,距离我的第一本书《Redis设计与实现》出版已经过去了整整五年。在这五年间,Redis从一个不为人熟知、只有少量应用的崭新数据库,逐渐变成了内存数据库领域的事实标准。
  五年前,当人们提到Redis的时候,语气通常都充满了怀疑:“Redis我还是第一次听说,它好用吗?”“Redis比起Memcached有什么优势?”“用Redis存储数据安全吗,不会丢数据吧?”然而时至今日,经过大量的实践应用,Redis简洁高效、安全稳定的特性已经深入人心。无论是国内还是国外,从五百强公司到小型初创公司都在使用Redis,很多云服务提供商还以Redis为基础构建了相应的缓存服务、消息队列服务以及内存存储服务,当你使用这些服务时,实际上就是在使用Redis。
  Redis除了变得越来越受欢迎之外,另一个变化就是更新速度越来越快,功能也变得越来越多、越来越强大,比如说,Redis的数据结构数量已经从过去的五种增加到了九种,RDB-AOF混合持久化模式的引入使得用户不必再陷入“鱼和熊掌不可兼得”的难题中,而集群功能和模块机制的引入则让Redis在性能和功能上拥有了近乎无限的扩展能力。
  综上所述,可以说现在的Redis跟五年前比起来已经完全不一样了,而如何向读者讲述新版Redis方方面面的变化,则是每一本Redis书都必须回答的问题。本书以服务Redis初学者和使用者为目标,介绍了Redis日常使用中最常用到的部分,并以“命令描述+代码示例”的模式详细列举了各个Redis命令的用法和用例。我相信无论是刚开始学习Redis的读者,还是每天都要使用Redis的读者,在阅读本书的时候都会有所收获。
  虽然在写作本书的过程中已经思虑再三并且几易其稿,但书中难免还是会有错误或者遗漏的地方。如果读者朋友在阅读的过程中发现任何错误,或有任何疑问、建议,都可以通过邮箱huangz1990@gmail.com或者huangz.me中列出的联系方式来联系我。由于技术研究和写作工作较为繁重,本人可能无法每封邮件都予以回复,但只要有来信我就一定会阅读,决不食言。
  最后,感谢吴怡编辑在写作过程中给我的帮助和指导,感谢赵亮宇编辑为本书出版所做的努力,还要感谢我的家人和朋友,如果没有他们的关怀和支持,本书不可能顺利完成。
  黄健宏
  2019年8月于清远