当前位置: 首页 > news >正文

Redis数据类型-string

Redis-string类型

  • Redis中的数据类型
  • 全局命令
    • get&set
      • redis中变量设置的过期时间是如何检测的
    • keys
    • exists
    • del
    • expire
    • ttl
    • pexpire
    • pttl
    • type
  • string数据类型的底层的数据结构
  • 操作string类型的常用命令
    • get&set
    • mset&mget
    • setnx
    • setex
    • psetex
    • incr&decr
    • incrby&decrby
    • incrbyfloat
    • apend
    • getrange
    • setrange
    • strlen
  • string类型的使用场景
    • 作为缓存
    • 作为计数器
    • 共享会话
    • 手机验证码

Redis中的数据类型

🚀在redis中,数据是采用键值对(key-value)的方式进行存储的,并且key的类型只能是string类型,而对于value的类型常用的有以下几种,{string,hash,list,set,zset},以list为例,意思就是说虽然redis中的所有数据都是以key-value形式组织的,但这个value有许多类型,拿list来说这个value就是一个列表。例如,我们存储了一个变量它的key是mylist,那么它的value是这样组织的:[1,2,3,4,5],这是一个列表,里面有1,2,3,4,5这五个元素。

全局命令

get&set

🚀首先说明get和set并不是全局的命令,这两个命令是用于操纵string类型的。在这里引出这两个命令主要是为方便掩饰其他的全局命令。
在这里插入图片描述
最简单的使用方法就是set key value,例如:set name “张三”。

  • NX:key不存在才设置,否则不设置
  • XX:key存在才设置,否则不设置
  • EX:给变量一个过期时间,例如,使用redis实现手机验证码功能,那么这个过期时间就会派上用场。EX设置的过期时间是以秒为单位的。
  • PX:用PX设置的过期时间是以毫秒为单位的。

在这里插入图片描述
🚀get命令十分简单,就是根据key返回其对应的value即可,如果不存在返回nil。

set name "张三" # 设置一个变量key为name,value为张三
get name       # 获取key为name的变量的value的值

在这里插入图片描述

可以看到,我们在get name的时候,我们想看到的是张三显示在屏幕上,但是显示的却是遗一串16进制的串。这是因为redis是不涉及编码方式的,也就是说在redis看来都是二进制,没有什么编码方式,所以导致中文的显示就会有些问题。
在启动redis客户端的时候,加上 --raw选项,此是redis客户端就会尝试对二进制数据进行解释。
redis-cli --raw。

在这里插入图片描述

redis中变量设置的过期时间是如何检测的

  • 定期删除

redis每次抽取一部分,进行时间的验证,保证抽取的时间足够快。这是因为redis是一个单线程服务的模型,处理任务,扫描任务等都是一个线程来完成的,如果抽取/验证的时间过长可能导致正常的处理请求就会被阻塞住。

  • 惰性删除:

假设某个key的过期时间已经到了,但是redis暂时还没有将它删除,紧接着后面一次访问,正好用到了这个key,那么redis就会将这个key进行删除,然后返回nil。

keys

🚀用于查询当前服务器上匹配的key。通过一些特殊分符号来描述key的模样,匹配这些描述信息的key就会被查询出来。
在这里插入图片描述
在这里插入图片描述

?:匹配任意一个字符
*:匹配任意一个或者多个字符
[a,b,c]:匹配a/b/c中的任意一个
[^a,b,c]:匹配除了a/b/c外的其他字符
[a-e]:匹配一个范围,可以匹配a到e之间的字符,闭区间。

exists

🚀判断某个key是否存在。
在这里插入图片描述
返回key存在的个数,如果只查询一个key,那么如果这个key存在就返回1,如果不存在那么就返回0。如果查询多个key,那么就返回存在的key的个数。
在这里插入图片描述

del

🚀删除指定的key,返回成功删除的key的个数。
在这里插入图片描述
在这里插入图片描述

expire

🚀给key指定一个过期时间。
在这里插入图片描述
在这里插入图片描述

NX:只有当这个key不存在过期时间的时候,才会被设置。
XX:只有当这个key存在过期时间的时候,才会被设置。
GT:只有当设置的新的过期时间比当前这个大,才会被设置。
LT:只有当设置的新的过期时间比当前这个小,才会被设置。

ttl

🚀查看变量key的过期时间。返回的就是还剩的过期时间,如果不存在过期时间就返回-1。
在这里插入图片描述

pexpire

🚀与expire类似,就是设置的过期时间单位是毫秒。
在这里插入图片描述

pttl

🚀与pexpire搭配使用,查看key当前的过期时间。
在这里插入图片描述

type

🚀返回变量的数据类型。
在这里插入图片描述
在这里插入图片描述
这个类型是key对应的value的类型,因为key的类型只能是string。

string数据类型的底层的数据结构

🚀在redis中string这种数据类型,在底层时间的时候采用的是哪种数据结构呢?

底层结构描述
embstr对短字符串的优化,当字符串的长度较小时
int8bytes的int类型,当value的值为整形值的时候
raw正常的字符串实现

操作string类型的常用命令

get&set

