Redis——String类型详解

概述

Redis中的字符串直接按照二进制的数据存储,不会有任何的编码转换,因此存放什么样,取出来的时候就什么样。而MySQL默认的字符集是拉丁文,如果插入中文就会失败

Redis中的字符串类型不仅可以存放文本数据,还可以存放整数,JSON,xml,图片,视频,音频等等(但是音频视频的体积很大,Redis中对String类型限制大小为512mb)

常用命令

SET

通过自动补全可以看到set命令的完整语法
在这里插入图片描述
Redis文档中语法格式说明:

符号解释
[ ]代表可选项,[ ]和[ ]之间可以同时存在
|代表或者的意思,多个|只能出现一个

value后面的ex|px代表着过期时间
也就是说

set key value ex 10

等价于

set key value
expire key 10

通过简化代码数量,减少网络通信的次数,提升显效率
并且,一句代码还可以保证原子性,Redis分布式锁中会有所体现,后面的blog会详细讲解
在这里插入图片描述
除此以外,还可以这样写set命令

setnx
setex

如果key存在,新的value覆盖了旧的value,数据的类型可能会被改变,key的生存时间也会失效

演示代码

使用flushall可以清除Redis中所有key
在这里插入图片描述

ex

在这里插入图片描述

nx

在这里插入图片描述

xx

在这里插入图片描述

setnx

setnx key seconds

在这里插入图片描述

setex

setex key value seconds

在这里插入图片描述

psetex

psetex key millionseconds

在这里插入图片描述

GET

获取key对应的value
在这里插入图片描述
需要注意的是,get只适用于字符串类型,如果是其他类型则会报错
在这里插入图片描述

MSET

在这里插入图片描述

一次插入多个键值对,key和value交替写,时间复杂度O(N),N是key的数量

MGET

在这里插入图片描述
一次获取多个value,时间复杂度O(N),N是key的数量
在这里插入图片描述

增减命令

将string类型的value当作数字,进行加减操作,时间复杂度都是O(1)

命令操作
incrvalue + 1
incrbyvalue + n
decrvalue - 1
decrbyvalue - n
incrbyfloatvalue +/- 小数

incr

incr key

此时的key必须是一个64位内的整数,操作的返回值就是value+1后的结果(相当于++i)
在这里插入图片描述
如果key不是合理整数则报错
在这里插入图片描述
如果直接incr一个不存在的key,那么就会把这个key的value当作0
在这里插入图片描述

incrby

incrby key increment

在这里插入图片描述
同理,如果针对一个不存在的key进行incrby,那么会将这个key的value当作0处理

decr

逻辑和incr一致

decr key 

decrby

逻辑和incrby一致

decrby key decrement

incrbyfloat

其他逻辑和incrby一致,但是由于没有decrbyfloat,因此只能通过incrbyfloat key -n的操作来实现减法

incrbyfloat key increment

append

如果key存在,拼接key对应的value和给定字符串的内容,返回拼接完的字符串有多少个字节(utf8中的一个汉字通常是3个字节)

append key value

在这里插入图片描述
如果key不存在,那么和直接使用set一样
在这里插入图片描述
如果插入汉字,取出的时候客户端不会自动翻译二进制数据,而是将二进制转换为十六进制
在这里插入图片描述
可以在Redis启动的时候加上–raw的选项,就可以解决上述问题了,退出Redis使用ctrl + d
在这里插入图片描述

getrange

相当于Java中的substring,切分value中的部分字符串,范围由start和end确定(左闭右闭区间)

Redis中的下标从1开始,并且支持负数,如果是-1那就代表倒数第一个元素 = len - 1

getrange key start end

在这里插入图片描述
但是,由于中文一般是3个字节,那么在使用getrange后,切割的结果可能不是一个完整的汉字了
在这里插入图片描述

setrange

将字符串中的部分子串替换为别的内容,返回值是替换之后的字符串长度

setrange key offset value

其中的offset是从第几个字节开始替换,替换的长度就是value的长度
在这里插入图片描述
如果对一个不存在的key进行setrange,并不会报错,而是在偏移量之前添加空字节0x00
在这里插入图片描述

同样的,如果value是一段中文,那么setrange可能会出错

strlen

获取字符串的长度,单位是字节,如果value不是string类型,则报错,如果key不存在,返回0

strlen key

