Redis -- 基础知识2

news2024/9/22 23:24:18

 1.Redis客户端介绍

1.基础介绍

Redis是一种客户端-服务器结构的程序,通过网络进行互动

客户端的多种形态

1.自带了命令行客户端:redis-cil

2.图形化界面的客户端:依赖windows系统,连接服务器有诸多限制,不建议使用

3.基于redis的api自行开发客户端:工作常见

2.特征与性能选择

1.Redis的快,是相对于MySQL这样的关系型数据库比较的

2.如果和内存中的操作变量相比,就没有优势了

3.是否要采用redis要结合实际的需求。单机系统不用redis,分布式再使用redis

2.通用命令

先redis-cil指令进入到客户端中

1.核心命令

1.set [key] [value]:把key和value存储进去

2.get [key]:根据key取出value。如果不存在,返回nil

key和value都是字符串

2.全局命令

Redis支持多种数据结构,整体Redis是键值对存储的,对应的value可以有多种形式

1.keys

keys pattern:用来查询当前服务器上匹配的key。通过一些特殊符号来描述key模样,匹配key上述模样的key查询出来.查询的时间复杂度为O(N)

? :匹配任意一个字符

* :匹配0个或者多个任意字符

[abc] :只能匹配[]内的字符,固定了选项

[^a] :不能匹配[]内的字符,其他都能找到

[a-c] :匹配[]内范围的的固定字符

特别注意的是:在生产环境上的key可能非常多,而redis是一个单线程服务器,如果执行keys *,那么时间就会非常长,redis服务器会被阻塞,使得其他客户端不能被服务器提供服务.并且这样可能会出现keys *阻塞其他的redis查询就会超时,导致数据读取要从MySQL中进行读取,MySQL比较脆弱,一波请求可能就把系统弄崩溃

2.exists

exists key [key...]:判断key是否存在,返回个数,可以查询多个key,至少输入一个.查一个redis是按照hash的方式进行组织的,使用时的时间复杂度为O(1),查多个就O(N)

3.del

del [key...]:删除指定key,可以删除多个.删除一个的时间复杂度为O(1).

redis一般作为缓存,其实del删除的是热点数据,数据依然存在MySQL中,所以删除几个key的安全影响不大.如果redis作为数据库,那么删除数据的影响更大.redis作为消息队列,那么影响会根据情况分析了.

4.expire

expire key second:作用是给指定的key设定过期时间,设定的key超时就会自动删除

pexpire key 毫秒:设定毫秒级别的超时时间

expire的时间复杂度为O(1)

应用:手机验证码,优惠券,基于redis实现的分布式锁,设定加锁的过期时间.

5.ttl

ttl key:查询过期时间还有多少

pttl key:毫秒级的查询

时间复杂度为O(1).-1表示没有关联过期时间,-2为key不存在

redis的过期策略的实现方式:

1.redis的策略有两方面定期删除和惰性删除

2.惰性删除:key到过期时间了,但是不先删除,下一次访问时使用key,那么就删除key并且返回nil

3.定时删除:会定期执行删除的操作,不过每次都只会抽取一部分,进行检验过期时间.保证这个检测过程的时间短,以为长时间进行检测会造成阻塞

4.两个删除策略,对整体效果一般,还会有很多的key残留.那么redis在此基础上还补充了一些内存的淘汰机制

5.redis最开始是单线程的,当然随着版本迭代,现在可以使用多线程.那么其实可以针对这一特性将加入一个定时器来节省cpu处理多个key.有两种方法可以实现:优先级队列和时间轮

6.实现优先级队列,我们对优先级队列设置出队列的要求,那么在数据设定过期时间后,我们可以实现一个数据结构,将过期的截至时间和key组合,并且将其放在优先级队列中,优先级队列对的头部为最先截至的时间的结构,找到key即可删除.并且每次根据头部的截至时间进行唤醒线程对优先级队列进行操作.一旦存在新数据,那么将线程唤醒,加入到队列中,更新一下最先截至的时间并且进行线程进行休眠操作

7.时间轮:创建一个数组,一个数组为单位时间,指针指向的位置就是执行的位置.指针往后走,并且数组为环形数组.只需要将超时时间挂到相对应的数组位置上,并且通过链表的形式存储.每次走到一个位置遍历下方的链表,删除超时的key即可

8.redis源代码中,删除的核心机制就是事件循环

6.type

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

3.认识数据类型即其编码方式

1.key对应的value有很多种类型,常见的有:none,string,list,set,zset,hash,stream

2.不同的value类型对应的操作各不相同

3.在redis底层,针对实现不同类型进行特定的优化,来节省时间和空间的效果背后的数据结构不一定是保准的原数据结构,不过功能和效率达到同样效果

