6.Redis之String命令

1.String类型基本介绍

redis 所有的 key 都是字符串,

value 的类型是存在差异的~~

一般来说,redis 遇到乱码问题的概率更小~~

Redis 中的字符串,直接就是按照二进制数据的方式存储的.

(不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文,就会失败~~】,存的是啥,取出来就还是啥)

【不仅仅可以存储文本数据~~整数~~普通的文本字符串~~JSON~~xml~~二进制数据(图片,视频,音频....)(音频视频 体积可能会比较大~~Redis 对于 string 类型,限制了大小最大是 512M
Redis 单线程模型,希望进行的操作都能比较快速)】

2.set&get

2.1 set

  • redis 文档给出的语法格式说明:
  • []相当于一个独立的单元.
  • 表示可选项 (可有可无的)
  • 其中|表示"或者"的意思,多个只能出现一个,
  • []和[]之间,是可以同时存在的.
  • 如果 key 不存在,创建新的键值对,
  • 如果 key 存在, 则是让新的 value 覆盖旧的 value.
  • 可能会改变原来的数据类型,原来这个 key 的 ttl(生存时间) 也会失效
  • flash all清除所有的数据库-对应MySQL的drop database

2.2 get

get key

对于 GET 来说, 只是支持,字符串类型的 value.
如果 value 是其他类型, 使用 GET 获取就会出错!!

3.mset&mget

一次操作多组键值对。

可以提高效率 但也不要一次添加太多 会导致阻塞

4.SETNX&SETEX&PSETEX

  • SETNX不存在才能设置.存在则设置失败~
  • 返回值:1 表⽰设置成功。0 表⽰没有设置。
  • SETEX设置 key 的过期时间,单位是秒
  • PSETEX设置 key 的过期时间,单位是毫秒
     

5.incr&incrby&decr&decrby

incr

针对 value + 1

INCR将 key 对应的 string 表⽰的数字加⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。

  • 命令有效版本:1.0.0 之后
  • 时间复杂度:O(1)
  • 返回值:integer 类型的加完后的数值。

incrby

针对 value + n

decr

针对 value -1

key 对应的 value 必须是整数,在 64位的范围内,如果这个 key 对应的value不存在则当做 0 来处理
decr 的运算结果,也是计算之后的值

decrby

针对 value -n    

incrbyfloat

  • 把 key 对应的 value 进行 +-运算,运算的操作数可以是浮点数。
  • 只能用加上负数的形式来实现减法~~
  • 虽然此处没有提供减法版本的命令,但是使用 redis 进行的计数操作,一般都是针对整数来进行的
  • 上述操作的时间复杂度,都是 O(1)
  • 由于 redis 处理命令的时候,是单线程模型,多个客户端同时针对同一个 key 进行 incr 操作,不会引起"线程安全”问题 

6.APPEND

  • 字符串,也支持一些常用的操作.
  • 拼接, 获取/修改 字符串的部分内容,获取字符串长度

append

 

  • append 返回值, 长度的单位是 字节!!
  • redis 的字符串,不会对字符编码做任何处理,(redis 不认识字符,只认识字节)
  • 当前咱们的 xshell 终端,默认的字符编码是 utf8
  • 在终端中输入汉字之后,也就是按照 utf8 编码的~~
  • 1个汉字在 utf8 字符集中, 通常是 3 个字节的~
  • 在启动 redis 客户端的时候,加上一个 --raw 这样的选项就可以使 redis 客户端能够自动的把二进制数据尝试翻译
  • 操作 linux 的时候, 千万注意,不要乱按 ctrl +s
    ctrl +s在 xshell 中的作用是"冻结当前画面"
    ctrl + q 解除冻结~~

7.GETRANGE

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表 倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整成正确的值。
  • 由 start 和 end 确定(左闭右闭)
  • redis 中指定的区间, 是闭区间!!!
  • C++ 和 Java 中,谈到一个区间,大多都是 前闭后开(左闭右开)编程这个大圈子中,区间大多是前闭后开~~ 但是确实有特殊情况~~
  • 正常下标都是 从 0 开始的整数,
  • redis 的下标是可以支持负数的~~
  • -1 倒数第一个元素.(Python 也是允许下标为 负数 的,此处的 规则 和 python 的设定是一致的)
  • 下标为 len-1 的元素
  • 如果字符串中保存的是汉字,此时进行子串切分,很可能切出来的就不是完整的汉字了~~
  • 上述的代码,是强行切出了中间的四个字节.
  • 随便这么一切,切出的结果在 utf8 码表上不知道能査出啥了~~
  • 上述问题,在 C++ 中同样存在
    Java 中就没事~
    Java 中字符串的基本单位,是字符(ava 的字符, 占2 个字节的字符),帮我们把汉字的编码转换C++中字符串的基本单位是字节~~
  • Java 中相当于 String 帮我们把汉字的编码转换C++中字符串的基本单位是字节~~都处理好了~~
  • C++这里头对于汉字的处理,是没那么完善的就需要程序猿手动处理了~~

8.SETRANGE  