🚀在上面已经提到了,这里就不做过多的叙述。

mset&mget

🚀一次可以同时操作多个变量同set和get相比。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
返回多个key所对应的value值,如果key不存在那么就返回nil。
在这里插入图片描述

setnx

🚀相当于对set命令的加强,setnx key value = set key value nx。如果key不存在才会设置这个键值对,否则不会设置这个键值对。
在这里插入图片描述

setex

🚀setex是对set命令和expire命令的集成,在设置一个变量的同时也设置了其过期时间。这里的过期时间默认是以秒为单位的。
在这里插入图片描述

psetex

🚀psetex同setex是相似的,区别就是设置的过期时间是以毫秒为单位的。
在这里插入图片描述

incr&decr

🚀incr要求key对应的value必须是整数,作用就是将value的值变为value+1,然后返回+1之后的值。如果key不存在,那么就创建这个key,并将其value设为0。
在这里插入图片描述
在这里插入图片描述
🚀decr与incr相对应,是将value的值变为value-1。其他细节与incr相类似。
在这里插入图片描述

incrby&decrby

🚀incrby和decrby其实是对incr和decr的加强,它们的作用是将value的值变为value + n/value - n。其他细节与上述类似。
在这里插入图片描述
在这里插入图片描述

incrbyfloat

🚀这条命令与上述的略微有些不同,就是将key对应的value值变为value +/- 某个小数值。当key不存在的时候,就创建这个key并且对应value的值为0。
在这里插入图片描述
在这里插入图片描述

apend

🚀对key对应的value的内容后面追加上一个字符串,如果key不存在,那么效果等同于set key value。返回值为操作后value对应的长度(单位字节)。
在这里插入图片描述
在这里插入图片描述

getrange

🚀获取key对应value的某个区间的字串。区间[start,end]是闭区间,并且单位是字节。
在这里插入图片描述
在这里插入图片描述

setrange

🚀设置key对应value的某一段,如果key不存在,那就创建key,value的前 offset -1 字节会被0字节填充,然后在offset字节开始填充新的字符串。返回值为操作后value对应的长度,单位仍然是字节。
在这里插入图片描述
在这里插入图片描述

strlen

🚀返回key对应value的字符串的长度,单位是字节。如果字符串不存在,那就返回0。
在这里插入图片描述
在这里插入图片描述

string类型的使用场景

作为缓存

🚀redis最常用的一个作用就是作为缓存来减轻关系型数据库,例如:MySQL的压力的。当流量很大时,MySQL可能承受不住这么巨大的流量,导致服务崩溃。redis作为缓存,就是我们在查询某个字段的时候,先去缓存中查询,缓存中不存在再去MySQL中查询,并且在MySQL中查询到此数据之后,还要将此数据放到缓存中,还要为其设置一定的热点事件,防止redis中的数据量过大。

作为计数器

🚀例如,记录某一视频的播放量、点赞数量、评论数量等。但是redis不擅长做数据的统计,像在MySQL中一条SQL语句就能,根据某个字段进行排序。

共享会话

🚀通常,服务器在为客户端提供服务的时候,会为每个客户端创建一个Session对象(通常与Cookies搭配使用),但是在这种分布式系统中,不再是单机架构,我的客户端这次的请求会打到这台服务器上,下次可能就会打到下一个服务器上了,所以将Session存储到某台服务器上是不合理的,通常存储在redis中,为多台服务器共同使用。

手机验证码

🚀手机验证码通常都有一个过期时间,利用redis就很容易实现,在产生一个验证码的时候,在redis中设置这个变量并且设置其过期时间,当过期时间一到redis就会删除这个变量,那么也就意味着这个验证码已经过期了。

相关文章:

Redis数据类型-string

Redis-string类型 Redis中的数据类型全局命令get&setredis中变量设置的过期时间是如何检测的 keysexistsdelexpirettlpexpirepttltype string数据类型的底层的数据结构操作string类型的常用命令get&setmset&mgetsetnxsetexpsetexincr&decrincrby&decrbyinc…...

【HDFS】一天一个RPC系列--updatePipeline

updatePipeline这个RPC一般都会配合updateBlockForPipeline RPC一起使用。 先updateBlockForPipeline、然后再updatePipeline。 建议先阅读【HDFS】一天一个RPC系列–updateBlockForPipeline 本文目标是弄清楚以下问题: 弄清updatePipeline这个RPC的作用。弄清updatePipeli…...

CentOS 7 上使用 wget 安装 Nginx 并设置开机自启

在 CentOS 7 上使用 wget 安装 Nginx 并设置开机自启,你可以按照以下步骤进行操作: 首先,确保你已经以 root 用户或者具有 sudo 权限的用户身份登录到 CentOS 7。 安装 Nginx 所需的依赖包。在终端中运行以下命令: sudo yum inst…...

Android源码设计模式解析与实战第2版笔记(一)

第一章 走向灵活软件之路 — 面向对象的六大原则 优化代码的第一步 — 单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP。 SRP:就一个类而言,应该仅有一个引起它变化的原因。 一个类中应该是一组相关性很…...

HTML+JavaScript-06

