string类型的使用以及编码方式

Redis 中所有的键的类型都是字符串类型,⼀个字符串的最⼤值不能超过 512 MB。

由于 Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码。

例如输入你好,查询出来的却是\xe4\xbd\xa0\xe5\xa5\xbd
在这里插入图片描述

常见命令

set

将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。
语法:

 SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

返回值:

  • 如果设置成功,返回 OK。
  • 如果由于 SET 指定了 NX 或者 XX 但条件不满⾜,SET 不会执⾏,并返回 (nil)。
  • NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
  • XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
127.0.0.1:6379> keys *
1) "key1"
2) "key"
127.0.0.1:6379> set key1 1  nx
(nil)
127.0.0.1:6379> set key 1 
OK

get

获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。

127.0.0.1:6379> lpush key2 1  2 3 4
(integer) 4
127.0.0.1:6379> get key2
(error) WRONGTYPE Operation against a key holding the wrong kind of value

语法:

get key

返回值:key 对应的 value,或者 nil 当 key 不存在。

127.0.0.1:6379> get key
"1"
127.0.0.1:6379> get key1
"1"

mset

⼀次性设置多个 key 的值。
语法:

MSET key value [key value ...]

返回值:永远是 OK

127.0.0.1:6379> mset key3 333 key4 444
OK

mget

⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。
语法:

MGET key [key ...]

返回值:对应 value 的列表

127.0.0.1:6379> mget key key1
1) "1"
2) "1"

使⽤ mget / mset 由于可以有效地减少了⽹络时间,所以性能相较更⾼。要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致 Redis 阻塞

setnx

setnx 设置 key-value 但只允许在 key 之前不存在的情况下。
语法:

setnx key value

返回值:1 表⽰设置成功。0 表⽰没有设置。

127.0.0.1:6379> setnx key6 666
(integer) 1

incr

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

incr key

返回值:integer 类型的加完后的数值。

127.0.0.1:6379> incr key
(integer) 2
127.0.0.1:6379> incr key7
(integer) 1

incrby

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

INCRBY key decrement

返回值:integer 类型的加完后的数值。

127.0.0.1:6379> get key3
"333"
127.0.0.1:6379> incrby key3 333
(integer) 666

decr

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

DECR key

返回值:integer 类型的减完后的数值。

127.0.0.1:6379> get key
"2"
127.0.0.1:6379> decr key
(integer) 1

decrby

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

DECRBY key decrement

返回值:integer 类型的减完后的数值。

127.0.0.1:6379> get key3
"666"
127.0.0.1:6379> decrby key3 333
(integer) 333

incrbyfloat

将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数。
语法:

INCRBYFLOAT key increment

返回值:加/减完后的数值。

127.0.0.1:6379> set key7 6.5
OK
127.0.0.1:6379> get key7
"6.5"
127.0.0.1:6379> incrbyfloat key7 0.5
"7"
127.0.0.1:6379> incrbyfloat key7 -1.5
"5.5"

append

如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在,则效果等同于 SET 命令。
语法:

 APPEND KEY VALUE

返回值:追加完成之后 string 的⻓度。

127.0.0.1:6379> set key8 abc
OK
127.0.0.1:6379> append key8 defg
(integer) 7
127.0.0.1:6379> get key8
"abcdefg"

getrange

返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整成正确的值。
语法:

 GETRANGE key start end

返回值:string 类型的⼦串

127.0.0.1:6379> get key8
"abcdefg"
127.0.0.1:6379> getrange key8 0 -1
"abcdefg"
127.0.0.1:6379> getrange key8 2 4
"cde"

setrange

覆盖字符串的⼀部分,从指定的偏移开始。
语法:

 SETRANGE key offset value

返回值:替换后的 string 的⻓度。

127.0.0.1:6379> get key8
"abcdefg"
127.0.0.1:6379> setrange key8 3 abc
(integer) 7
127.0.0.1:6379> get key8
"abcabcg"

strlen

获取 key 对应的 string 的⻓度。当 key 存放的类似不是 string 时,报错。
语法:

 STRLEN key

返回值:string 的⻓度。或者当 key 不存在时,返回 0。

127.0.0.1:6379> strlen key8
(integer) 7

小结:

命令执行效果时间复杂度
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 的值 +1O(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)

内部编码

字符串类型的内部编码有 3 种:

  • int:8 个字节的⻓整型。
  • embstr:⼩于等于 39 个字节的字符串。
  • raw:⼤于 39 个字节的字符串。
    Redis 会根据当前值的类型和⻓度动态决定使⽤哪种内部编码实现。

使用场景

  1. 缓存(Cache)功能
    Redis 作为缓冲层,起到加速读写和降低后端压⼒的作⽤。
  2. 计数(Counter)功能
    视频的播放量计数点赞计数等
  3. 共享会话(Session)
    redis存储session
  4. 短信验证码
    登录时创建验证码设置失效时间,限制用户获取验证码频率等待。

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

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

相关文章

Marin说PCB之电源完整性之直流压降仿真CST--03

本期内容主要讲解的是关于在CST软件上电源直流压降仿真VRM的一些相关参数设置,小编我在之前文章中有说到过如何利用CST仿真电源信号的直流压降,不过有一些问题我这边再去补充一些。 首先就是VRM芯片的设置了,小编我还是按照之前那样设置&…

智能合约 之 ERC-20介绍

什么是ERC20 ERC20全称为Ethereum Request for Comment 20,是一种智能合约标准,用于以太坊网络上的代币发行 姊妹篇 - 如何部署ERC20 ERC20的应用场景 代币化资产,例如:USDT 是一种以美元为背书的ERC20代币,每个USDT代…

如何解决MySQL死锁(看懂MySQL锁日志)