string

1.raw:最基本的字符串,对标C++为char

2.int:通常用于计数,存储整数一般用int

3.embstr:对短字符串进行优化,占据空间会更小

hash

1.hashtable:最基本的hash表

2.ziplist:压缩哈希表,redis内部的hash表,和真hash结构不太一样,思想是一致的.在hash表元素个数比较少的时候使用.

3.list

1.linkedlist:链表

2.ziplist:压缩链表,适用于元素少的,空间利用率高,元素多了操作效率会变低

3.quicklist: redis3.2版本的类型,同时兼顾上面两种的优点

4.set

1.hashtable:

2.intset:集合中存的都是整数时的优化

5.zset

1.skiplist:跳表,也是一种链表,不同于普通链表,每个节点都有多个指针域,巧妙通过这些指针域跳跃遍历

2.ziplist

object encoding key:查看key中value的具体结构类型

3.单线程模型

1.redis只是用一个线程来处理所有的命令请求,而不是redis服务器只有一个线程,其实也有多个线程,多线程在处理网络IO,而命令操作只有一个线程进行

2.假设多个客户端同时操作一个redis服务器,redis是单线程的,当前收到多个请求时是串行执行的.请求到服务器都在队列中排队,按顺序执行,而非并发执行命令

3.redis的业务逻辑短平快,所以串行也不太影响cpu效率

redis虽然是单线程模型,但是效率高的原因

1.效率高是与数据库进行比较的

2.redis访问的是内存,而数据库访问硬盘

3.redis核心功能比数据库的核心功能更简单

4.单线程模型,避免了一些多线程竞争的操作,由于redis的操作短平快

5.处理网络IO的时候,使用epoll进行IO多路复用机制(一个线程管理多个socket)

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

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

相关文章

简单而高效:使用PHP爬虫从网易音乐获取音频的方法

概述 网易音乐是一个流行的在线音乐平台,提供了海量的音乐资源和服务。如果你想从网易音乐下载音频文件,你可能会遇到一些困难,因为网易音乐对其音频资源进行了加密和防盗链的处理。本文将介绍一种使用PHP爬虫从网易音乐获取音频的方法&…

Fastq文件的获取

Fastq文件的获取 Fastq文件的获取linux 下安装SRA Toolkit工具使用SRA Toolkit工具下载SRA数据 Fastq文件的获取 author:CYH-BI date:2023.10.25 Fastq文件得获取 ,可以从NCBI获取,也可以自己测序得到结果,下面介绍从网上获取数据。 linux 下安装SRA…

MySQL3:MySQL中一条更新SQL是如何执行的?

MySQL3:MySQL中一条更新SQL是如何执行的? MySQL中一条更新SQL是如何执行的?1.Buffer Pool缓冲池2.Redo logredo log作用Redo log文件位置redo log为什么是2个? 3.Undo log4.更新过程5.InnoDB官网架构InnoDB架构-内存结构①Buffer …

【uniapp+云函数调用】人脸识别,实人认证,适用于app,具体思路解析,已实现

2023.10.8 需求: uniapp开发的app项目中使用人脸识别 app项目都是第一次搞,更别提人脸识别了。目前已有的就是Dcloud账号已申请,实现需求的时间没那么紧迫 此篇会详细记录从0到1的过程 2023.10.24 今天开始探究实现的过程 可能会记录的有些冗余 效果图如下: uniapp开发指南…

GoLong的学习之路(九)语法之结构体(非常重要,不看就等于不会Go语言)

书接上回,上回书说到,map等数据结构,接下来说结构体 文章目录 类型别名和自定义类型自定义类型别名类型定义和类型别名的区别 结构体结构体的定义结构体实例化基本实例化 匿名结构体创建指针类型结构体并取用获取结构体指针取用结构体 结构体…

NewStarCTF2023week4-More Fast(GC回收)

打开链接,存在很多个类,很明显是php反序列化漏洞利用,需要构造pop链 , 关于pop链构造的详细步骤教学,请参考我之前的博客,真的讲得很详细也容易理解: http://t.csdnimg.cn/wMYNB 如果你是刚接…

降本增效神器?Share Creators 智能数字资产管理系统真香!

降本增效似乎是一个持续又永久的话题。尤其在今年, 显得格外的重要~ 在各行各业都受到了疫情所带来巨大冲击的背景下,降本增效对很多企业来说不再是锦上添花,而可能是一条唯一的出路。 随着市场的收缩和竞争的加剧,在更“卷”的…

树形数据增删改查

