Redis自学之路—基础数据结构具体方法解析(五)

news2025/1/20 3:48:54

目录

简介

数据结果具体方法解析

字符串(String)

 操作命令

set设置值

setex

setnx

get获取值

del删除key

mset批量设置值

incr数字运算

append追加指令

strlen字符串长度

getset设置并返回原值

setrange设置指定位置的字符

getrange截取字符串

命令的时间复杂度

使用场景

 缓存功能

计数

共享Session

限速

哈希(Hash)

操作命令

hset设值

hget取值

hdel删除field

hlen计算field个数

hmset批量设值

hget批量取值

hexists判断field是否存在

hvals获取所有value

hgetall获取所有field与value

hincrby自增指定数字

hstrlen计算value的字符串长度

命令的时间复杂度

使用场景

列表(list)

列表类型有两个特点

操作命令

lrange 获取指定范围内的元素列表(不会删除元素)

rpush 向右插入

lpush向左插入

linsert在某个元素前或后插入新元素

lpop从列表左侧弹出(会删除元素)

rpop从列表右侧弹出(会删除元素)

lrem对指定元素进行删除

ltrim按照索引范围修剪列表

lset修改指定索引下标的元素

lindex获取列表指定索引下标的元素

llen获取列表长度

blpop和brpop阻塞式弹出元素

使用场景

消息队列

实现其他数据结构

集合(set)

集合内操作命令

sadd添加元素

srem删除元素

scard计算元素个数

sismember判断元素是否在集合中

srandmember随机从集合返回指定个数元素

spop从集合随机弹出元素

smembers获取所有元素(不会弹出元素)

集合间操作命令

sinter求多个集合的交集

sunion求多个集合的并集

sdiff求多个集合的差集

将交集、并集、差集 的结果保存

使用场景

有序集合(ZSET)

集合内操作命令

zadd添加成员

zcard计算成员个数

zscore计算某个成员的分数

zrank计算成员的排名

zrem删除成员

zincrby增加成员的分数

zrange和zrevrange返回指定排名范围的成员

zrange

zrevrange

zrangebyscore返回指定分数范围的成员

zcount返回指定分数范围成员个数

zremrangebyrank按升序删除指定排名内的元素

zremrangebyscore删除指定分数范围的成员

集合间操作命令

zinterstore交集

zunionstore并集

使用场景


简介

        Redis提供的基础数据结构常用的有5种,分别是字符串(String)、哈希(Hash)、列表(list)、集合(Set)、有序集合(zset)。

数据结果具体方法解析

字符串(String)

        字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON\XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。

   虽然Redis是C写的,C里面有字符串<本质使用char数组来实现>,但是处于种种考虑,Redis还是自己实现了字符串类型

 操作命令

set设置值

set key value [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | KEEPTTL] [NX | XX]    [GET]

set命令有几个选项:

  • ex seconds:为键设置秒级过期时间
  • px milliseconds:为键设置毫秒级过期时间
  • nx:键必须不存在,才可以设置成功,用于添加(分布式锁使用)
  • xx:与nx相反,键必须存在,才可以设置成功,用于更新

从执行效果上看,ex参数和expire命令基本一样。还有一个需要特别注意的地方是如果一个字符串已经设置了过期时间,然后调用了set方法修改了它,它的过期时间会消失。

而nx和xx执行效果如下

除了set选项,Redis还提供了setex和setnx两个命令:

setex

为键设置秒级过期时间

setex key seconds value

setnx

键必须不存在,才可以设置成功,用于添加

setnx key value

setex和setnx的作用和ex和nx选项是一样的,

        setex为键设置秒级过期时间,

        setnx设置时键必须不存在,才可以设置成功。

get获取值

如果要获取的键不存在,则返回nil(空)

get key

del删除key

del key [key ...]

mset批量设置值

通过mset命令一次性设置4个键值对;

通过mget批量获取值;

