Redis - String相关命令

目录

  • set
  • get
  • mset
  • mget
  • setnx、setex、psetex
  • incr、incrby、decr、decrby、incrbyfloat
  • append
  • getrange
  • setrange
  • strlen
  • 字符串类型编码方式
  • 总结

Redis - String

Redis存储的字符串,是直接按二进制方式存储,不会做任何编码转换,存的是什么,取出来的就是什么

set

set命令的完整体

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

Redis语法格式说明:

[] 表示一个独立的单元,表示可选项,|表示或者

ex 表示设置超时时间,单位是秒,px也是设置超时时间,单位是毫秒

set key value ex 10

相当于

set key value ex 10
expire key 10

NX表示:如果key不存在才设置,如果key存在就不设置(返回nil)

XX表示:如果key存在才设置,如果key不存在就不设置(返回nil)

另外,如果key不存在,会创建新的键值对,如果key存在,会把旧的value覆盖掉,可能会改变原来的数据类型,key设置的ttl也会失效

使用案例:
在这里插入图片描述

get

get只支持字符串类型的value,如果value是其他类型,使用get获取会出错
在这里插入图片描述

mset

一次设置多个key的值

mset key value [key value...]

在这里插入图片描述

时间复杂度O(N),N指的是命令中key的个数

mget

一次获取多个key的值,如果value不是字符串类型的,返回nil

mget key [key...]

在这里插入图片描述

时间复杂度O(N),N指的是命令中key的个数

setnx、setex、psetex

setnx:不存在才能设置,存在则设置失败

setnx key value

在这里插入图片描述

setex:设置value的同时,设置过期时间(单位秒)

setex key seconds value

在这里插入图片描述

psetex:设置value的同时,设置过期时间(单位毫秒)

psetex key milliseconds value

在这里插入图片描述

incr、incrby、decr、decrby、incrbyfloat

  • incr:针对value+1,key对应的value必须是整数(64位范围内),返回值是 +1 之后的值
incr key

在这里插入图片描述

如果key不存在,就把这个key的value当做0

在这里插入图片描述

  • incrby:针对value+n
incrby key increment

在这里插入图片描述

如果key不存在,就把这个key的value当做0

在这里插入图片描述

n也可以是负数

在这里插入图片描述

  • decr:针对value-1,key对应的value必须是整数(64位范围内),返回值是 -1 之后的值
decr key

在这里插入图片描述

如果key不存在,就把这个key的value当做0

在这里插入图片描述

  • decrby:针对value-n
decrby key increment

在这里插入图片描述

  • incrbyfloat:针对value +小数或者value-小数

在这里插入图片描述

​ 这个命令没有减法版本,但是可以加负数,并且使用Redis进行的计数操作一般是整数

上述时间复杂度都是O(1),多个客户端针对同一个key进行incr操作,不会引起线程安全问题

append

如果key已经存在,并且value是String类型,这个命令会将value追加到原有的value后面。如果key不存在,效果相当于set,返回值是追加后的字符串的长度

append key value

在这里插入图片描述
在这里插入图片描述

append返回值的单位长度是字节,Redis不会对字符编码做处理,设置的是什么,获取的就是什么

在这里插入图片描述

Xshell终端默认是utf8,所以在终端输入汉字之后也是按照utf8编码的,在utf8中,一个汉字通常是3个字节的,所以在获取的时候,也是utf8编码的,那么如何让Redis获取key对应的value能够显示中文?在启动的时候加上 --raw即可

redis-cli --raw

在这里插入图片描述

getrange

返回key对应的String的子串,由start和end确定(左闭右闭),使用负数表示倒数。-1表示倒数第一个字符,-2表示倒数第二个字符,以此类推如果超过了范围会根据String长度自动调整(下标从0开始)

getrange key start end

在这里插入图片描述

如果value是中文,切出来的可能是不完整的汉字

在这里插入图片描述

setrange

将字符串中的子串进行替换

setrange key offset value

offset表示偏移量,表示从第几个字节开始进行替换,结束的位置是看value的长度,返回值是替换后新的字符串的长度

在这里插入图片描述

如果针对中文字符串进行setrange,可能会出问题

如果key不存在,也是可以进行setrange操作,只不过会把offset之前的内容填充成0x00