功能描述: 默认展示所有项目点击项目展示当前项目下的所有区域点击区域展示当前区域下的所有工位以上以树形图格式展示项目,区域,和工位都可进行增加 修改 和删除,每个图标hover时显示对应提示信息项目,区域&#xff…

数据库数据恢复—Oracle数据库报错ORA-01110错误的数据恢复案例

Oracle数据库故障: 北京某公司一台运行oracle数据库的服务器,机房意外断电导致该服务器重启,重启后发现oracle数据库报错。该Oracle数据库没有备份。 Oracle数据库数据恢复过程: 1、北亚企安数据恢复工程师检查该oracle数据库的数…

外卖跑腿小程序开发是否需要定期更新和维护?

外卖跑腿小程序已成为现代生活的一部分,但它们的成功和可靠性取决于持续的定期更新和维护。本文将探讨为什么外卖跑腿小程序需要定期更新和维护,以及如何实施这些关键的技术措施。 为什么需要定期更新和维护? 1. 改进性能和稳定性 外卖跑…

Android Studio模拟器/虚拟设备连接互联网的方法

如图,无线、网络都无法联网 找到本机的DNS 找到emu-launch-params.txt,添加DNS -dns-server 192.168.124.1 重启虚拟机,关闭无线

Python使用psycopg2读取PostgreSQL的geometry字段出现二进制乱码

1、问题 读取geometry字段出现二进制乱码 查询语句: sql "select * from public"Note: 这种写法在PostgreSQL中直接查询, 没有问题,不会报错。 但是在Python中查询,如果导出的geom还是一长串的geometry 格式的话, …

Anaconda创建环境出现一堆DEBUG

问题描述如图所示: 试了好几种方法,比如以为是清华的源不能用了嘛,然后改了之后发现不行;然后又以为是anaconda出啥问题了,卸了重装发现都没能解决。 但是好在没有放弃啊哈哈:【试试下面这个】 解决办法&a…

clion安装C++远程linux开发并调试 从装centos虚拟机到完美开发调试

下载镜像 阿里云镜像 从vmware上安装虚拟机并提权开放ssh 更新编译环境 一般 gcc gdb 版本都是比较低的,适配不了clion的最低要求。 升级gdb参考博客 升级gcc参考博客 安装CMAKE 官方的源使用wget即可下载 未找到openssl的解决办法 注意版本,又踩个…

C语言--有 n 个整数,使前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m个数,见下图,写一个函数实现该功能

图解&#xff1a; 代码&#xff1a; void Move(int* arr, int n, int m) {if (m < 0 || m > n)return;//创建m个长度的int数组int* brr (int*)malloc(m * sizeof(int));assert(brr ! NULL);if (brr NULL)return;//把后面的m个数字移到新数组int i;for (i 0; i <…

【Axure高保真原型】图片手电筒效果

今天和大家分享图片手电筒效果的原型模板&#xff0c;鼠标移入图片区域后&#xff0c;会显示一个光圈&#xff0c;光圈会跟随鼠标移动&#xff0c;照亮对应的区域&#xff1b;鼠标拖动时可以移动地图图片&#xff0c;查看更多区域的内容&#xff0c;具体效果可以打开下方原型地…

【linux】安装rpmrebuild

rpmrebuild是一种从已经安装的包中构建RPM文件的工具。它可以用于轻松构建修改后的包&#xff0c;并适用于任何使用RPM的Linux发行版。 访问地址 rpm rebuild download | SourceForge.net 选择版本 版本地址&#xff1a;版本地址 下载安装包 安装 rpm -ivh rpmrebuild-2.15…

探索光模块的MSA多源协议

在当今高度互联的世界中&#xff0c;光模块作为网络设备的重要部分&#xff0c;其性能和质量直接影响到整个网络系统的运行。其中光模块由于其灵活性和高效性&#xff0c;已经成为数据中心和云计算领域的主要选择。本文易天光通信将深入探讨光模块的MSA协议&#xff0c;揭示其重…

6. Cesium中的Entity

1. Entity类简介 Entity类是Cesium中描述和呈现地球上实体对象的核心类。它具有丰富的属性和方法&#xff0c;用于控制和定制地理实体的外观和行为。Entity对象可以表示各种地理实体&#xff0c;如点、线、面等&#xff0c;并具有位置、方向、模型、标牌、折线、多边形等属性&…

小主机折腾记18

这个月冲动消费了小两千块钱…… 1.880g5twr 由于四根2400t的内存条没有用出去&#xff0c;我又把它们装回了惠普的800g5twr&#xff1b; 看到pdd有400块钱的9350K&#xff0c;于是想着给他上一个9350k 在参考了pdd、咸鱼以及淘宝的价格后&#xff0c;我发现400块钱的9350k都…