Redis的使用和原理

目录

1.初识Redis

1.1 Redis是什么?

1.2 Redis的特性

1.2.1 速度快

1.2.2 基于键值对的数据结构服务器

1.2.3 丰富的功能

1.2.4 简单稳定

1.2.5 持久化

1.2.6 主从复制

1.2.7 高可用和分布式

1.3 Redis的使用场景

1.3.1 缓存

1.3.2 排行榜系统

1.3.3 计数器应用

1.3.4 社交网络

1.3.5 消息队列

2.Redis常见的数据类型

2.1 基本全局命令

2.1.1 KEYS

2.1.2 EXISTS

2.1.3 DEL

2.1.4 EXPIRE

2.1.5 TTL

2.1.6 TYPE

2.2 数据结构和内部编码


1.初识Redis

1.1 Redis是什么?

Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中有很大的用处,由于Redis将所有的数据存储在内存中,所以Redis的读写性能非常高效

1.2 Redis的特性

1.2.1 速度快

1)Redis数据存储在内存中,所以就比访问硬盘的数据库快很多

2)Redis的核心功能都是比较简单的操作内存的数据结构

3)从网络的角读看,Redis使用了IO多路复用的方式,一个线程管理多个socket

4)Redis使用了单线程模型,减少了不必要的线程之间的竞争开销

1.2.2 基于键值对的数据结构服务器

Redis是一种基于键值对的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由String、hash、list、set、zset(有序集合)、Bitmaps(位图)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景

1.2.3 丰富的功能

除了5中数据结构,Redis海提供了许多额外的功能:

1)提供了键过期功能,可以用来实现缓存

2)提供了发布订阅功能,可以用来实现消息系统

3)支持Lua脚本功能,可以利用Lua创建出新的Redis命令

4)提供了简单的事务功能,能在一定程度上保证事务特性

5)提供了流水线功能,客户端能将一批命令一次性传到Redis,减少了网络的开销

1.2.4 简单稳定

Redis的简单主要表现在三个方面,首先,Redis的源码很少,相对于很多NoSQL数据库来说代码量相对要少很多。其次,Redis使用单线程模型,使得Redis服务端处理模型变得简单。最后,Redis不需要依赖其他操作系统中的类库,自己实现了事件处理的相关功能

1.2.5 持久化

通常看,将数据放在内存中不安全,一旦发生断电,重要的数据可能就会丢失,因此Redis提供了两种持久化的方式:RDB和AOF,使用两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久化

1.2.6 主从复制

Redis提供了复制功能,实现了多个相同的Redis副本,复制功能是分布式Redis的基础

1.2.7 高可用和分布式

Redis提供了高可用实现的Redis哨兵(Redis Sentinel),能够保证Redis结点的故障发现和故障自动转移,也提供了Redis集群(Redis Cluster),是真正的分布式实现,提供了高可用、读写和容量的扩展性

1.3 Redis的使用场景

1.3.1 缓存

缓存机制几乎在所有的网站都有使用,合理的使用缓存可以加速数据的访问速度,Redis提供了键值对过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略

1.3.2 排行榜系统

Redis提供了列表和有序集合的结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统

1.3.3 计数器应用

在视频网站中,每播放一次视频播放量就加1,如果并发量很大对于传统关系型数据的性能是⼀种挑战,Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择

1.3.4 社交网络

由于社交网站访问量通常比较大,而且传统的关系型数据不太合适保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能

1.3.5 消息队列

消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,对于一般的消息队列功能基本可以满足

2.Redis常见的数据类型

2.1 基本全局命令

Redis由5中数据结构,它们都是键值对中的值,对于键来说有一些通用的命令

2.1.1 KEYS

返回所有满足样式的key,例如

h?llo匹配hello,hallo和hxllo,?匹配任意一个字符

h*llo匹配hllo,hello,heeeello,*匹配0个或者多个任意字符

h[ae]llo匹配hello和hallo,[ae]只能匹配a和e

h[^e]匹配hallo,hxllo,[^e]排除e,其他都能匹配

h[a-b]llo匹配hallo和hbllo,只匹配a-b之间的范围,包含两侧边界

keys的时间复杂度是O(N),其中keys *(查询redis中的所有key)

