什么是Redis
Redis一个开源的基于键值对(Key-Value)NoSQL数据库。使用ANSI C标准,利用C语言编写、支持网络、基于内存但支持持久化。性能优秀,并提供多种语言的API。
ANSI C标准是什么
ANSI C 标准是 C 语言的标准化规范,它由美国国家标准学会(ANSI)于1989年发布。这个标准定义了 C
语言的语法、语义和库函数,并规定了编译器应该如何实现 C 语言的特性和行为。ANSI C 标准也被称为 C89 或者 C90,它是 C
语言的第一个正式标准,为后来的 C 语言标准(如 C99 和 C11)奠定了基础。由于 ANSI C 标准的普及和广泛支持,C
语言成为了一种具有跨平台性、可移植性和可靠性的通用编程语言。
C语言的跨平台如何实现
C 语言的跨平台性是通过编译器和标准库的实现来实现的。
编译器:C 语言的编译器可以在不同的操作系统和架构上运行,从而使得同一份 C 语言源代码可以在不同的平台上编译和执行。通常,编译器会将 C语言源代码编译成目标代码或者可执行文件,这些目标代码或者可执行文件可以在特定的操作系统和架构上运行。
标准库:C 语言的标准库是一个跨平台的库,它提供了一组通用的函数和数据类型,用于处理输入输出、字符串操作、数学计算、内存管理等常见任务。由于C 语言的标准库是跨平台的,因此在不同的操作系统和架构上编译的 C 语言程序可以使用相同的标准库函数进行编程,从而实现跨平台的兼容性。
此外,C 语言的跨平台性还得益于它的简洁性和可移植性。C 语言的语法和语义非常简单,不依赖于任何特定的操作系统或架构,这使得 C语言的源代码可以很容易地在不同的平台上阅读和理解。同时,C语言还提供了一些跨平台的编程技巧和工具,如条件编译、宏定义、预处理器等,这些技巧可以帮助程序员在不同的平台上实现相同的功能。
C语言是跨平台的语言吗
C 语言本身是一种编译型语言,它的代码可以编译成本地机器指令并在特定的硬件架构和操作系统上运行。因此,C语言的跨平台性受到硬件架构和操作系统的限制,即同一份 C 语言源代码不能直接在不同的硬件架构或操作系统上运行。 但是,C语言的可移植性很高,因为它提供了一系列的标准库函数和操作符,这些函数和操作符的行为在不同的编译器和平台上是相同的。因此,程序员可以通过编写可移植的
C 语言源代码,使用跨平台的编译器和标准库,在多个平台上编译和运行相同的程序。这种方式可以使得 C语言的程序在不同的平台上实现相同的功能和效果,从而实现 C 语言的跨平台兼容性。但是需要注意,即使是可移植的 C 语言代码,在不同的平台上仍需要进行适当的修改和调试,以确保代码在不同的平台上的正确性和稳定性。
Redis的两大维度、三大主线
两大维度
应用维度
底层原理维度
Redis的应用场景
1.缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
一般MySQL数据库写的并发是600/s,读的2000/s,对于大型互联网项目的百万并发,根本扛不住,Redis的官方显示Redis能够单台达到10W+/s的并发。
2.排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
3.计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
4.社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。这个是Redis的作者参考了Kafka做的拓展。
三大主线
高性能:线程模型、数据结构、AOF(持久化)、epoll(网络框架)
高可靠:主从复制、哨兵机制、RDB
高扩展:负载均衡、数据分片
Redis应用场景的常见问题
1.数据结构的复杂度,跨核CPU访问,导致CPU内存飙升问题
2.主从同步和AOF的内存竞争,从而导致的内存问题
3.在SSD上做快照的新能抖动,导致存储持久化问题
4.多实例的网络异常丢包问题
Redis是否可以取代关系型数据库
笔者认为Redis不能取代关系型数据库
Redis数据持久化是异步进行的、不完全遵循关系型数据库的基本规则
关系型数据库的事务隔离级别不支持等