节点操作 目前对于节点操作还是有些困惑&#xff0c;只是了解简单的案例 具体操作可以看菜鸟教程&#xff1a;https://www.runoob.com/js/js-htmldom-elements.html 案例-1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8…...

单元测试——题目十二

目录 题目要求: 定义类 测试类 题目要求: 根据下列流程图编写程序实现相应处理,执行j=10*x-y返回文字“j1=:”和计算值,执行j=(x-y)*(10⁵%7)返回文字“j2=:”和计算值,执行j=y*log(x+10)返回文字“j3=:”和计算值。 编写程序代码,使用JUnit框架编写测试类对编写的…...

详解:大数据信用报告信用等级怎么看?

在大数据技术的加持之下&#xff0c;金融风控也逐渐运用大数据技术了&#xff0c;也就是我们说的大数据或者大数据信用&#xff0c;在大数据信用报告中对个人的综合信用风险有着等级划分&#xff0c;那大数据信用报告信用等级怎么看呢?本文为你详细介绍一下&#xff0c;感兴趣…...

rsync命令常用参数详解

1、语法 Usage: rsync [OPTION]… SRC [SRC]… DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST:DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST::DEST or rsync [OPTION]… SRC [SRC]… rsync://[USER]HOST[:PORT]/DEST or rsync [OPTION]… [USER]HOST:SRC [DEST] or r…...

基于SpringBoot实现策略模式提供系统接口扩展能力

相信我们对策略模式都有耳闻&#xff0c;但是可能不知道它在项目中具体能有什么作用&#xff0c;我们需要在什么场景下才能去尽可能得去使用策略模式。 这里我简单的列出一个我之前在公司做的一个需求&#xff1a;跟第三方oa系统对接接口&#xff0c;对方需要回调我们当前系统…...

v43-47.problems

1.for循环 一般地&#xff0c;三步走&#xff1a; for&#xff08;初始化&#xff1b;表达式判断&#xff1b;递增/递减&#xff09; &#xff5b; ....... &#xff5d; 但是&#xff0c;如果说声明了全局变量&#xff0c;那么第一步初始化阶段可以省略但是要写分号‘ ; ’…...

华为HCIP Datacom H12-831 卷14

多选题 1、以下哪些Community属性可以保证BGP路由条目的传播范围只在AS内? A No_Export B No_Export_Subconfed C Interne D No_Advertise 正确答案 A,B 解析:Internet:缺省情况下,所有的路由都属于internet团体。具有此属性的路由可以被通告给所有的BGP对等体。n…...

《vtk9 book》 官方web版 第3章 - 计算机图形基础 (1 / 6)

计算机图形是数据可视化的基础。从实际角度来看&#xff0c;可视化是将数据转换为一组图形基元的过程。然后使用计算机图形的方法将这些基元转换为图片或动画。本章讨论了基本的计算机图形原理。我们首先描述了光线和物体如何相互作用形成我们所看到的景象。接下来&#xff0c;…...

负载均衡是什么,负载均衡有什么作用

一、什么是负载均衡 负载均衡是一种在计算机网络和系统架构中使用的技术&#xff0c;用于均衡分发工作负载到多个资源&#xff0c;比如&#xff1a;服务器、计算节点或存储设备上&#xff0c;以提高系统的性能、可伸缩性。 在传统的单个服务器架构中&#xff0c;当请求量增加…...

Leetcode 3020. Find the Maximum Number of Elements in Subset

Leetcode 3020. Find the Maximum Number of Elements in Subset 1. 解题思路2. 代码实现 题目链接&#xff1a;3020. Find the Maximum Number of Elements in Subset 1. 解题思路 这一题我做的是比较水的&#xff0c;首先就是统计下array当中各个元素出现的频次&#xff0…...

【Vue2 + ElementUI】更改el-select的自带的下拉图标为倒三角,并设置相关文字颜色和大小

效果图 实现 <template><div class"search_resources"><div class"search-content"><el-select class"search-select" v-model"query.channel" placeholder"请选择" change"handleResource&q…...

TensorFlow2实战-系列教程5:猫狗识别任务数据增强实例

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、猫狗识别任务 import os import warnings warnings.filterwarnings("ignore&…...

Unity中URP下额外灯角度衰减

文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数&#xff1a;spotDirection.xyz2、_AdditionalLightsSpotDir3、参数&#xff1a;lightDirection4、参数&#xff1a;distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…...

BKP备份寄存器、RTC实时时钟

目录 1. BKP (Backup Registers)备份寄存器 2. RTC (Real Time Clock)实时时钟 1. BKP (Backup Registers)备份寄存器 BKP可用于存储用户应用程序数据。当VDD (2.0-3.6V)电源被切断,他们仍然由VBAT (1.8-3.6V)维持供电。当系统在待机模式下被唤醒&#xff0c;或系统复位或…...

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…...

微服务-微服务Spring-cloud-open-feign

1. LoadBalancerRestTemplate的缺陷 LoadBalancerRestTemplate进行微服务调用 BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}//调用方式String url "http://mall-order/order/findOrderByUserId/"id;R result restTemplate.…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...