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.mzph.cn/bicheng/16259.shtml

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

相关文章

Jenkins--从入门到入土

Jenkins–从入门到入土 文章目录 Jenkins--从入门到入土〇、概念提要--什么是CI/DI?1、CI(Continuous Integration,持续集成)2、DI(DevOps Integration,DevOps 集成)3、解决的问题 一、Jenkins安…

world machine学习笔记(4)

选择设备: select acpect: heading:太阳的方向 elevation:太阳的高度 select colour:选择颜色 select convexity:选择突起(曲率) select height:选择高度 falloff&a…

用常识滚雪球:拼多多的内生价值,九年的变与不变

2024年5月22日,拼多多公布了今年一季度财报,该季度拼多多集团营收868.1亿元,同比增长131%,利润306.0亿,同比增长了202%,数据亮眼。 市场对拼多多经历了“看不见”、“看不懂”、“跟不上”三个阶段。拼多多…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章:Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音:/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中,可以使用Slider视图创建一个滑动条,允许用户从范围中选择一个值。通过系统提供的Slider,用起来也很方便。 Slider 先看一个最简单的初始化方法: State private var sliderValue: Float 100var body: some View {V…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网: https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 ,占用空间 在Windows系统中,可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下: 1.打开系统…

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

数据结构(五)

数据结构&#xff08;五&#xff09; 常见的排序算法内部排序交换插入选择归并基数 外部排序基于归并的 常见的排序算法 内部排序 交换 冒泡&#xff1a;每一次运行总会将最小的或者最大的放到前面&#xff0c;如果需要交换&#xff0c;一直在交换 快速排序*&#xff1a;经过…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

【操作系统】发展与分类(手工操作、批处理、分时操作、实时操作)

2.操作系统发展与分类 思维导图 手工操作阶段&#xff08;此阶段无操作系统&#xff09; 需要人工干预 缺点&#xff1a; 1.用户独占全机&#xff0c;资源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批处理阶段&#xff08;操作系统开始出现&#x…

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置&#xff0c;学习如何操作计算相机中心与电批中心的偏移量&#xff0c;以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮&#xff0c;进入CCD设置界面。 主界面 CCD参数设置界面 1…

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

推荐13款常用的Vscode插件,提高前端日常开发效率

1. Live Server Live Server 插件是一个用于前端开发的扩展&#xff0c;它的主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。其最大特点在于热重载&#xff0c;即开发者可实时预览代码效果。 因为Live Server 允许开发者在浏览器中实时预览您正…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错&#xff1a;System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS&#xff0c;Windows Server 2012不支持…

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完电视剧《天道》之后购买本书&#xff0c;断断续续一直没有读完。 非常好奇&#xff0c;一个什么样的作者能写出如此奇书。老丁&#xff0c;一个智者&#xff0c;智者是多么孤独&#xff0c;因为找不到同…

信息安全等级保护测评: 登陆日志

文章目录 引言I 登录日志表结构设计II 日志处理2.1 封装日志入库2.2 收集登陆信息2.3 查询接口引言 等保测评是信息安全等级保护测评的简称,是对信息和信息载体按照重要性等级分级别进行检测、评估的过程。 背景:近期AIS监控平台(网页版)等保测评,发现没有登陆日志,现要…

从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池

文章目录 文章导图什么是CompletableFutureCompletableFuture用法总结API总结 为什么使用CompletableFuture场景总结 CompletableFuture默认线程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 线程池ThreadPerTaskExecutor线程池Completab…