覆盖字符串的⼀部分,从指定的偏移开始。
语法:
SETRANGE key offset value
  • 时间复杂度:O(N), N 为 value 的⻓度. 由于⼀般给的 value ⽐较短, 通常视为 O(1).
  • 返回值:替换后的 string 的⻓度。
  • 如果当前咱们 value 是一个中文字符串.进行 setrange 的时候, 是可能会搞出问题的!
  • \x转义字符,16进制
  • 凭空生成了一个字节,这个字节里的内容就是 0x00
  • aaa 就被追加到 0x00 的后面了
    setrange 针对 不存在的 key 也是可以操作的.不过会把 offset 之前的内容填充成0x00

9.STRLEN

  • 获取 key 对应的 string 的⻓度。单位是字节。
  • 当 key 存放的类似不是 string 时,报错。
  • C++中,字符串的长度本身就是用字节为单位,
    Java 中,字符串的长度则是以字符为单位的.
  • Java 中的一个 char ==2 字节~~
    Java 中的 char 基于 unicode 这样的编码方式
    就能够表示中文等符号~~
  • MySQL 的时候.
    varchar(N)
    此处 N 的单位就是字符. mysq! 中的字符,也是完整的汉字
    这样的一个字符,也可能是多个字节~~ 
  • 一个汉字通常是 3 个字节呀~~(编码方式是 utf8)Java 里头咋一个 2 字节的 char 就能表示汉字呢??【1个汉字几个字节是针对编码方式而言的】
  • Java 中的 char 是用的 unicode.一个汉字使用两个字节的Java 中的 String, 则是用的 utf8.一个汉字就是3 个字节了Java 的标准库内部, 在进行上述的操作过程中,程序猿一般是感知不到编码方式的变换的~~

 10.小节

命令执⾏效果时间复杂度
set key value [key value...]设置 key 的值是 valueO(k), k 是键个数
get key获取 key 的值O(1)
del key [key ...]删除指定的 keyO(k), k 是键个数
mset key value [key value
...]
批量设置指定的 key 和 valueO(k), k 是键个数
mget key [key ...]批量获取 key 的值O(k), k 是键个数
incr key指定的 key 的值 +1

O(1)

decr key指定的 key 的值 -1O(1)
incrby key n指定的 key 的值 +nO(1)
decrby key n指定的 key 的值 -nO(1)
incrbyfloat key n指定的 key 的值 +nO(1)
append key value指定的 key 的值追加 valueO(1)
strlen key获取指定 key 的值的⻓度O(1)
setrange key offset value覆盖指定 key 的从 offset 开始的部分值
O(n),n是字符 串⻓度, 通常视 为O(1)
getrange key start end获取指定 key 的从 start 到 end 的部分值
O(n),n 是字符串⻓度, 通常视为 O(1)

 

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

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

相关文章

VMware创建虚拟机

1.自定义 2.选择硬件兼容性 3.创建一个空白硬盘 4.选择操作系统和版本 5.设置虚拟机名称以及安装位置 6.处理器配置 7.设置虚拟机内存 8.设置网络类型 8.选择IO控制器 9.选择磁盘类型 10.创建一个新硬盘 11.设置磁盘容量以及磁盘个数 12.设置磁盘文件名称(默认) 13.点击完成创建…

IDEA快速生成类注释和方法注释的方法