在这里插入图片描述

String的编码方式

编码方式说明
int64位/8字节的整数
embstr压缩字符串 小于等于39个字节的字符串
raw普通字符串 大于39个字节的字符串

通过object encoding key可以查看对应key的编码方式
在这里插入图片描述
在Redis中,存储小数其实和存储一个字符串一样,因此每次对小数进行算数操作,都需要把字符串转换为小数,然后再进行计算,算完再转为小数
在这里插入图片描述

string类型的应用场景

作为缓存直接返回数据

在这里插入图片描述
上述策略中,随着时间推移,越来越多的key从mysql中存入Redis,使Redis的数据变得过多,那么有如下两种解决方案

  1. 设置key的过期时间
  2. Redis提供淘汰策略

计数功能

在这里插入图片描述
Redis中只记录视频的播放次数,并且异步同步数据到统计数据的数据库

共享会话

在这里插入图片描述
http中的cookie是用来实现用户信息的保存的,其需要session的配合完成。服务器这边存储了用户的数据,而cookie是让浏览器存储用户的身份标识(sessionId)

但如果应用了分布式系统,存在多个应用服务器。与用户登录时可能将用户会话信息存储在a服务器中,但是用户下次访问请求可能发送到c服务器中,而c服务器中没有用户的会话信息

解决方法是:所有的服务器都把用户的会话信息存放在Redis中

手机验证码

服务器将用户的手机号当作key,验证码当作value存放在Redis中,并设置过期时间,用户在指定时间内提交验证码给服务器,服务器通过手机号向Redis获得正确的验证码,并与用户发送过来的进行比对,返回true或false

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

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

相关文章

实现自己的“妙鸭相机“,十分钟学会roop插件

9.9买不了吃亏,9.9买不了上当,只要9.9就可以拥有属于自己的艺术写真 但是不知道你是否注意到用户协议中 有这一条 "我方在全世界(包括元宇宙等虚拟空间)范围内享有永久的、不可撤销的、可转让的、可授权的、免费的和非独家的许可&#x…

【日常积累】HTTP和HTTPS的区别

背景 在运维面试中,经常会遇到面试官提问http和https的区别,今天咱们先来简单了解一下。 超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果…

16.3.2 【Linux】程序的管理

程序之间是可以互相控制的。举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序, 你既然可以让她关闭或启动,当然就是可以控制该程序。 使用kill-l或者是man 7 signal可以查询到有多少个signal。主要的讯号代号与名…

smardaten实战丨谁说无代码不能开发出漂亮的门户首页?

一、需求背景 门户首页对于一个公司或组织来说是一个极其重要的网站页面,它可以作为访问者了解和获取相关信息的入口,同时也是展示品牌形象和吸引目标受众的重要工具。 开发一个门户首页需要开发团队在向访问者展示关于公司或组织基本信息的基础上&…

使用Edge和chrom扩展工具(GoFullPage)实现整页面截图或生成PDF文件