2.1.2 EXISTS

判断某个key是否存在

时间复杂度:O(1)

返回值:key存在的个数

2.1.3 DEL

删除指定的key

时间复杂度:O(1)

返回值:删除掉key的个数

2.1.4 EXPIRE

为指定的key添加秒级的过期时间,key存活时间超过指定的值就会被自动删除

时间复杂度:O(1)

返回值:1表示设置成功,0表示设置失败

2.1.5 TTL

获取指定key的过期时间,秒级

时间复杂度:O(1)

返回值:剩余时间。-1表示没有关联过期时间,-2表示key不存在

2.1.6 TYPE

返回key对应的数据类型,Redis的所有key都是String,key对应的value可能会存在多种类型

时间复杂度:O(1)

返回值:none,string,list,set,zset,hash,stream

总结:

keys:用来查看匹配规则的key

exists:用来判定指定key是否存在

del:删除指定的key

expire:给key设置过期时间

ttl:查询key的过期时间

type:查询key对应的value的类型

2.2 数据结构和内部编码

type命令实际返回的就是当前键的数据结构类型,它们分别是:String、list、hash、set、zest,这些只是Redis对外的数据结构

Redis数据结构和内部编码

String

raw:最基本的字符串

int:redis通常也可以用来实现一些"计数"功能,当value是一个整数的时候,此时可能redis会直接使用int来保存

embstr:针对短字符串进行的特殊优化

hash

hashtable:最基本的哈希表

ziplist:压缩列表,当哈希表里面的元素比较少时,可能就优化成ziplist,从而节省空间

list

linkedlist:链表

ziplist:压缩列表

从Redis3.2开始,引入新的实现方式quicklist,它同时兼顾了linkedlist和ziplist的优点,其中quicklist就是一个链表,每个元素又是一个ziplist,兼顾到时间和空间

set

intset:集合中存的都是整数

zset

skiplist:跳表

上述每种数据结构都有至少两种以上的内部编码实现,其中可以通过object encoding命令来查询内部编码

hello对应值的内部编码时embstr,mylist对应值的内部编码时ziplist

Redis这样设计有两个好处:

1)可以改进内部编码,而对外的数据结构和命令没有任何影响,因此一旦开发出更优秀的内部编码,无需改动外部数据结构和命令,形成了高内聚低耦合,例如Redis3.2提供了quicklist,它是结合了ziplist和linkedlist两者的优点,为列表类型提供了一种更为优秀的内部编码实现,用户是感知不到的

2)多种内部编码实现可以在不同场景下发挥各自的优势,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会下降,这时候Redis会根据配置选项将列表类型的内部实现转换为
linkedlist,整个过程用户也感知不到

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

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

相关文章

制定班规要注意哪些事项

对于如何管理班级,制定班规是一项至关重要的任务。关系到班级的日常秩序,影响着学生的集体荣誉感。制定班规并非易事,需要深思熟虑和周全考虑。 班规的制定应以学生为中心。深入了解学生的需求和期望,以及他们在学习和生活中可能遇…

Docker基础知识的掌握,相关基本命令的用法

安装docker步骤:https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 1.docker Docker 是一种容器化平台,用于帮助开发者打包、发布和管理应用程序及其依赖关系。通过 Docker,开发者可以将应用程序及其所有依赖项打包到一个称为…

亿发微商城:从社交流量到生意增量,拓客+变现双收益

亿发微商城提供私域经营必备的系统 、服务和技术支持等全套解决方案。省去开发成本,还原品牌调性,打通社交渠道,经营私域会员,带来传统电商和线下门店之外的生意增量。

43.SO_BACKLOG

