1 redis7概述

Redis7

1 Redis简介

Redis之所以称之为字典服务, 是因为 Redis 是一个 key-value存储系统。 支持存储的 value类型很多, 包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等。
Redis 的国际知名用户有,Twitter、GitHub、Facebook 等,国内知名用户有,阿里巴巴、腾讯、百度、搜狐、优酷、美团、小米等。熟练使用和运维 Redis 已经成为开发运维人员的一个必备技能。

1.1 NoSQL

NoSQL ( “Not Only SQL”) , 泛指非关系型的数据库。 随着互联网 web2.0网站的兴起,传统的关系数据库在处理 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

(1) 键值存储数据库
就像 Map 一样的 key-value 对。典型代表就是 Redis。

(2) 列存储数据库
关系型数据库是典型的行存储数据库。 其存在的问题是, 按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。而按列存储则可实现分布式存储,适合海量存储。典型代表是 HBase。

(3 )文档型数据库
其是 NoSQL 与关系型数据的结合, 最像关系型数据库的 NoSQL。 典型代表是 MongoDB。

1.2 Redis用途

Redis 在生产中使用最多的场景就是做数据缓存。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了 RT,而且降低了 DBMS 的压力。

在这里插入图片描述
根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类:实时同步缓存,与阶段性同步缓存。

实时同步缓存是指,DBMS 中数据更新后,Redis 缓存中的存放的相关数据会被立即清除,以促使再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis。

阶段性同步缓存是指,Redis 缓存中的数据允许在一段时间内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的过期时间。

1.3Redis特性

能够做缓存的技术、中间件很多,例如,MyBatis 自带的二级缓存、Memched 等。只所以在生产中做缓存的产品几乎无一例外的会选择 Redis,是因为它有很多其它产品所不具备的特性。

  • 性能极高:Redis 读的速度可以达到 11w 次/s,写的速度可以达到 8w 次/s。只所以具有这么高的性能,因为以下几点原因: (1)Redis 的所有操作都是在内存中发生的。 (2)Redis 是用 C 语言开发的。 (3)Redis 源码非常精细。

  • 简单稳定:Redis 源码很少。早期版本只有 2w 行左右。从 3.0 版本开始,增加了集群功能,代码变为了 5w 行左右。

  • 持久化:Redis 内存中的数据可以进行持久化,其有两种方式:RDB 与 AOF。

  • 高可用集群:Redis 提供了高可用的主从集群功能,可以确保系统的安全性。

  • 丰富的数据类型:Redis 是一个 key-value 存储系统。支持存储的 value 类型很多,包括String、List、Set、Zset和 Hash等,还有 BitMap、HyperLogLog、Geospatial 类型。

    • BitMap:一般用于大数据量的二值性统计。
    • HyperLogLog:其是 Hyperlog Log,用于对数据量超级庞大的日志做去重统计。
    • Geospatial:地理空间,其主要用于地理位置相关的计算
  • 强大的功能:Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持 Lua脚本扩展功能。

  • 支持多线程 IO 模型:Redis 之前版本采用的是单线程模型,从 6.0 版本开始支持了多线程模型。

1.4 Redis的IO模型

Redis 客户端提交的各种请求是如何最终被 Redis 处理的?
Redis 处理客户端请求所采用的处理架构,称为 Redis 的 IO 模型。不同版本的 Redis 采用的 IO 模型是不同的。

1.4.1 单线程模型

对于 Redis 3.0 及其以前版本, Redis 的 IO 模型采用的是纯粹的单线程模型。 即所有客户端的请求全部由一个线程处理。

在这里插入图片描述
Redis 的单线程模型采用了多路复用技术。

对于多路复用器的多路选择算法常见的有三种:select 模型、poll 模型、epoll 模型。

  • poll 模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是有延迟的。
  • epoll 模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同,又可分为 LT 模型与 ET 模型。
