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 ) 多线程模型

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[java基础揉碎]多态数组

介绍: 多态数组就是有一个父类数组, 数组含有不同多个父类子类对象 解析: 新建一个person类, 有名字,年龄属性, 同时有个say方法 新建一个子类, 有一个成绩的属性,并重写了say方法, 加上了成绩 新建一个子类老师, 并有工资这个属性, 一样重写了say方法加上了这个属性 要求创…

efcore事务

在 Entity Framework Core (EF Core) 中,事务用于确保一系列数据库操作要么全部成功,要么全部失败,这对于保持数据的一致性非常重要。以下是使用 EF Core 实现事务的一个简单示例: 首先,请确保安装了 EF Core。如果你…

PyTorch学习笔记之基础函数篇(八)

6 线性代数运算 6.1 torch.mm()函数 torch.mm() 是 PyTorch 中的一个函数,用于执行矩阵乘法操作。这个函数会接受两个张量作为输入,并返回它们的矩阵乘积。 函数的基本语法如下: torch.mm(mat1, mat2) → Tensor参数说明: ma…

根据服务器系统选择对应的MySQL版本

1. 根据服务器系统选择对应的MySQL版本 MySQL有多个版本,选择对应的版本,重点信息是Linux的GLIBC版本号,Linux的版本、系统位数。 1.1 查看Linux的GLIBC版本号 通常libc.so会支持多个版本,即向前兼容,查看该文件中…

Linux lsattr命令教程:如何查看和理解文件属性(附实例详解和注意事项)

Linux lsattr命令介绍 lsattr命令是list attributes的缩写,主要用于列出Linux系统文件的属性。这个命令可以帮助我们了解文件的各种属性,比如是否可以被修改、删除等。 Linux lsattr命令适用的Linux版本 lsattr命令在大多数Linux发行版中都可以使用&a…

LLM预备知识、工具篇——LLM+LangChain+web UI的架构解析

目录 【常见名词】一、LLM的低资源模型微调二、向量数据库1、Milvus(v2.1.4):云原生自托管向量数据库(Ubuntu下)1)安装(Docker Compose方式):2)管理工具(仅支持Milvus 2.…

RabbitMQ命令行监控命令详解

在分布式系统中,消息队列中间件如RabbitMQ扮演着至关重要的角色。为了保证系统的稳定性和高可用性,对RabbitMQ进行有效监控是必不可少的。本文将详细介绍RabbitMQ提供的命令行工具rabbitmqctl,这些工具可以帮助我们监控和管理RabbitMQ服务器。…

adb 筛选查看Unity日志

在Windows系统中,使用ADB(Android Debug Bridge)查看Unity应用的日志是一个常见的需求,尤其是在开发或调试Android平台上的Unity游戏或应用时。以下是一些基本步骤和命令,帮助你通过ADB获取Unity日志。 在Linux或Mac …

rank() over, dense_rank() over, row_number() over的区别

rank() over, dense_rank() over, row_number() over的区别 --ROW_NUMBER() OVER 不需要考虑并列,即使查询出来的数值相同也会进行连续排名 SELECT NAME, STUNO, SUBJECT, SCORE, ROW_NUMBER() OVER(PARTITION BY SUBJECT ORDER BY SCORE DESC) TO_RANK FROM SCOTT…

Python分类汇总N张Excel表中的数据(附源码下载)

在现代办公环境中,处理大量的Excel表格是一项常见而又繁琐的任务。Python作为一种功能强大的编程语言,其在自动化办公方面的表现尤为出色。例如,我们可以使用Python进行Excel表格的分类汇总操作。 具体来说,我们可以创建一个名为“…

Learn OpenGL 03 着色器

GLSL 着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。 一个典型的着色器有下面的结构: #version vers…

O2OA(翱途)开发平台系统安全-用户登录IP限制

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持对指定的用户设置可以连接的客户端计算机的IP地址,以避免用户在不安全的环境下访问系统。本篇主要介绍如何开启O2OA用户登录IP限制。 一、先决条件: 1、O2Server服务器正常运行,系统安装部…

PostgreSQL开发与实战(6.3)体系结构3

作者:太阳 四、物理结构 4.1 软件安装目录 bin //二进制可执行文件 include //头文件目录 lib //动态库文件 share //文档以及配置模版文件4.2 数据目录 4.2.1 参数文件 pg_hba.conf //认证配置文件 p…

C++ string详解+模拟实现

文章目录 写在前面1. string类的使用1.1 string类的构造1.2 string类的迭代器1.3 string类对象的容量操作1.4 string类对象的修改操作1.5 string类对象的非成员函数 2. string类的模拟实现2.1 模拟实现string类的默认成员函数2.2 模拟实现string类的迭代器2.3 模拟实现string类…

dpdk-19.11 对向量指令的使用情况分析

不同向量指令识别关键字 __m128i sse uint64x2_t neon __m256i avx2 __m512i avx512 vector altivec dpdk 向量收发包函数 支持 arm neno 向量收发包函数的 pmd 驱动 bnxt hns3 i40e ixgbe mlx5 virtio 支持 sse 向量收发包函数的 pmd 驱动 axgbe hinic fm10k bnxt i40e …

如何本地部署SeaFile文件共享服务并实现无公网IP访问内网本地文件

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 现在我们身边的只能设备越来越多&#xff0c…

JavaWeb后端——分层解耦 IOC DI

分层/三层架构概述 三层架构:Controller、Service、Dao 解耦/IOC&DI概述 分层解耦 容器称为:IOC容器/Spring容器 IOC 容器中创建,管理的对象,称为:bean 对象 IOC&DI入门 实现 IOC&DI 需要的注解&#…

el-table左键双击单元格编辑内容(输入框输入计算公式可直接得出结果),右键单击展示操作菜单,可编辑单元格高亮展示

vue2点击左侧的树节点&#xff08;el-tree&#xff09;定位到对应右侧树形表格(el-table)的位置&#xff0c;树形表格懒加载 表格代码 <el-table ref"singleTable" :data"detailsList" highlight-current-row"" row-key"detailId"…

微信小程序Java后台获取手机号

小程序端&#xff1a; wx.request({url: registerphone, //自己的地址data: {openid: openid,encryptedData: encryptedData, //手机加密数据iv: iv, // 加密ivsession_key: session_key,// 加密key},method: "post",header: {"content-type": "appli…

Python基于大数据的豆瓣电影分析,豆瓣电影可视化系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…