展开全部

主编推荐语

由浅入深讲透Redis精髓,鞭辟入里探究Redis中数据类型的底层肌理。

内容简介

本书涵盖Redis数据类型的使用场景、各种类型的API的使用和底层数据结构源码解析、在DevOps环境中使用Redis的综合实践、Redis主从架构、RedisSentinel Redis、Redis集群环境搭建及其实现的高可用与高可扩原理等内容,提供深入浅出的实战案例,旨在帮助读者深入了解Redis数据结构领域和日常运维Redis所碰到的常见问题解决方案。

本书适合Redis新手、所有对Redis感兴趣的开发与运维人员阅读和参考,同时还可作为高等院校相关专业的参考教程。

目录

  • 版权信息
  • 前言
  • 第1章 大数据高并发离不开Redis
  • 1.1 NoSQL发展历程
  • 1.2 初识Redis
  • 1.3 Redis的魅力
  • 1.4 喜欢Redis的理由
  • 1.5 学习Redis的第一步
  • 1.5.1 在Windows环境下安装Redis
  • 1.5.2 在Linux环境下安装Redis
  • 1.5.3 在Docker环境下安装Redis
  • 1.5.4 Redis界面化管理工具
  • 1.6 redis.conf文件的详细说明
  • 1.7 Redis基本操作
  • 1.7.1 启动Redis服务器
  • 1.7.2 远程登录
  • 1.7.3 切换数据库
  • 1.7.4 删除键
  • 1.7.5 删除当前数据库的所有键
  • 第2章 Redis多种数据类型使用场景
  • 2.1 String数据类型的API和使用场景
  • 2.1.1 String数据类型的常规操作
  • 2.1.2 结合应用场景演练
  • 2.2 String也能做,为什么还要用Hash
  • 2.2.1 Hash数据类型的常规操作
  • 2.2.2 结合应用场景演练
  • 2.3 一种类型多种用法,原来List还可以这样做
  • 2.3.1 List模拟数据结构
  • 2.3.2 List常规操作
  • 2.3.3 利用列表迅速提升网站首页的并发量
  • 2.4 开启Set数据类型的正确操作姿势
  • 2.4.1 明星绯闻和微博瘫痪的那些事
  • 2.4.2 抽奖逻辑
  • 2.4.3 文章点赞或者投票
  • 2.4.4 共同好友统计
  • 2.5 微服务的限流操作和Zset的那些瓜葛
  • 2.5.1 利用Zset实现限流
  • 2.5.2 新闻排行榜场景实战
  • 2.5.3 直播打赏排名场景实战
  • 第3章 数据结构底层
  • 3.1 String数据结构底层解析
  • 3.1.1 String的三种编码
  • 3.1.2 SDS和内存重新分配
  • 3.1.3 embstr编码的内容追加
  • 3.1.4 内存空间释放
  • 3.1.5 SDS特征
  • 3.2 Hash数据结构底层解析
  • 3.2.1 ZipList数据结构
  • 3.2.2 HashTable数据结构
  • 3.2.3 ZipList和HashTable的抉择
  • 3.3 List数据结构底层解析
  • 3.3.1 单向链表
  • 3.3.2 双向链表
  • 3.3.3 Redis链表
  • 3.3.4 快速列表
  • 3.4 Set数据结构底层解析
  • 3.4.1 整数集合
  • 3.4.2 intset和HashTable的抉择
  • 3.5 Zset数据结构底层解析
  • 3.5.1 跳跃表数据结构解析
  • 3.5.2 ZipList和跳跃表的抉择
  • 第4章 数据持久化
  • 4.1 RDB方式持久化
  • 4.1.1 save触发方式
  • 4.1.2 bgsave触发方式
  • 4.1.3 后台触发
  • 4.1.4 RDB备份的应用场景
  • 4.2 AOF方式持久化
  • 4.2.1 AOF持久化流程
  • 4.2.2 相关参数配置
  • 4.2.3 重写操作
  • 4.3 AOF和RDB的数据恢复顺序
  • 4.4 RDB和AOF持久化的优缺点
  • 4.4.1 RDB持久化的优缺点
  • 4.4.2 AOF持久化的优缺点
  • 4.5 AOF+RDB混合模式配置
  • 第5章 Redis的事务和Lua脚本操作
  • 5.1 事务概述
  • 5.2 事务使用
  • 5.2.1 事务的三个阶段
  • 5.2.2 事务范例
  • 5.3 事务性质
  • 5.3.1 原子性
  • 5.3.2 一致性
  • 5.3.3 隔离性
  • 5.3.4 持久性
  • 5.3.5 安全性
  • 5.4 Lua脚本
  • 5.4.1 eval
  • 5.4.2 Lua和Redis数据类型的转换
  • 5.4.3 脚本的原子性
  • 5.4.4 错误处理
  • 5.4.5 带宽和evalsha
  • 5.4.6 脚本缓存
  • 5.4.7 script命令和纯函数脚本
  • 5.4.8 全局变量保护
  • 5.4.9 内部脚本
  • 5.4.10 沙箱和最大执行时间
  • 5.4.11 Redis脚本命令
  • 5.4.12 Lua脚本的好处
  • 5.5 Lua实战
  • 第6章 pub/sub和Stream
  • 6.1 频道的订阅与消息发送
  • 6.2 发布与订阅的使用
  • 6.3 发布与订阅的原理
  • 6.4 订阅模式
  • 6.5 pub和sub使用范例
  • 6.6 与其他发布和订阅比较
  • 6.7 Stream概述
  • 6.8 Stream实例
  • 6.8.1 同组消费模式
  • 6.8.2 不同组消费模式
  • 6.8.3 消息确认
  • 第7章 主从复制
  • 7.1 主从复制概述
  • 7.2 主从复制工作原理
  • 7.2.1 连接建立阶段
  • 7.2.2 数据同步阶段
  • 7.2.3 命令传播阶段
  • 7.2.4 身份验证
  • 7.2.5 延迟与不一致
  • 7.3 Redis复制的注意事项
  • 7.3.1 复制的注意事项
  • 7.3.2 复制的安全性
  • 7.3.3 无须磁盘参与的复制
  • 7.3.4 只读性质的从节点
  • 7.3.5 主从多种模式下的问题
  • 7.4 搭建主从节点的实例
  • 7.4.1 以命令行方式搭建主从节点
  • 7.4.2 以配置文件方式搭建主从节点
  • 7.4.3 以身份验证模式搭建主从架构
  • 7.5 主从架构的“坑”和优化技巧
  • 7.5.1 复制超时问题
  • 7.5.2 主从架构数据应用问题
  • 7.5.3 主从复制中断问题
  • 7.5.4 主从复制应用中的优化技巧
  • 7.5.5 主从架构重要配置总结
  • 7.6 主从架构的作用
  • 第8章 哨兵模式
  • 8.1 哨兵架构概述
  • 8.2 哨兵架构的搭建
  • 8.2.1 运行Sentinel
  • 8.2.2 Sentinel配置
  • 8.2.3 Windows 10搭建Redis 5版本哨兵架构
  • 8.2.4 Linux系统哨兵架构的搭建和验证
  • 8.3 Sentinel API
  • 8.3.1 Sentinel命令
  • 8.3.2 其他相关配置和说明
  • 8.4 哨兵细节原理分析
  • 8.4.1 sdown与odown
  • 8.4.2 哨兵集群的自动发现机制
  • 8.4.3 故障转移的重新配置
  • 8.4.4 从节点选举和优先级
  • 8.4.5 算法和内部结构
  • 8.4.6 配置epoch
  • 8.4.7 配置传播
  • 8.4.8 网络分区下的一致性
  • 8.5 客户端访问哨兵架构的系统
  • 8.5.1 C#连接Redis哨兵架构的系统
  • 8.5.2 Java连接Redis哨兵架构的系统
  • 8.5.3 客户端原理
  • 第9章 Redis集群
  • 9.1 集群概述
  • 9.2 集群作用
  • 9.3 集群设计注意事项
  • 9.4 Redis集群的搭建
  • 9.4.1 在Windows 10下搭建Redis 5集群
  • 9.4.2 在Linux下搭建Redis 6集群
  • 9.5 数据分区策略
  • 9.6 Redis一致性保证
  • 9.7 节点通信机制
  • 9.7.1 通信端口
  • 9.7.2 Gossip协议
  • 9.8 集群的其他细节
  • 9.8.1 Redis集群中的主从复制
  • 9.8.2 Redis集群客户端和服务器端的协议
  • 9.8.3 故障检测
  • 9.9 从节点的选举和提升
  • 9.9.1 主节点回复从节点的投票请求
  • 9.9.2 从节点选举的竞争情况
  • 9.9.3 update消息
  • 9.9.4 备份迁移
  • 9.9.5 备份迁移算法
  • 9.9.6 安全写入
  • 9.9.7 键分布模型
  • 9.9.8 键哈希标签
  • 9.9.9 集群节点信息和源码
  • 9.9.10 集群相关命令
  • 9.10 集群重新分片
  • 9.11 扩容和缩容
  • 9.11.1 扩容
  • 9.11.2 缩容
  • 9.12 故障转移和高可用
  • 9.13 集群使用时的注意事项
  • 第10章 Redis 6新特征
  • 10.1 为什么Redis 6是多线程
  • 10.2 开启多线程
  • 10.3 Redis服务基准测试
  • 10.4 ACL安全策略
  • 10.4.1 ACL规则
  • 10.4.2 使用外部ACL文件
  • 10.4.3 使用ACL命令配置ACL
  • 10.4.4 ACL实例
  • 第11章 布隆过滤器
  • 11.1 布隆过滤器概述
  • 11.2 环境安装
  • 11.2.1 模块化安装
  • 11.2.2 Docker安装
  • 11.3 布隆过滤器的原理
  • 11.4 应用场景
  • 第12章 Redis内存相关策略和内存碎片
  • 12.1 maxmemory配置
  • 12.2 数据淘汰策略
  • 12.3 LRU算法
  • 12.4 LFU算法
  • 12.5 数据过期删除策略
  • 12.6 主从架构和数据持久化对数据的过期处理
  • 12.7 内存碎片
  • 12.7.1 Redis内存碎片的形成
  • 12.7.2 内存使用情况
  • 12.7.3 清理内存碎片
  • 第13章 分布式锁
  • 13.1 为什么需要分布式锁
  • 13.2 非阻塞锁的实现和原理
  • 13.3 阻塞锁的实现和原理
  • 13.4 Redlock原理
  • 13.4.1 什么是Redlock
  • 13.4.2 单节点上实现Redlock
  • 13.4.3 Redlock算法
  • 第14章 高频面试题
  • 14.1 缓存穿透
  • 14.2 缓存击穿
  • 14.3 缓存雪崩
  • 附录 Redis API详情
  • A.1 与键有关的命令
  • A.1.1 返回键所存储值的类型
  • A.1.2 以毫秒为时间单位来设置键的过期时间
  • A.1.3 以毫秒为时间单位来设置键过期时间的时间戳
  • A.1.4 以秒为时间单位来设置键的过期时间
  • A.1.5 以秒为时间单位来设置键的过期时间的时间戳
  • A.1.6 为键重命名
  • A.1.7 删除键的过期时间
  • A.1.8 将当前数据库的键移到给定的数据库中
  • A.1.9 从当前数据库中随机返回一个键
  • A.1.10 返回指定键的序列化值
  • A.1.11 以秒为单位返回指定键的剩余生存时间
  • A.1.12 以毫秒为单位返回指定键的剩余过期时间
  • A.1.13 删除一个已存在的键
  • A.1.14 把Redis中已有键重命名为该Redis中目前没有的新键名
  • A.1.15 检查指定键是否存在
  • A.1.16 查找所有符合指定模式的键
  • A.2 字符串
  • A.2.1 设置指定键的值
  • A.2.2 获取指定键的值
  • A.2.3 获取存储在指定键中字符串的子字符串
  • A.2.4 设置指定键的值并返回键原来的值
  • A.2.5 设置或清除指定偏移量上的位
  • A.2.6 获取指定偏移量上的位
  • A.2.7 同时设置一个或多个键值对
  • A.2.8 返回所有指定键的值
  • A.2.9 为指定的键设置值和过期时间
  • A.2.10 指定的键不存在时为键设置指定的值
  • A.2.11 指定字符串覆盖指定键存储的字符串值
  • A.2.12 获取指定键存储的字符串值的长度
  • A.2.13 同时设置所有指定键都不存在的键值对
  • A.2.14 设置键的有效时间
  • A.2.15 将键中存储的数字值增一
  • A.2.16 将键的值加上指定的增量值
  • A.2.17 将键存储的值加上指定的浮点增量值
  • A.2.18 将键中存储的数字值减一
  • A.2.19 将键的值减去指定的减量值
  • A.2.20 在键的值末尾追加一个值
  • A.3 哈希
  • A.3.1 将哈希表中指定键的字段赋值
  • A.3.2 获取哈希表中的所有字段名
  • A.3.3 获取哈希表中指定字段的值
  • A.3.4 获取在哈希表中指定键的所有字段和值
  • A.3.5 删除一个或多个哈希表字段
  • A.3.6 查看哈希表中键的指定的字段是否存在
  • A.3.7 获取哈希表中所有的字段
  • A.3.8 获取哈希表中字段的数量
  • A.3.9 为哈希表中键的字段整数值加上增量
  • A.3.10 为哈希表中键的字段值加上指定的浮点数增量
  • A.3.11 同时将多个字段值设置到哈希表中
  • A.3.12 往哈希表中不存在的字段赋值
  • A.3.13 获取哈希表中的所有值
  • A.3.14 迭代哈希表中的键值对
  • A.4 列表
  • A.4.1 将一个或多个值插入列表头部
  • A.4.2 将一个或多个值插入指定列表的头部
  • A.4.3 从列表中弹出第一个元素
  • A.4.4 从列表中弹出最后一个元素
  • A.4.5 从列表中弹出一个值并复制到另一个列表中
  • A.4.6 通过索引获取列表中的元素
  • A.4.7 在列表的指定元素之前或者之后插入元素
  • A.4.8 获取列表长度
  • A.4.9 从列表中弹出第一个元素
  • A.4.10 从列表中弹出最后一个元素
  • A.4.11 获取列表指定范围内的元素
  • A.4.12 删除列表元素
  • A.4.13 通过索引设置列表元素的值
  • A.4.14 从列表中弹出最后一个元素并添加到另一个列表中
  • A.4.15 截取一个列表保留指定区间的元素
  • A.4.16 在列表中添加一个或多个值
  • A.4.17 为已存在的列表添加值
  • A.5 无序集合
  • A.5.1 向集合添加一个或多个元素
  • A.5.2 获取集合的元素的数量
  • A.5.3 返回所有指定集合的差集
  • A.5.4 将集合之间的差集存储在指定的集合中
  • A.5.5 返回所有指定集合的交集
  • A.5.6 将指定集合之间的交集存储在指定的集合中
  • A.5.7 判断指定元素是否为集合的元素
  • A.5.8 返回集合中的所有元素
  • A.5.9 把指定元素从原集合移到目标集合
  • A.5.10 从集合中弹出一个随机元素
  • A.5.11 返回集合中的一个或多个随机数
  • A.5.12 删除集合中的一个或多个元素
  • A.5.13 返回所有指定集合的并集
  • A.5.14 将指定集合的并集存储在指定的集合中
  • A.5.15 迭代集合中的元素
  • A.6 有序集合
  • A.6.1 添加一个或多个元素及其分数值
  • A.6.2 获取有序集合中元素的数量
  • A.6.3 计算在有序集合中指定分数值区间的元素数量
  • A.6.4 在有序集合中对指定元素的分数值加上增量
  • A.6.5 计算指定的一个或多个有序集合的交集
  • A.6.6 在有序集合中计算指定字典区间内的元素数量
  • A.6.7 通过索引区间返回有序集合中指定区间内的元素
  • A.6.8 通过字典区间返回有序集合的元素
  • A.6.9 通过分数值返回有序集合指定区间内的元素
  • A.6.10 返回有序集合中指定元素的下标
  • A.6.11 删除有序集合中的一个或多个元素
  • A.6.12 删除有序集合中指定字典区间的所有元素
  • A.6.13 删除有序集合中指定排名区间的所有元素
  • A.6.14 移除有序集合中给定的分数区间的所有元素
  • A.6.15 返回有序集合中指定区间内的元素
  • A.6.16 返回有序集合中指定分数区间内的元素
  • A.6.17 返回有序集合中指定元素的排名
  • A.6.18 返回有序集合中指定元素的分数值
  • A.6.19 计算指定的一个或多个有序集合的并集
  • A.6.20 迭代有序集合中的元素
  • A.7 redis hyperloglog
  • A.7.1 把指定元素添加到hyperloglog中
  • A.7.2 返回指定hyperloglog的基数估值
  • A.7.3 将多个hyperloglog合并为一个hyperloglog
  • A.8 redis geo
  • A.8.1 存储指定的地理空间位置
  • A.8.2 返回两个指定位置之间的距离
  • A.8.3 返回指定名称的位置(经度和纬度)
  • A.8.4 与指定地理位置附近相匹配的地点
展开全部

评分及书评

评分不足
1个评分
  • 用户头像
    给这本书评了
    5.0

    大数据时代的到来,使得传统数据库在处理业务应用时遇到性能上的瓶颈,用户体验很不乐观。如今海量数据的 3VVolume,数量;Velocity,速度;Variety,多样)和 3 高(高并发、高性能、高可扩展)给传统数据库曾经非常成功的 “一种架构支持多类应用” 的模式带来了巨大的挑战。

      转发
      评论

    出版方

    机械工业出版社有限公司

    机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。