在这里插入图片描述

strlen

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

strlen key

在这里插入图片描述

字符串类型编码方式

字符串类型的内部编码方式有3种,包括int、embstr、raw

int:8个字节的长整型

embstr:小于39个字节的字符串

raw:大于39个字节的字符串

Redis会根据当前值的类型和长度动态的决定使用哪种编码方式

在这里插入图片描述

总结

命令效果时间复杂度
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)

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

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

相关文章

优选算法合集————双指针(专题二)

好久都没给大家带来算法专题啦,今天给大家带来滑动窗口专题的训练 题目一:长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …

本地Ollama部署DeepSeek R1模型接入Word

目录 1.本地部署DeepSeek-R1模型 2.接入Word 3.效果演示 4.问题反馈 上一篇文章办公新利器:DeepSeekWord,让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm1001.2014.3001.5501https://blog.csdn.net/qq…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

wsl+phpstorm+xdebug|windows子系统配置phpstorm开发调试|断点调试

安装wsl 安装apache php 安装xdebug扩展,并配置 这里是通过宝塔9.4面板安装的xdebug3.0 [xdebug] xdebug.modedebug xdebug.start_with_requesttrue xdebug.discover_client_hosttrue xdebug.client_host127.0.0.1配置PHPSTORM 注意:新建服务器一定要…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架(简化DOM操作的一个前端框架):基础入门1 Vue基本概念2 快速入门:创建Vue实例,初始化渲染(1)创建一个入门Vue实例(2)插值表达式:{{表…

语言月赛 202412【顽强拼搏奖的四种发法】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 顽强拼搏奖的四种发法 题目描述 在 XCPC 竞赛里,会有若干道题目,一支队伍可以对每道题目提交若干次。我们称一支队伍对一道题目的一次提交是有效的,当且仅当: 在本次提交…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ ├── index.html │ ├── st…

使用Pygame制作“太空侵略者”游戏

1. 前言 在 2D 游戏开发中,“太空侵略者”是一款入门难度适中、却能覆盖多种常见游戏机制的项目: 玩家控制飞船(Player)左右移动,发射子弹。敌人(Enemy)排列成一行或多行,从屏幕顶…

Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注:本文为 “Linux find 命令 | grep 命令使用” 相关文章合辑。 未整理去重。 如何在 Linux 中查找文件 作者: Lewis Cowles 译者: LCTT geekpi | 2018-04-28 07:09 使用简单的命令在 Linux 下基于类型、内容等快速查找文件。 如果你是 W…

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

Spring理论知识(Ⅴ)——Spring Web模块

Spring的组成 Spring由20个核心依赖组成&#xff0c;这20个核心依赖可以分为6个核心模块 Spring Web模块简介 众所周知&#xff0c;Java目前最大的一个用途就是作为Web应用的服务端&#xff08;Java Web&#xff09; Spring又是JavaEE中使用最广泛的开发框架&#xff0…

(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例

&#xff08;1&#xff09; 先介绍下后面的代码里要用到的基础函数&#xff1a; 以及&#xff1a; &#xff08;2&#xff09; 接着给出现代版的 读写 socket 参数的系统函数 &#xff1a; 以及&#xff1a; &#xff08;3&#xff09; 给出 一言的 范例代码&#xff0c;获取…

车载软件架构 --- 软件定义汽车面向服务架构的应用迁移

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境

以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤&#xff0c;通常可以使用流复制&#xff08;Streaming Replication&#xff09;或基于Patroni等工具来实现高可用&#xff0c;以下以流复制为例&#xff1a; 安装PostgreSQL 配置软件源&#xff1a;可以使用O…

机器学习--2.多元线性回归

多元线性回归 1、基本概念 1.1、连续值 1.2、离散值 1.3、简单线性回归 1.4、最优解 1.5、多元线性回归 2、正规方程 2.1、最小二乘法 2.2、多元一次方程举例 2.3、矩阵转置公式与求导公式 2.4、推导正规方程0的解 2.5、凸函数判定 成年人最大的自律就是&#xff1a…

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编&#xff0c;编译后链接即可) 任务1&#xff1a;Uthread: switching between threads (完成) 在这个练习中&#xff0c;你将设计一个用户级线程系统中的上下文切…