属于ServerSocketChannel参数 SO_BACKLOG 设置的过小,高峰期有很多连接来了,就会被拒绝,报拒绝连接错误。 控制全连接队列的大小,可以容下适量连接。所以SO_BACKLOG设置的要大一些。 serverBootstrap.option(ChannelOption.SO_B…

面试-javaIO机制

1.BIO BIO:是传统的javaIO以及部分java.net下部分接口和类。例如,socket,http等,因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能,譬如基于字节流的InputStream 和OutputStream.基于字符流…

Vue--》从零开始打造交互体验一流的电商平台(四)完结篇

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能,配合其成熟生态下数量庞大的插件、Loader 资源,已经能够满足大多数前端项目的工程化需求,但代价则是日益复杂、晦涩的使用方法,开发者通常需要根据项目环境、资源类型、编译目…

在运行中遇到扫描包问题

问题描述:当我们看到这个上面一行代码时就代表我们有个包没有被当前的Spring容器给扫描到,关于这个问题我们有两个:第一把整个包导进来,第二用哪个导哪个

人脑网络的多层建模与分析

摘要 了解人类大脑的结构及其与功能的关系,对于各种应用至关重要,包括但不限于预防、处理和治疗脑部疾病(如阿尔茨海默病或帕金森病),以及精神疾病(如精神分裂症)的新方法。结构和功能神经影像学方面的最新进展,以及计算机科学等…

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140059315 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…

AI绘画:P图如此丝滑,OpenAI上线ChatGPT图像编辑功能,DallE-3绘画如此简单

大家好我是极客菌,用ChatGPT的DallE-3进行AI绘画对很多人来说是一个门槛很低的选择,现在OpenAI又重磅上线了图像编辑器功能(DallE editor),可以很方便的对图片的局部进行修改,而且支持中文,主打一个功能强大且好用&…

Django —— 用户名和密码配置

创建项目ProjectA: django-admin startproject ProjectA cd进入ProjectA文件夹运行项目: python manage.py runserver 0.0.0.0:8000 Starting development server at http://0.0.0.0:8000/Quit the server with CTRL-BREAK. 访问http://localhost:80…

SET加密:电子商务安全的基石

随着电子商务的飞速发展,如何确保在线交易的安全性和可信度已成为消费者、商家和金融机构共同关注的焦点。SET协议(Secure Electronic Transaction)作为一种安全电子交易的国际标准,凭借其卓越的安全性能和广泛的行业认可&#xf…

c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功

关键字extern的作用 这个很常见的都知道是定义一个外部变量或函数,但并不是简单的建立两个文件,然后在用extern 定义在另一个非最初定义变量的文件里 区分文件和编译运行的文件 例如,一个文件夹里有文件a.c和文件b.c,在sublime text中直接…

重庆高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的飞速发展,智能制造已成为推动产业升级和经济社会发展的重要力量。在这一背景下,重庆高校大学智能制造实验室积极推进数字孪生可视化系统平台建设项目,旨在通过先进的数字化技术,实现实验室资源的优化配置和高效利用。 …

java虚拟机栈帧操作

虚拟机栈(Virtual Machine Stack)是虚拟机(如JVM、Python VM等)用来管理方法调用和执行的栈结构。它主要用于存储方法调用的相关信息,包括局部变量、操作数栈、动态链接和方法返回地址等。 java虚拟机栈操作的基本元素就是栈帧,栈帧主要包含了局部变量表、操作数栈、动态…

数字签名解析

1. 概述 数字签名不是手写签名的数字图像; 数字签名是一种可以提供认证的加密形式,是转向完全无纸环境的一个途径; 数字签名机制用以解决伪造、抵赖、冒充和篡改、完整性保护等安全问题。 2. 公钥密码与数字签名的关系 要实现数字签名&#…

【04】从0到1构建AI生成思维导图应用 -- 创建 AI 工作流

【04】从0到1构建AI生成思维导图应用 – 创建 AI 工作流 大家好!最近自己做了一个完全免费的AI生成思维导图的网站,支持下载,编辑和对接微信公众号,可以在这里体验:https://lt2mind.zeabur.app/ 上一章:h…

mybatis核心配置介绍

mybatis核心配置 【mybatis全局配置介绍】 ​ mybatis-config.xml,是MyBatis的全局配置文件,包含全局配置信息,如数据库连接参数、插件等。整个框架中只需要一个即可。 1、mybatis全局配置文件是mybatis框架的核心配置,整个框架…

2024高考录取分数线一览表(含一本线、二本线、专科线)

2024年全国各地的高考录取分数线已经全部公布,查大学网(www.chadaxue.com)为大家整理全国31个省市高考录取分数线汇总,包括本科批(一本分数线线和二本分数线)、专科批和特殊类招生控制分数线汇总&#xff0…