Redis的技术全景
Redis一个开源的基于键值对(Key-Value)NoSQL数据库。使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀,并提供多种语言的API。
我们要首先理解一点,我们把Redis称为KV数据库,键值对数据库,那就可以把Redis内部的存储视为存在着一个巨大的Map,对Map的操作无非就是get和put,然后通过key操作这个key所对应的value,而这个value的类型可以多种多样,也就是Redis为我们提供的那些数据结构,比如字符串(String)、哈希(Hash)等等。
Redis 的知识体系都包括什么呢?简单来说,就是“两大维度,三大主线”
两大维度
两大维度:应用维度、底层原理维度
我们知道,缓存和集群是Redis 的两大广泛的应用场景。同时Redis 丰富的数据模型,就导致它有很多零碎的应用场景,很多很杂。而且,还有一些问题隐藏得比较深,只有特定的业务场景下(比如亿级访问压力场景)才会出现,所以同时还必须精通Redis的数据结构。
Redis应用场景
1.缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
一般MySQL数据库写的并发是600/s,读的2000/s,对于大型互联网项目的百万并发,根本扛不住,Redis的官方显示Redis能够单台达到10W+/s的并发。
2.排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
3.计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
4.社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。这个是Redis的作者参考了Kafka做的拓展。
三大主线
三大主线:高性能、高可靠和高可扩展
高性能:包括线程模型、数据结构、持久化、网络框架;
高可靠:包括主从复制、哨兵机制;
高可扩:包括数据分片、负载均衡。
因为Redis的应用场景非常多,不同的公司有不同的玩法,但如何不掌握三高这条主线的话,你会遇到以下问题:
1、数据结构的复杂度、跨 CPU 核的访问会导致CPU飙升的问题
2、主从同步和 AOF 的内存竞争,这些会导致内存问题
3、在 SSD 上做快照的性能抖动,这些会导致存储持久化的问题
4、多实例时的异常网络丢包的问题
现对地理位置信息的删除。