mset key value [key value ...]

批量获取了键a、b、c、d的值:

        如果有些键不存在,那么它的值为nil(空),结果是按照传入键的顺序返回。

批量操作命令可以有效提高效率;

        1.假如没有mget这样的命令,要执行n次get命令具体耗时:

                n次 get时间 = n次网络时间 + n次命令时间

        2.使用mget命令后,要执行n次get命令操作具体耗时如下:

                n次get时间 = 1次网络时间 + n次命令时间


incr数字运算

incr命令用于对值做自增操作,返回结果分为三种情况:

  • 值不是整数,返回错误。
  • 值是整数,返回自增后的结果。
  • 键不存在,按照值为0自增,返回结果为1.

incr key

除了incr命令,

  • Redis提供了decr(自减)、
  • incrby(自增指定数字)、
  • decrby(自减指定数字)、
  • incrbyfloat(自增浮点数)
append追加指令

append可以向字符串尾部追加值

append key value

strlen字符串长度

返回字符串长度

strlen key

注意:每个中午占3个字节

getset设置并返回原值

getset和set一样会设置值,但是不同的是,它同时会返回键原来的值

getset key value

setrange设置指定位置的字符

下标从0开始计算。

setrange key offset value

getrange截取字符串

getrange截取字符串中的一部分,形成一个子串,需求指明开始和结束的偏移量,截取的范围是个闭区间。

getrange key start end

命令的时间复杂度

字符串这些命令中,

        除了del、mset、mget支持多个键的批量操作,时间复杂度和键的个数相关,为O(n),

        getrange和字符串长度相关,也是O(n),

        其余的命令基本上都是O(1)的时间复杂度,在速度上还是非常快的。

使用场景

        字符串类型的使用场景很广泛:

  •  缓存功能

        Redis作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。

  • 计数

        使用Redis作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。

  • 共享Session

        一个分布式Web服务将用户的Session信息(例如用户登录信息)保存在各自服务器中,这样会造成一个问题,处于负载均衡的考虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可能会发现需求重启登录,这个问题是用户无法容忍的。

        为了解决这个问题,可以使用Redis将用户的Session进行集中管理,在这种模式下只要保证Redis是高可用和扩展性的,每次用户更新或者查询登录信息都直接从Redis中集中获取。

  • 限速

        比如,很多应用处于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率,例如一分钟不能超过5次。一些网站限制一个IP地址不能在一秒钟之内访问超过n次也可以采用类似的思路。

哈希(Hash)

        Java里提供了HashMap,Redis中也有类似的数据结构,就是哈希类型。但是要注意,哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值。

操作命令

基本上,哈希的操作命令和字符串的操作命令很类似,很多命令在字符串类型的命令前面加上了h字母,代表是操作哈希类型,同时还要指明操作的field的值。

hset设值

如果设置成功会返回1,反之会返回0. 此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

 hset key field value [field value ...]

hget取值

如果键或field不存在,会返回nil。

hget key field

hdel删除field

hdel会删除一个或多个field,返回结果为成功删除field的个数。

hlen计算field个数

hmset批量设值

hget批量取值

hexists判断field是否存在

若存在返回1,不存在返回0

hkeys获取所有field

它返回指定哈希键所有的field

hvals获取所有value

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

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

相关文章

通过华为鲲鹏认证发行上市的集成平台产品推荐

华为鲲鹏认证是技术实力与品质的权威象征&#xff0c;代表着产品达到了高标准的要求。从技术层面看&#xff0c;认证确保产品与华为鲲鹏架构深度融合&#xff0c;能充分释放鲲鹏芯片的高性能、低功耗优势&#xff0c;为集成平台的高效运行提供强大动力。在安全方面&#xff0c;…

使用 AMD GPU 实现 Segment Anything