每个客户端若要向 Redis 提交请求,都需要与 Redis 建立一个 socket 连接,并向事件分
发器注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器
就会感知到, 然后获取客户端通过该连接发送的请求, 并将由该事件分发器所绑定的这个唯
一的线程来处理。 如果该线程还在处理多个任务, 则将该任务写入到任务队列等待线程处理。
只所以称为事件分发器, 是因为它会根据不同的就绪事件, 将任务交由不同的事件处理
器去处理。
1.4.2 多线程模型

Redis 6.0 版本,才是真正意义上的多线程模型。因为其对于客户端请求的处理采用的是多线程模型。
在这里插入图片描述
多线程 IO 模型中的“多线程”仅用于接受、解析客户端的请求,然后将解析出的请求
写入到任务队列。而对具体任务(命令)的处理,仍是由主线程处理。这样做使得用户无需考虑线程安全问题,无需考虑事务控制,无需考虑像 LPUSH/LPOP 等命令的执行顺序问题。

1.4.3 优缺点总结

(1 ) 单线程模型

  • 优点:可维护性高,性能高。不存在并发读写情况,所以也就不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销。
  • 缺点:性能会受到影响,且由于单线程只能使用一个处理器,所以会形成处理器浪费。

(2 ) 多线程模型

  • 优点:其结合了多线程与单线程的优点,避开了它们的所有不足
  • 缺点:该模型没有显示不足。如果非要找其不足的话就是,其并非是一个真正意义上的“多线程”,因为真正处理“任务”的线程仍是单线程。所以,其对性能也是有些影响的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/456884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python INI文件操作与configparser内置库

目录 INI文件 configparser内置库 类与方法 操作实例 导入INI文件 查询所有节的列表 判断某个节是否存在 查询某个节的所有键的列表 判断节下是否存在某个键 增加节点 删除节点 增加节点的键 修改键值 保存修改结果 获取键值 获取节点所有键值 其他读取方式 …

linux下dlib静态库和动态库编译

本文讲述的linux系统下如何编译dlib的静态库和动态库方法。 dlib源码下载地址 dlib官网:dlib C LibraryGitHub - davisking/dlib: A toolkit for making real world machine learning and data analysis applications in C dlib源码的目录结构如下: 编…

【TB作品】MSP430单片机,音乐播放器,四首音乐,八音盒,Proteus仿真

文章目录 题目要求仿真结果实验报告:基于MSP430单片机的八音盒设计实验目的实验设备实验原理总结 代码和仿真图 题目要求 八音盒 本设计利用MSP430单片机结合内部定时器及LED/LCD,设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 基本要求: 使用LED/LCD显示器…

格子表单GRID-FORM | 必填项检验 BUG 修复实录

格子表单/GRID-FORM已在Github 开源,如能帮到您麻烦给个星🤝 GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建(VitePress)与部署(Github Pages)必填项检验 BUG…

AS-V1000 视频监控平台产品介绍:web客户端功能介绍(上)

目 录 一、引言 1.1 AS-V1000视频监控平台介绍 1.2 平台服务器配置说明 二、软件概述 2.1 软件用途 2.2 登陆界面 2.3 主界面 2.4 视频浏览 三、web端主要功能介绍 3.1 多画面风格 3.1.1风格切换 3.1.2 切换效果 3.2截屏 3.2.1 单画面截屏 3.2.2 …

cesium wall 扩散墙(动态立体墙效果 Primitive 方法)

cesium wall 扩散墙(动态立体墙效果)以下为源码直接复制可用 1、实现思路 1、此效果运用cesium 中 Primitive 方法,通过传入中心点、半径、顶点数、颜色来进行加载。 2、运用 Math 方法 对传进来的中心点、半径、定点数,来计算个顶点经纬度。 3、通过Primitive 方法中upda…

Vue3调用钉钉api,内嵌H5微应用单点登录对接

钉钉内嵌H5微应用单点登录对接 https://open.dingtalk.com/document/isvapp/obtain-the-userid-of-a-user-by-using-the-log-free 前端需要的代码 1、安装 dingtalk-jsapi npm install dingtalk-jsapi2、在所需页面引入 import * as dd from dingtalk-jsapi; // 引入钉钉a…