有时候系统在生产运行着,会突然爆出 [40001][1213] Deadlock found when trying to get lock; try restarting transaction 这个时候每个人都会很紧张,因为死锁会影响DB性能,严重时甚至拖垮整个系统。在实际的环境中,很多服务会共…

代码学习记录23--回溯算法第四天

随想录日记part23 t i m e : time: time: 2024.03.19 主要内容:回溯算法在代码学习中尤其重要,所以今天继续加深对其的理解:1:复原IP地址 ;2.子集 ;3.子集II 93.复原IP地…

shopee无货源出单了怎么发货?shopee怎么做无货源?

在Shopee的电商大舞台上,“无货源出单”就像是一场神奇的魔术表演。你的店铺是舞台,买家的订单是观众的掌声,而你,就是那位神秘的魔术师。订单来了,你却没有货?这可不是什么障碍,因为你有着更为…

前端学习从0到1:再见HTML(1)

阅读须知: 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失,均由使用者 本人负责,作者不为此承担任何责任,如…

AI系统性学习05—向量数据库

文章目录 1、Chroma向量数据库1.1 安装Chroma1.2 初始化Chroma客户端1.3 创建一个合集1.4 添加数据1.5 查询数据1.6 持久化数据1.7 集合操作1.7.1 创建集合1.7.2 获取集合1.7.3 删除集合1.7.4 其他操作1.8 向集合添加数据1.9 查询集合数据1.10 更新集合数据1.11 删除集合数据1.…

基于51单片机智能鱼缸控制系统

一、系统方案 1、本设计采用51单片机作为主控器。 2、液晶1602显示。 3、采集温度值,水质大小、水位值、DS1302显示年月日时分秒。 4、自动加热、定时喂食,自动换水、水泵加热。 5、按键设置。 二、硬件设计 原理图如下: 三、单片机软件设…

【教学类-44-08】20240319 “(幼儿用)数字练习簿1.0”(A4版)

背景需求: 我一直想把 “(幼儿用)数字练习簿”的内容复刻出来——这里面的字体始终找不到,是一种已经做成图片的手写数字字体 素材准备: 1、买了一本(幼儿用)数字练习簿,把每一页扫…

网络编程:多点通信+域套接字

一、多点通信 1.网络属性 getsockopt和setsockopt int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); 功能:获取或设置套接字…

SSH服务

目录 一. 熟悉SSH服务 1.1 何为SSH协议 1.2 SSH服务优点 1.3 常见的SSH协议 1.4 SSH服务的功能 1.5 为何使用SSH服务 1.6 SSH服务的工作原理 1.6.1 公钥传输原理 1.6.2 ssh加密通讯原理 1.7 SSH服务的最佳应用场景 1.8 SSH服务远程登录的方式 1.8.1 方法一&#…

自动驾驶决策 - 规划 - 控制 (持续更新!!!)

总目录 Frenet与Cartesian坐标系 Apollo基础 - Frenet坐标系 车辆模型 车辆运动学和动力学模型 控制算法 PID控制器轨迹跟随实现 Pure Pursuit控制器路径跟随 路径跟踪算法Stanley 实现 c 无人驾驶LQR控制算法 c 实现 MPC自动驾驶横向控制算法实现 c 双环PID控制详细讲解 …

【DL经典回顾】激活函数大汇总(二十六)(Identity附代码和详细公式)

激活函数大汇总(二十六)(Identity附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的…

大模型面试题最全总结,没有一道是送分题。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

3月19日做题

[NPUCTF2020]验证🐎 if (first && second && first.length second.length && first!second && md5(firstkeys[0]) md5(secondkeys[0]))用数组绕过first1&second[1] 这里正则规律过滤位(Math.) (?:Math(?:\.\w)?) : 匹配 …

优化器算法SGD、Adam、AdamW等

文章目录 SGDSGD with momentumSGD with Nesterov AccelerationAdaGradRMSpropAdaDeltaAdamAdamW参考资料 假设有: 待优化的目标函数为 f ( w ) f(w) f(w),使用优化算法来最小化目标函数 f ( w ) : a r g m i n w f ( w ) f(w):argmin_wf(w) f(w):argmin…

【Mysql】面试题汇总

1. 存储引擎 1-1. MySQL 支持哪些存储引擎?默认使用哪个? 答: MySQL 支持的存储引擎包括 InnoDB、MyISAM、Memory 等。 Mysql 5.5 之前默认的是MyISAM,Mysql 5.5 之后默认的是InnoDB。 可以通过 show engines 查看 Mysql 支持…

外包2月,技术退步惊现!大专生逆袭大厂,全靠这份神秘资料!

大家好,我是一名大专生,19年通过校招进入湖南某软件公司,从事功能测试工作已近4年。今年8月,我意识到长期舒适的环境让我变得不思进取,技术停滞不前,甚至因此失去了谈了2年的女朋友。我下定决心&#xff0c…

金蝶云星空——插件dll重新发布报错:鏃犳硶鏄剧ず椤甸潰锛屽洜涓哄彂鐢熷唴閮ㄦ湇鍔″櫒閿欒銆�

项目场景: 金蝶插件开发 问题描述 今天更新了插件dll然后重启IIS金蝶就报如下错误: 解决方案: 折腾了一天结果发现是给自己挖坑了,这次更新我担心插件代码有问题就把原dll重命名了然后把最新dll更新到金蝶bin文件中&#xff0c…

【DBC专题】-11-使用Cantools将CAN/CANFD DBC自动生成C语言代码

目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 经典CAN/CANFD DBC自动生成C语言代码 2.1 批处理文件CAN_DBC_To_C.bat内容说明 2.2 经典CAN/CANFD DBC文件要求 2.3 如何使用生…