什么是Redis?Redis为什么如此之快?| 后端学习手册

2023-12-24 04:38
文章标签 学习 redis 手册 之快

本文主要是介绍什么是Redis?Redis为什么如此之快?| 后端学习手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求。

为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐。

什么是Redis


Redis是一个由ANSIC语言编写,性能优秀、支持网络、可持久化的Key-Value内存的NoSQL数据库,并提供多种语言的API。

Redis数据类型

Redis的常用数据类型主要是 String、List、Hash、Set、ZSet 这5种。

参考上图,Redis数据类型在互联网公司一般有以下应用:

String:缓存、限流、计数器、分布式锁、分布式Session

Hash:存储用户信息、用户主页访问量、组合查询

List:微博关注人时间轴列表、简单队列

Set:赞、踩、标签、好友关系

Zset:排行榜

比如电商在大促销时,Redis会用一些特殊的设计来保证系统稳定,扣减库存可以考虑如下设计:                          

上图中,直接在Redis中扣减库存,记录日志后通过Worker同步到数据库,在设计同步Worker时需要考虑并发处理和重复处理的问题。

Redis为何那么快

通过上面的应用场景可以看出Redis是非常高效和稳定的,那Redis底层是如何实现的呢?

Redis 的效率很高,官方给出的数据是 100000+QPS,QPS即每秒钟request/事务 数量,这是因为:

1. Redis 完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高。Redis 使用单进程单线程模型的(K,V)数据库,将数据存储在内存中,存取均不会受到硬盘 IO 的限制,因此其执行速度极快。

2. 另外单线程也能处理高并发请求,还可以避免频繁上下文切换和锁的竞争,如果想要多核运行也可以启动多个实例。

3.数据结构简单,对数据操作也简单,Redis 不使用表,不会强制用户对各个关系进行关联,不会有复杂的关系限制,其存储结构就是键值对,类似于 HashMap,HashMap 最大的优点就是存取的时间复杂度为 O(1)。

4.Redis 使用多路 I/O 复用模型,为非阻塞 IO。

注:Redis 采用的 I/O 多路复用函数:epoll/kqueue/evport/select。

选用策略:

1. 因地制宜,优先选择时间复杂度为 O(1) 的 I/O 多路复用函数作为底层实现。

2. 由于 Select 要遍历每一个 IO,所以其时间复杂度为 O(n),通常被作为保底方案。

3. 基于 React 设计模式监听 I/O 事件。

快来学习鸭!

不吹不黑,Redis因其优秀的素质已成为开发者必备技术之一,CSDN学院邀请到网易云担任云计算高级工程师的阿文老师共同出品《Redis从入门到精通》课程。

限量300单,扫码购买!

59元抢购啦!

这篇关于什么是Redis?Redis为什么如此之快?| 后端学习手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530567

相关文章

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