软件测试覆盖率

软件测试覆盖率简介 1、定义:覆盖率是用来度量测试完整性的一个手段,同时也是测试技术有效性的一个度量。2、计算:覆盖率(至少被执行一次的item数)/item的总数3、特点1)通过覆盖率数据,可以检测…

【框架学习 | 第五篇】SpringMVC(常用注解、获取请求参数、域对象共享数据、拦截器、异常处理、上传/下载文件)

文章目录 1.SpringMVC简介1.1定义1.2主要组件1.3工作流程1.3.1简要流程1.3.2详细流程 1.4优缺点 2.常用注解3.获取请求参数3.1通过 HttpServletRequest 获取请求参数3.2通过控制器方法的形参获取请求参数3.2.1请求路径参数与方法形参一致3.2.2请求路径参数与方法形参不一致3.2.…

3、设计模式之工厂模式1(Factory)

工厂模式是什么?     工厂模式是一种创建者模式,用于封装和管理对象的创建,屏蔽了大量的创建细节,根据抽象程度不同,主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

【划重点】自动引流软件隐藏风险!?你不知道的网络危机与应对策略

先来看成果,评论888领取 在互联网快速发展的今天,自动引流软件以其高效的推广方式和便捷的操作,成为许多商家和个人提升网络知名度的重要工具。然而,这种看似无害的软件,却潜藏着不容忽视的网络安全风险。本文将深入解…

Linux操作系统启动流程

文章目录 1. Linux操作系统启动流程图2.运行流程(1) 加载BIOS(2) 读取MBR(3) GRUB引导(4) 加载Kernel(5) 设定Inittab运行等级(6) 加载…

如何布局马斯克推特上喊的meme币赛道

2024年的牛市正如火如荼的开展,截止当下,比特币已经站上了7.3万美元,远超2021年高点的6.9万美元,比特币的未来是一片大海。 除了比特币的一枝独秀之外,meme板块可以说是市场资金最青睐的。尤其是马斯克在X分享PEPE相关…

初步了解序列化和反序列化

01什么是序列化和反序列化 序列化是将对象转化为字符串以便存储的一种方式。而反序列化恰好是序列化的逆过程,反序列化会将字符串转化为对象供程序使用。 常见的php系列化和反系列化方式主要有:serialize,unserialize;json_enco…

LVGL移植到ARM开发板(GEC6818开发板)

LVGL移植到ARM开发板(GEC6818开发板) 一、LVGL概述 LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统…

四、MySQL

MySQL MySQL1.初识网站2.安装MySQL2.1 下载(最重要的一点是路径中不能有中文,哪怕是同级目录也不行)2.2安装补丁2.3安装2.4创建配置文件2.5初始化 3.启动MySQL4.连接测试4.1 设置密码4.2 查看已有的文件夹(数据库)4.3 …

【SSM】任务列表案例 基本CRUD SSM整合

文章目录 一、案例功能预览二、接口分析三、前端工程导入四、后端程序实现和测试4.1 准备4.2 功能实现4.2.1 分页查询显示4.2.2 添加计划4.2.2 删除计划4.2.3 修改计划 4.3 前后联调 一、案例功能预览 Github 地址 : ssm-integration-part 二、接口分析 学习计划…

【C++初阶】C++入门(上)

C的认识 ①什么是C? ​ C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。 ​ 于是1982年,Bjarne Stroustrup(本…

激活函数理解

前言 为什么神经网中非要有各种各样的激活函数?他们有什么用?没有他们会怎样?常见的激活函数有哪些,他们都有什么特点? 如果我们不运用激活函数,神经网络的输出信号将仅仅是一个简单的线性函数。线性方程…

【DL经典回顾】激活函数大汇总(七)(CReLU RReLU附代码和详细公式)

激活函数大汇总(七)(CReLU & RReLU附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或…