一线互联网公司Redis使用精髓,你必须要掌握这4点!

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 四个大点,搞懂 Redis 到底快在哪里?

先来看一下这些Redis面试题你会几道?

1、什么是 Redis?简述它的优缺点?
2、Redis 与 memcached 相比有哪些优势?
3、Redis 支持哪几种数据类型?
4、Redis 主要消耗什么物理资源?
5、Redis 有哪几种数据淘汰策略?
6、Redis 官方为什么不提供 Windows 版本?
7、一个字符串类型的值能存储最大容量是多少?
8、为什么 Redis 需要把所有数据放到内存中?
9、Redis 集群方案应该怎么做?都有哪些方案?
10、Redis 集群方案什么情况下会导致整个集群不可用?
11、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?
12、Redis 有哪些适合的场景?
13、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
14、Redis 和 Redisson 有什么关系?
15、Jedis 与 Redisson 对比有什么优缺点?
16、说说 Redis 哈希槽的概念?
17、Redis 集群的主从复制模型是怎样的?
18、Redis 集群会有写操作丢失吗?为什么?
19、Redis 集群如何选择数据库?
20、Redis 如何做内存优化?
image

了解Redis

Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数据结构和算法组成。Redis还提供了键过期,发布订阅,事务,Lua脚本,哨兵,Cluster等功能。Redis执行命令的速度非常快,根据官方给的性能可以达到10w+qps。那么本文主要介绍到底Redis快在哪里,主要有以下几点:

开发语言

现在我们都用高级语言来编程,比如Java、python等。也许你会觉得C语言很古老,但是它真的很有用,毕竟unix系统就是用C实现的,所以C语言是非常贴近操作系统的语言。Redis就是用C语言开发的,所以执行会比较快。
另外多说一句,大学生们好好学C,会让你更好的理解计算机操作系统。别觉得学了高级语言就可以不用关注底层,欠的债总归要还的。此处推荐一本比较难啃的书《深入理解计算系统》。

纯内存访问

Redis将所有数据放在内存中,非数据同步正常工作中,是不需要从磁盘读取数据的,0次IO。内存响应时间大约为100纳秒,这是Redis速度快的重要基础。先看看CPU的速度:
image

拿我的电脑来说,主频是3.1G,也就是说每秒可以执行3.1*10^9个指令。所以说CPU看世界是非常非常慢的,内存比它慢百倍,磁盘比他慢百万倍,你说快不快?
借了一张《深入理解计算机系统》的图,展示了一个典型的存储器层次结构,在L0层,CPU可以在一个时钟周期访问到,基于SRAM的高速缓存春续期,可以在几个CPU时钟周期访问到,然后是基于DRAM的主存,可以在几十到几百个时钟周期访问到他们。
image

单线程

第一,单线程简化算法的实现,并发的数据结构实现不但困难且测试也麻烦。第二,单线程避免了线程切换以及加锁释放锁带来的消耗,对于服务端开发来说,锁和线程切换通常是性能杀手。当然了,单线程也会有它的缺点,也是Redis的噩梦:阻塞。如果执行一个命令过长,那么会造成其他命令的阻塞,对于Redis是十分致命的,所以Redis是面向快速执行场景的数据库。
除了Redis之外,Node.js也是单线程,Nginx也是单线程,但他们都是服务器高性能的典范。

非阻塞多路I/O复用机制

在这之前先要说一下传统的阻塞I/O是如何工作的:当使用read或者write对某一文件描述符(File Descriptor FD)进行读写的时候,如果数据没有收到,那么该线程会被挂起,直到收到数据。阻塞模型虽然易于理解,但是在需要处理多个客户端任务的时候,不会使用阻塞模型。
image

I/O多路复用实际上是指多个连接的管理可以在同一进程。多路是指网络连接,复用只是同一个线程。在网络服务中,I/O多路复用起的作用是一次性把多个连接的事件通知业务代码处理,处理的方式由业务代码来决定。在I/O多路复用模型中,最重要的函数调用就是I/O 多路复用函数,该方法能同时监控多个文件描述符(fd)的读写情况,当其中的某些fd可读/写时,该方法就会返回可读/写的fd个数。
image

Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll的read、write、close等都转换成事件,不在网络I/O上浪费过多的时间。实现对多个FD读写的监控,提高性能。
image

举个形象的例子吧。比如一个tcp服务器处理20个客户端socket。A方案:顺序处理,如果第一个socket因为网卡读数据处理慢了,一阻塞后面都玩蛋去。B方案:每个socket请求都创建一个分身子进程来处理,不说每个进程消耗大量系统资源,光是进程切换就够操作系统累的了。C方案**(I/O复用模型,epoll):将用户socket对应的fd注册进epoll(实际上服务器和操作系统之间传递的不是socket的fd而是fd_set的数据结构),然后epoll只告诉哪些需要读/写的socket,只需要处理那些活跃的、有变化的socket fd的就好了。这样,整个过程只在调用epoll的时候才会阻塞,收发客户消息是不会阻塞的。

最后

欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
295 10
|
6月前
|
缓存 NoSQL Java
互联网疯传的Redis学习笔记:收藏达到30W,阿里P7评论我很需要
Redis作为目前的主流NoSql数据库,不会是不可能的,在面试中也是非常高频的,一定不能在这个环节丢分,不管是学习,还是面试,以下知识点,都有必要掌握。
|
存储 消息中间件 缓存
互联网公司面试必问的Redis题目
互联网公司面试必问的Redis题目
283 0
互联网公司面试必问的Redis题目
|
存储 消息中间件 缓存
互联网公司面试必问的Redis题目
互联网公司面试必问的Redis题目
73 0
互联网公司面试必问的Redis题目
|
监控 前端开发 JavaScript
精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】JEESZ分布式大型互联网企业架构!
j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 分布式架构 源码来源:http://minglisoft.cn/technology
7166 0
|
存储 缓存 NoSQL
要点摘炼Redis篇|JavaEE互联网轻量级框架整合开发
学习JavaEE互联网轻量级框架整合开发此书,了解redis这一NoSQL技术,在此做点基础知识简单记录
|
缓存 NoSQL 定位技术
高德:Redis深度实践,助力实现“现实与互联网世界的底图梦”
在2016杭州云栖大会的“开源数据库之Redis专场”上,高德开放平台总经理童遥带来了题为《高德经典数据库实践案例分享》精彩演讲。演讲中,他主要介绍了高德业务下的经典数据库实践案例。
4620 0
|
存储 NoSQL Redis
阿里云Redis助力互联网+新媒体
阿里云Redis助力传统媒体拥抱互联网+,实现新媒体全渠道大融合
4097 0