Segment Anything with AMD GPUs — ROCm Blogs 作者&#xff1a; Sean Song 发布日期&#xff1a;2024年6月4日 介绍 分割任务——识别图像中哪些像素属于某对象——是计算机视觉中的一个基础任务&#xff0c;应用广泛&#xff0c;从科学图像分析到照片编辑。Segment Anyth…

Spring Cloud Stream实现数据流处理

1.什么是Spring Cloud Stream&#xff1f; 我看很多回答都是“为了屏蔽消息队列的差异&#xff0c;使我们在使用消息队列的时候能够用统一的一套API&#xff0c;无需关心具体的消息队列实现”。 这样理解是有些不全面的&#xff0c;Spring Cloud Stream的核心是Stream&#xf…

无人机飞手入门指南

无人机飞手入门指南旨在为初学者提供一份全面的学习路径和实践建议&#xff0c;帮助新手快速掌握无人机飞行技能并了解相关法规知识。以下是一份详细的入门指南&#xff1a; 一、了解无人机基础知识 1. 无人机构造&#xff1a;了解无人机的组成部分&#xff0c;如机身、螺旋桨…

使用Mac下载MySQL修改密码

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区&#xff0c;进行下载 然后选择community sever下载 这里就是要下载的界面&#xff0c;如果需要下载之前版本的话可以点击archives&#xff0c; 可能会因为这是外网原因&#xff0c;有时候下…

两大新兴开发语言大比拼:Move PK Rust

了解 Move 和 Rust 的差异有助于开发者根据项目的具体需求选择最合适的语言。选择不恰当的语言可能会导致项目后期出现技术债务。不同语言有其独特的优势。了解 Move 和 Rust 的差异可以帮助开发者拓展技术视野&#xff0c;发现不同语言在不同领域的应用潜力。 咱们直奔主题&a…

three.js 对 模型使用 视频进行贴图修改材质

three.js 对 模型使用 视频进行贴图修改材质 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyapplication&idvideoModel import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GLTFLoad…

【论文分享】利用多源大数据衡量街道步行环境的老年友好性:以中国上海为例

本次给大家带来一篇SCI论文的全文翻译&#xff01;该论文考虑了绿化程度、可步行性、安全性、形象性、封闭性和复杂性这六个指标&#xff0c;提出了一种基于多源地理空间大数据的新型定量评价模型&#xff0c;用于从老年人和专家的角度评估街道步行环境的老年友好程度&#xff…

计算机网络安全 —— 对称加密算法 DES (一)

一、对称加密算法概念# ​ 我们通过计算机网络传输数据时&#xff0c;如果无法防止他人窃听&#xff0c; 可以利用密码学技术将发送的数据变换成对任何不知道如何做逆变换的人都不可理解的形式&#xff0c; 从而保证了数据的机密性。这种变换被称为加密&#xff08; encryptio…

6.C操作符详解,深入探索操作符与字符串处理

C操作符详解&#xff0c;深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾&#xff1a; C语言是什么&#xff1f;编程界的‘常青树’&#xff0c;它的辉煌你不可不知VS 2022 社区版C语言的安装教程&#xff0c;不要再卡在下载0B/s啦C语言入门&#xff1a;解锁基础…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配

Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据&#xff0c;此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输&#xff0c;而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

论文复现_How Machine Learning Is Solving the Binary Function Similarity Problem

1. 内容概述 前言&#xff1a;此代码库支持 USENIX Security 22 论文 《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff0c;作者包括 Andrea Marcelli 等人&#xff0c;提供了相关代码、数据集和技术细节。 关键内容&#xff1a;技术报告…

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

【WPF】Prism学习(六)

Prism Dependency Injection 1.依赖注入&#xff08;Dependency Injection&#xff09; 1.1. Prism与依赖注入的关系&#xff1a; Prism框架一直围绕依赖注入构建&#xff0c;这有助于构建可维护和可测试的应用程序&#xff0c;并减少或消除对静态和循环引用的依赖。 1.2. P…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具&#xff0c;下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…