1.生成类、接口、枚举、注解等文件的注释,不仅仅是class 2.生成方法注释的 可在方法上方空行输入/** 按enter键快速生成。生成的样式如下: PS:生成的返回值带一堆英文文字说明,感觉没必要 如果想生成比较全面的方法注释,如作者&…

子线程无法访问父线程中通过ThreadLocal设置的变量

一、引出结论 学习过ThreadLocal的童鞋都知道,在子线程中,是无法访问父线程通过ThreadLocal设置的变量的。 package thread;/*** author heyunlin* version 1.0*/ public class ThreadLocalExample {public static void main(String[] args) throws In…

毕设 大数据校园卡数据分析

文章目录 0 前言1 课题介绍2 数据预处理2.1 数据清洗2.2 数据规约 3 模型建立和分析3.1 不同专业、性别的学生与消费能力的关系3.2 消费时间的特征分析 4 Web系统效果展示5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设…

脑机接口习题

9-12章习题 填空题 EEG电极分为 主动电极 和 被动电极 ,其中 被动电极 直接与放大器连接, 主动电极 包含一个1~10倍的前置放大。除抗混淆滤波器,放大系统也包含由电阻器、电容器构成的模拟滤波器,把信号频率内容限制在一个特定的…

【QGIS入门实战精品教程】10.7: 基于DEM的地形因子分析(坡度、坡向、粗糙度、山体阴影、耐用指数)

文章目录 一、加载dem二、山体阴影三、坡度四、坡向五、地形耐用指数六、地形位置指数七、地表粗糙度一、加载dem 二、山体阴影 方法一:符号系统 利用符号系统中的山体阴影,渲染出阴影效果。 方法二:山体阴影工具 该算法计算输入中的数字化地形模型的山体阴影。根据太阳的位…

MFC密码对话框之间数据传送实例(源码下载)

新建一个login工程项目对话框,主对话框IDD_LOGIN_DIALOG中一个显示按钮IDC_BUTTON1、一个密码按钮IDC_BUTTON2。添加一个密码对话框IDD_DIALOG1,添加类password,在对话框中添加一个编辑框IDC_EDIT1、一个确定按钮IDC_BUTTON1。 程序功能&…

Flask和Django的对比

文章目录 1. 简介FlaskDjango 2. 安装和创建项目FlaskDjango 3. URL路由FlaskDjango 4. 数据库支持FlaskDjango 5. 管理后台FlaskDjango 6. 总结 Flask和Django都是Python Web框架,它们在开发Web应用程序时都能提供强大的功能。本文将对这两个框架进行对比&#xff…

2024目前网上最火短剧机器人做法,自动搜索发剧 自动更新资源 自动分享资源

目前整个项目圈子很多的短剧机器人,我写的,自动搜索发剧,自动更新资源,自动分享资源,前段时间大部分做短剧的都是做的短剧分成,我的一个学员做的30W播放量才200块收益,备受启发,我就…

VUE3视频播放器 videojs-player/vue

简介 官网: https://gitcode.com/surmon-china/videojs-player/overviewhttps://github.com/surmon-china/videojs-player?tabreadme-ov-file video-player是一个基于video.js的视频播放器组件,它提供了丰富的功能,包括视频播放、暂停、快…

MySQL——优化

全文搜索最慢 EXPLAIN select * from city; 范围搜索 EXPLAIN select * from city where ID>5 and ID<20; 主键查询 EXPLAIN select * from citywhere ID5; 索引查询 EXPLAIN select * from citywhere CountryCodeNLD; 普通查询 EXPLAIN select * from city where Nam…

【yolov10】使用自己的数据集训练目标检测模型

【yolov10】使用自己的数据集训练目标检测模型 一、anaconda安装二、环境配置三、数据集制作1、labelimg的安装2、使用labelimg 四、正片1、下载yolov10源码2、数据集目录3、训练4、推理 一、anaconda安装 直接参考前一篇博客&#xff1a; https://blog.csdn.net/m0_71523511/…

【计算机毕业设计】基于SSM+Vue的新能源汽车在线租赁管理系统【源码+lw+部署文档】

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;新能源汽车在线租赁当然也不能排除在外。新能源汽车在线租赁是以实际运用为开发背景&#xff0c;运用软件工程开发方法&…

文本处理工具grep及sed

文章目录 一、grep文本处理工具二、sed文本处理工具基本用法sed脚本格式搜索替代 一、grep文本处理工具 选项含义-color对匹配到的文本着色显示-m 次数匹配到规定的次数后停止-v显示不被命令匹配到的行,即取反-i忽略字符大小写-n显示匹配的行号-c统计匹配的行数-o仅显示匹配到…

aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑

背景&#xff1a; 有学员朋友在学习马哥的分屏pip自由窗口专题时候&#xff0c;做相关分屏做小桌面项目时候&#xff0c;因为原来课程版本是基于android 13进行的讲解的&#xff0c;但是现在公司已经开始逐渐进行相关的android 14的适配了&#xff0c;但是android 14这块相比a…

Linux服务升级:Predixy 升级代理 Redis-cluster 集群

目录 一、实验 1.环境 2. 启动Redis服务 3.Predixy 升级代理 Redis-cluster 集群 二、问题 1. Predixy进行set操作报错 2.如何创建脚本启动predixy 3.Redis代理对比 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本节点软件IP备注CentOS7.9Redis…

嵌入式全栈开发学习笔记---C语言笔试复习大全22

目录 结构体 结构体的声明 定义结构体变量 访问结构体成员进行初始化 通过结构体变量名访问结构体成员 结构体指针 结构体指针的定义 通过结构体指针访问结构体成员 结构体数组 结构体数组的定义 遍历结构体数组 结构体的长度&#xff08;笔试重点&#xff09; 上一…

就业班 第三阶段(ELK) 2401--5.20 day1 ELK 企业实战 ES+head+kibana+logstash部署(最大集群)

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

上门服务系统开发|东邻到家系统|上门服务系统开发流程

上门服务小程序的开发流程是一个复杂且精细的过程&#xff0c;涉及到需求分析、设计规划、开发实施、测试验收以及上线运营等多个环节。下面将详细介绍上门服务小程序的开发流程&#xff0c;帮助读者全面了解并掌握其中的关键步骤。 一、需求分析 在开发上门服务小程序之前&am…

2024年全国大学生电工数学建模竞赛B题解析 | 数据处理 代码 论文分享

B 题&#xff1a;大学生平衡膳食食谱的优化设计及评价 1 数据预处理2 问题一2.1 问题1.12.1.1 评价体系的构建2.1.2 指标计算2.1.3 指标计算结果2.1.4 基于层次分析法的膳食营养评价模型2.1.5 评价模型的求解 2.2 问题1.22.2.1 食物与成分间拓扑关系的构建2.2.2 微调模型的建立…