为你推荐
前言
第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 与指定地理位置附近相匹配的地点
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