序 言Preface
近几年,随着移动互联网的飞速发展,我们享受着整个社会的技术进步带来的便利,但同时也给从业者带来了如何保证项目的高并发、低延时的技术挑战,相应的互联网技术也随之发生了重大变革,NoSQL技术得到了蓬勃的发展。Redis以其出色的性能、丰富的功能、良好的稳定性、分布式架构的支持等特性,得到了业界广泛的关注和应用。毫不夸张地说,Redis已经成为IT互联网大型系统的标配,熟练掌握Redis成为开发、运维人员的必备技能。
本书是作者近三年Redis开发运维的经验结晶和技术沉淀,书中对于Redis的相关知识做了系统全面的介绍,因此,可以帮助Redis初学者快速入门和提高。同时,纵观全书,作者的视角未局限于Redis本身,还融入了大量高并发系统的设计、开发及运维调优经验,而是深入浅出的剖析底层实现,让读者不仅知其然,也知其所以然。因此,对于有一定Redis使用经验的从业者,本书也有学习参考价值。
两位作者是搜狐视频的技术架构专家,始终保持对技术的热忱和严谨,对搜狐视频大型分布式系统的技术选型、架构设计、开发运维提供了坚实的保障。在承担搜狐视频个性化推荐系统等多个核心系统的设计开发运维工作期间,两位作者对高并发、低延时的大型分布式系统积累了丰富的经验,其中就包含了大量Redis的实践经验。作为公司开发运维的开拓者,从项目中抽离出Redis集群的自动运维系统CacheCloud,在公司内部多个业务线推广使用,积累了丰富的Redis大规模集群的运维优化经验。所在团队于2016年3月将该项目在GitHub上开源,由于其具有快速部署、全面监控、一键运维等特性,一开源即受到广大Redis开发运维人员的欢迎和认可。
以我对两位作者的优秀技术素养的熟知,及对他们负责项目的了解,我相信这本书会给大家带来耳目一新的感觉。感谢两位作者对开源项目CacheCloud的贡献,更难能可贵的是他们将其开发运维的宝贵经验汇聚成册,给我们带来了这样一本好书。
马义
搜狐视频产品技术中心总经理、56网总经理
2016年11月
前 言Introduction
Redis作为基于键值对的NoSQL数据库,具有高性能、丰富的数据结构、持久化、高可用、分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用。掌握Redis已经逐步成为开发和运维人员的必备技能之一。
本书关注了Redis开发运维的方方面面,尤其对于开发运维中如何提高效率、减少可能遇到的问题进行详细分析,但本书不单单介绍怎么解决这些问题,而是通过对Redis重要原理的解析,帮助开发运维人员学会找到问题的方法,以及理解背后的原理,从而让开发运维人员不仅知其然,而且知其所以然。
本书涵盖内容
第1章 初识Redis,带领读者进入Redis的世界,了解它的前世今生、众多特性、应用场景、安装配置、简单使用,最后对Redis发展过程中的重要版本进行说明,可以让读者对Redis有一个全面的认识。
第2章 API的理解和使用,全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景,并且每个小节都会给出在Redis开发过程可能要注意的坑和技巧。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,读者可以在合适的应用场景选择合适的数据结构和命令进行开发,有效提高程序效率,降低可能产生的问题和隐患。
第3章 小功能大用处,除了5种数据结构外,Redis还提供了诸如慢查询、Redis Shell、Pipeline、Lua脚本、Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,在这些功能的帮助下,Redis的应用场景更加丰富。
第4章 客户端,本章重点关注Redis客户端的开发,介绍了Redis的客户端通信协
议、详细讲解了Java客户端Jedis的使用技巧,同时通过从原理角度剖析在开发运维中,客户端的监控和管理技巧,最后给出客户端开发中常见问题以及案例讲解。
第5章 持久化,Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章首先介绍RDB和AOF两种持久化配置和运行流程,其次对常见的持久化问题进行定位和优化,最后结合Redis常见的单机多实例部署场景进行优化。
第6章 复制,在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,用于故障恢复和负载均衡等需求,Redis也是如此。它为我们提供了复制(replication)功能,实现了多个相同数据的Redis副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用。
第7章 Redis的噩梦:阻塞,Redis是典型的单线程架构,所有的读写操作都在一条主线程中完成的。当Redis用于高并发场景时这条线程就变成了它的生命线。如果出现阻塞哪怕是很短时间对于我们的应用来说都是噩梦。导致阻塞问题的场景大致分为内在原因和外在原因,本章将进行详细分析。
第8章 理解内存,Redis所有的数据存在于内存中,如何高效利用Redis内存变得非常重要。高效利用Redis内存首先需要理解Redis内存消耗在哪里,如何管理内存,最后再深入到如何优化内存。掌握这些知识后相信读者能够实现用更少的内存存储更多的数据从而降低成本。
第9章 哨兵,Redis从2.8版本开始正式提供了Redis Sentinel,它有效解决了主从复制模式下故障转移的若干问题,为Redis提供了高可用功能。本章将一步步解析Redis Sentinel的相关概念、安装部署、配置、命令使用、原理解析,最后分析了Redis Sentinel运维中的一些问题。
第10章 集群,是本书的重头戏,Redis Cluster是Redis 3提供的Redis分布式解决方案,有效解决了Redis分布式方面的需求,理解应用好Redis Cluster将极大的解放我们对分布式Redis的需求,同时它也是学习分布式存储的绝佳案例。本章将针对RedisCluster的数据分布,搭建集群,节点通信,请求路由,集群伸缩,故障转移等方面进行分析说明。
第11章 缓存设计,缓存能够有效加速应用的读写速度,以及降低后端负载,对于开发人员进行日常应用的开发至关重要,但是将缓存加入应用架构后也会带来一些问题,本章将介绍缓存使用和设计中遇到的问题,具体包括:缓存的收益和成本、缓存更新策略、缓存粒度控制、穿透问题优化、无底洞问题优化、雪崩问题优化、热点key优化。
第12章 开发运维的“陷阱”,介绍Redis开发运维中的一些棘手问题,具体包括:Linux配置优化、flush误操作数据恢复、如何让Redis变得安全、bigkey问题、热点key问题。
第13章 Redis监控运维云平台CacheCloud,介绍笔者所在团队开源的Redis运维工具CacheCloud,它有效解决了Redis监控和运维中的一些问题,本章将按照快速部署、机器部署、接入应用、用户功能、运维功能多个维度全面的介绍CacheCloud,相信在它的帮助下,读者可以更好的监控和运维好Redis。
第14章 Redis配置统计字典,会对Redis的系统状态信息以及全部配置做一个全面的梳理,希望本章能够成为Redis配置统计字典,协助大家分析和解决日常开发和运维中遇到的问题。
目标读者
本书深入浅出地介绍了Redis相关知识,因此可以作为Redis新手的入门教程,同时本书凝聚了两位笔者在Redis开发运维的多年经验,对于需要进一步提高Redis开发运维能力的读者也非常适合。读者可以参考下图,结合自身对于开发运维的需求进行阅读,但笔者依然建议读者对每一章都进行阅读。
读者反馈和勘误
由于笔者能力有限,书中难免会存在错误和疏漏,读者有任何意见和建议可以通过发送邮件、网站留言,或者直接在QQ群留言,我们会在第一时间进行反馈。
邮箱:redis_devops_book@163.com
网站:https://cachecloud.github.io/,该网站持续更新Redis开发运维的相关知识和经验。
QQ群:534429768
著者
2016年9月
致 谢Acknowledgements
感谢业内众多Redis专家对于本书的审阅,他们分别是黄健宏、杨卫华(Tim Yang)、刘奇、卓汝林、黄鹏程、张海雷、诸超、陈宗志、李成武,他们为本书提出很宝贵的意见和建议。
感谢我们公司的领导和同事,没有他们的帮助和支持,本书无法按时完成,他们是马义、田文宝、闵博、陈实、张啸丰、赵欣莅、张文、董刚锋 、赵路、高永飞、曾旭、孙孟萌、田文龙、庞云龙、李明月、戴育东、单颖博、唐虎、贺永明、郭岭、谷海波。
我们要感谢机械工业出版社的吴怡编辑对我们写作的支持、鼓励和指导,她一丝不苟的工作态度让人钦佩。
最后,我们要感谢家人和朋友,感谢在写书期间他们的支持和鼓励,从而让本书顺利完成。
撒哈拉沙漠咸鱼 2017-02-26
redis cluster介绍的非常详细,从原理到实战经验全部都有。