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

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

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

相关文章

通过Python爬虫提升网站搜索排名

目录 怎么使用Python爬虫提升排名 1. 抓取竞争对手数据: 2. 关键词研究: 3. 网页内容优化: 4. 内部链接建设: 5. 外部链接建设: 6. 监测和调整: 需要注意哪些方面 1. 合法性和道德性: …

Flv格式视频怎么转MP4?视频格式转换方法分享

FLV格式的视频是一种早期的视频格式,不支持更高的分辨率和比特率,这意味着视频的清晰度和质量受限制,无法很好地保留细节和质量,这种格式的视频已经逐渐被更高质量的视频格式所替代,例如MP4格式,不仅具有很…

Java基础(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历待排序序列,依次比较相邻的元素并交换位置,使得每次遍历后最大(或最小)的元素冒泡到序列的末尾。具体步骤如下&a…

SpringBoot+Mybatis-Plus实现增删改查超详细步骤

目录 一、介绍 二、前期准备工作 (一) 创建springboot项目和创建数据库 三、项目配置 (一)pom.xl导入相关依赖 1.导入依赖 (二)yml文件中配置连接数据库 2.配置yml文件 四、代码的编写 数据库展…

推断统计(配对样本t检验)

根据题目我们也可以看出配对样本 t 检验是用来检验两配对正态总体的均值是否存在显著差异的一种假设检验方法,虽然是两组数据但是其来自同一部分个体在两个时间段内的测试数据,是同一部份个体! 进行配对样本 t 检验之后也是分别做出原假设和备…

ADC实验

查看VR1链接的丝印&#xff1a;XadcAIN3 设置相关寄存器 使用的是通道3&#xff0c;要设置相应的通道寄存器 #include "exynos_4412.h"int main() {unsigned int AdcValue 0;/*将ADC的精度设置成 12bit*/ADCCON ADCCON | (1 << 16);/*使能ADC的分频器*…

SAP ABAP 直接把内表转换成PDF格式(smartform的打印函数输出OTF格式数据)

直接上代码&#xff1a; REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001. DATA: ls_tab TYPE zpps001.ls_tab-werks 1001. ls_tab-gamng 150.00. ls_tab-gstrp 20201202. ls_tab-aufnr 000010000246. ls_tab-auart 标准生产. ls_tab-gltrp 20201205. ls_tab-matn…

荣耀X40 GT真机调试APP,HBuilder X刷新不到设备

今天使用荣耀X40GT进行真机调试App的时候&#xff0c;hbuilder怎么都刷不出来设备&#xff0c;经历一番风雨最终连接成功&#xff0c;特此记录一下。 我的设备Android版本12&#xff0c;MagicOS版本7.0&#xff0c;进行了如下配置&#xff1a; 1、打开“设置”-》“系统和更新”…

keil5突然编译输出框build output 不见了

今天keil5突然编译输出框build output 不见了&#xff0c;但可以编译和下载。 首先尝试&#xff0c;在view里面打开和关闭build output window&#xff0c;没有反应&#xff1b; 其次&#xff0c;点击window-reset view to defaults&#xff0c;果然build output又恢复了&#…

数据结构---图

这里写目录标题 图的基本概念和术语基本概念和术语1基本概念和术语2 图的类型定义抽象数据类型定义二级目录二级目录 一级目录二级目录二级目录二级目录二级目录二级目录二级目录 图的基本概念和术语 基本概念和术语1 V代表顶点的有穷非空集合 E代表边的有穷集合 n为顶点 有向…

数据结构与算法-栈(LIFO)(经典面试题)

一&#xff1a;面试经典 1. 如何设计一个括号匹配的功能&#xff1f;比如给你一串括号让你判断是否符合我们的括号原则&#xff0c; 栈 力扣 2. 如何设计一个浏览器的前进和后退功能&#xff1f; 思想&#xff1a;两个栈&#xff0c;一个栈存放前进栈&…

Python爬虫之解决浏览器等待与代理隧道问题

作为专业爬虫程序员&#xff0c;我们往往需要应对一些限制性挑战&#xff0c;比如浏览器等待和使用代理隧道。在Python爬虫开发中&#xff0c;这些问题可能会导致我们的爬虫受阻。本文将为你分享解决这些问题的方案&#xff0c;帮助你顺利应对浏览器等待和代理隧道的挑战&#…

【vue3】固定上导航栏和左侧导航栏,只显示其他内容在主内容区域

实现思路&#xff1a; 在一个单独的vue组件文件中只写出上导航栏和左侧导航栏的内容将你想要展示的页面主内容写到单独的组件中在index.js写路由&#xff0c;将【想要展示的页面主内容的路由】作为【子路由】写在【只写出上导航栏和左侧导航栏的路由】的下面&#xff1b; 在el…

Oracle 开发篇+Java通过共享模式访问Oracle数据库

标签&#xff1a;共享服务器进程、shared server process释义&#xff1a;shared server process是Oracle的一种数据库连接技术&#xff0c;类似的还有专用模式和DRCP ★ 数据库配置 alter system set shared_server_sessions1 scopespfile; alter system set max_shared_serv…

AIGC|AGI究竟是什么?为什么大家都在争先入场?

一、AI大语言模型进入爆发阶段 2022年12月ChatGPT突然爆火&#xff0c;原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式&#xff0c;但是它的内容化水平非常强大&#xff0c;甚至在某些方面已经超过人类了&#…

运动控制系统::几篇大佬的文章

运动规划 - 知乎 (zhihu.com) 运动规划、运动控制 & 运动感知 - 知乎 (zhihu.com)

电脑屏幕闪烁?别慌!解决方法在这!

“我新买了一台电脑&#xff0c;还没用几天呢&#xff0c;就出现了电脑屏幕闪烁的情况&#xff0c;这让我感到很烦躁。有什么方法可以解决电脑屏幕闪烁的问题呢&#xff1f;” 使用电脑的过程中&#xff0c;我们不难发现电脑屏幕有时候会出现闪烁的情况&#xff0c;这会导致使用…

vscode|pycharm + docker + python

1&#xff0c;docker run的时候要加上port docker run -it --gpusall -p 2222:22 -v /挂载目录/:/docker 目录1/ -v /挂载目录/:/docker 目录2/ --namexxx image:v2 /bin/bash 2&#xff0c;docker 内部要安装ssh 2.1方法命令&#xff1a; apt-get update apt-get install…

使用蓝牙外设却不小心把台式机电脑蓝牙关了

起因 今天犯了一个贼SB的错误&#xff0c;起因是蓝牙键盘突然就不能输入了&#xff08;虽然是连接状态&#xff0c;但是按什么键都没有反应&#xff09; 原来我的解决方法就是重启一下电脑&#xff0c;但是那会电脑开了贼多的软件。我就想重启也太麻烦了&#xff0c;既然重启…

一文读懂c++语言

一文读懂C语言 C的发展C的设计目标C的特性C的挑战 C的发展 C是一种通用的、高级的编程语言&#xff0c;它是C语言的扩展。C由Bjarne Stroustrup于1983年首次引入&#xff0c;并在之后的几十年中不断发展壮大。C被广泛应用于各种领域&#xff0c;包括系统开发、游戏开发、嵌入式…