插件GoFullPage下载:点击免费下载 如果在浏览网页时,有需要整个页面截图或导出PDF文件的需求,这里分享一个Edge浏览器的扩展插件:GoFullPage。 这个工具可以一键实现页面从上到下滚动并截取。 一、打开“管理扩展”(…

Linux下在qtcreator中创建qt程序

目录 1、新建项目 2、单工程项目创建 3、多工程项目创建 4、添加子工程(基于多工程目录结构) 5、 .pro文件 1、新建项目 切换到“编辑”界面,点击菜单栏中的“文件”-“新建文件或项目” 2、单工程项目创建 只有一个工程的项目&#…

中间件(二)dubbo负载均衡介绍

一、负载均衡概述 支持轮询、随机、一致性hash和最小活跃数等。 1、轮询 ① sequences:内部的序列计数器 ② 服务器接口方法权重一样:(sequences1)%服务器的数量(决定调用)哪个服务器的服务。 ③ 服务器…

MAUI+Blazor:windows 打包踩坑

文章目录 前言MSIX安装文件如何发布选择Windows平台旁加载自定义签名版本号安装 总结 前言 最近打算研究一下MAUIBlazor,争取在今年年底之前彻底搞懂MAUIBlazor的安装模式, MSIX安装文件 Windows 4种安装程序格式MSI,EXE、AppX和MSIX优缺点…

Unity zSpace 开发

文章目录 1.下载 zSpace 开发环境1.1 zCore Unity Package1.2 zView Unity Package 2. 导入工程3. 发布设置4.功能实现4.1 用触控笔来实现对模型的拖拽: 5. 后续更新 1.下载 zSpace 开发环境 官网地址 1.1 zCore Unity Package zSpace 开发核心必须 1.2 zView …

4.文件操作和IO

文章目录 1.认识文件1.1树型结构组织 和 目录1.2文件路径(Path)1.3其他知识 2.Java 中操作文件2.1File 概述2.1.1属性2.1.2构造方法2.1.3方法 2.2代码示例2.2.1示例1-get 系列的特点和差异2.2.2示例2-普通文件的创建、删除2.2.3示例3-普通文件的删除2.2.…

Jenkins-CICD-python/Java包升级与回退

Jenkins- CICD流水线 python/Java代码升级与回退 1、执行思路 1.1、代码升级 jenkins上点击 upgrade和 代码版本号 --${tag} jenkins 推送 代码 和 执行脚本 到目标服务器/opt目录下 执行命令 sh run.sh 代码名称 版本号 upgrade 版本号 来自jenkins的 构建参数中的 标签…

【LNMP(分布式)】

目录 一、LNMP是什么 二、实际步骤 1.启用虚拟机 1.1 启动三台虚拟机分别命名为nginx,mysql,php 1.2 分别配置基础环境 1.3 测试外网连通性 2.更新源 3.安装nginx并配置 3.1 下载nginx源码包并安装 3.2 配置nginx 4.安装mysql并配置 4.1 安装…

MySQL中事务特性以及隔离机制

目录 一、什么是事务 二、事务特性——即ACID特性 三、事务的隔离级别 1、脏读 2、不可重复读 3、幻读 Read uncommitted: Read committed: Repeatable read: Serializable: 一、什么是事务 事务(Transaction)——一个最…

Maven 基础之依赖管理、范围、传递、冲突

文章目录 关于依赖管理坐标和 mvnrepository 网站pom.xml 中"引"包 依赖范围依赖传递依赖冲突 关于依赖管理 坐标和 mvnrepository 网站 在 maven 中通过『坐标』概念来确定一个唯一确定的 jar 包。坐标的组成部分有&#xff1a; 元素说明<groupId>定义当前…

Nacos权限认证

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

Uniapp当中使用腾讯位置路线规划插件保姆教学

首先我们在使用腾讯地图插件之前我们需要先做几点准备 1&#xff1a;我们需要在腾讯地图位置服务当中注册账号以及在控制台当中创建应用和创建key 这里在创建应用当中应用类型一定要选出行类型&#xff0c;否则后期可能会出现问题。 我们创建完应用之后&#xff0c;点击创建…

NPCon:AI模型技术与应用峰会北京站 (参会感受)

8月12日&#xff0c;我有幸参加了在北京皇家格兰云天大酒店举行的“AI模型技术与应用峰会”。 这次会议邀请了很多技术大咖&#xff0c;他们围绕&#xff1a; 六大论点 大模型涌现&#xff0c;如何部署训练架构与算力芯片 LLM 应用技术栈与Agent全景解析 视觉GPU推理服务部署 …

python命令行参数argparse的简单使用

1、终端中执行脚本程序 pycharm的终端中执行 python xxx.py命令行中执行程序 2、获取命令行输入的参数 import sysprint(sys.argv) 3.专门处理命令行的library&#xff1a;argparse 添加optional arguments参数&#xff1a;默认是可选的&#xff0c;意味着可以不用填写 p…

VR时代真的到来了?

业界对苹果的期待是&#xff0c;打造一台真正颠覆性的&#xff0c;给头显设备奠定发展逻辑底座的产品&#xff0c;而实际上&#xff0c;苹果只是发布了一台更强大的头显。 大众希望苹果回答的问题是“我为什么需要一台AR或者VR产品&#xff1f;”&#xff0c;但苹果回答的是“…

history记录日期时间和日志记录操作

history命令能查看到操作日期和时间的配置方法&#xff1a; 1&#xff09;在/etc/profile文件中添加一行&#xff1a; export HISTTIMEFORMAT"%F %T whoami " 2&#xff09;保存后&#xff0c;执行加载命令&#xff1a; source /etc/profile 3&#xff09;然后检…