首页 > 数据库 >三、redis之strings类型

三、redis之strings类型

时间:2024-09-16 19:46:33浏览次数:8  
标签:set seconds redis value 命令 字符串 key 类型 strings

strings是redis中使用最多的类型。

redis官网中是这么描述strings的:

Redis strings store sequences of bytes, including text, serialized objects, and binary arrays. 

可以看到Redis strings保存的是sequences of bytes,也就是字节序列。不仅可以保存字符串,而且还可以保存二进制数据,比如图片,音频,视频等。可以看到Redis strings可以满足大多数场景。

现在来看下操作strings的命令:

因为存的是字符串和数字,同一个操作会产生不同的影响,所以对存的值分类。

存的值是字符串

get

get命令获取key对应的值。

set

SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]

set命令将key和value绑定关系并设置到内存中。

set命令还有NXXX选项。NX表示当key对应的值不存在时执行的命令才会执行。XX表示key对应的值存在时执行的命令才会执行。

key1对应的值已存在,所以set加NX命令不会改变数据。

key2没有数据时,set加NX才会实际执行。

当key1有数据时,set加XX才会实际执行。

当key3没有数据时,set加XX不会实际执行。

set命令后面的EX seconds|PX milliseconds是加过期时间,EX是以秒为单位,PX是以毫秒为单位。

数据过期后就获取不到了。

setnx

SETNX key value

setnx命令和set命令加nx选项作用相同。

setex

SETEX key seconds value

setex命令和set命令加EX seconds选项相同。

PSETEX

PSETEX key milliseconds value

setex命令和set命令加PX milliseconds选项相同。

setex,PSETEX执行后等数据过期后都查询不到。

get命令只能一次获取一个key的数据,如果想要一次获取多个key的数据,可以使用mget命令。

有同时获取多个key的命令,应该也有同时设置多个key,value的命令,那就是mset

MSET key value [key value ...]

可以看到mset命令要比set命令简单,没有set命令的选项。

msetnx

MSETNX key value [key value ...]

当所有的key都不存在时才会执行命令。

当其中一个key存在数据时不会执行命令。

GETSET

GETSET key value

GETSET返回执行此命令key之前的值,并且设置新值value。

APPEND

APPEND key value

APPEND将value附加到原先的值之后。如果原先没有值就创建它。

GETEX

GETEX key [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|PERSIST]

GETEX获取值并设置过期时间。EX seconds|PX milliseconds与set命令的含义相同。

GETDEL

GETDEL key

返回value并删除key。

GETRANGE

GETRANGE key start end

返回start和end之间的子串。

如果start大于end则返回空串.start和end可以使用负数.-1表示最后一个位置.

只要start和end的范围可以在key之间取到值就可以.从上面可以看到-10已经超过key4的长度了,但还是可以正常返回.

SUBSTR

SUBSTR key start end

SUBSTR和GETRANGE命令相同,但是SUBSTR只能使用0和正整数,不能使用负数.

SETRANGE

SETRANGE key offset value

SETRANGE从offset开始将数据覆盖为value.如果offset超过key的长度,那么超出的部分设置为空字符串.

STRLEN

STRLEN返回key对应值的长度.

LCS

LCS key1 key2 [LEN] [IDX] [MINMATCHLEN min-match-len] [WITHMATCHLEN]

返回key1,key对应的值的最长公共子序列.比如"foo"和"fao"的最长公共子序列是"fo",不要求连续.LCS对于评估两个字符串的相似程度非常有用。字符串可以代表很多东西。例如,如果两个字符串是DNA序列,LCS将提供两个DNA序列之间相似性的度量。如果字符串表示某个用户编辑的某些文本,则LCS可以表示新文本与旧文本的差异,以此类推。

返回匹配的文本:

只返回匹配的长度:

有时还需要返回匹配的位置:

因为匹配算法是从后往前匹配的,所以要反着看.

2) 1) 1) (integer) 2
     2) (integer) 3
  2) 1) (integer) 0
     2) (integer) 1

2,3表示key1中第一个连续匹配的字符串的开始下标和结束下标(从0开始).0,1表示key2中第一个连续匹配的字符串的开始下标和结束下标(从0开始)

要将匹配列表限制为给定最小长度的匹配:

最后还带有匹配长度:

英文采用的是ASCII编码,用一个字节可以表示所有的符号,但是对于中文则不同,要用多字节表示.比如:

所以对于中文,操作每个字符时与操作每个字节是不同的,需要注意.

存的值是数字

因为数字是可以运算的.所以要对数字特殊处理.redis提供的数字操作很简单.

INCR key
INCRBY key increment
INCRBYFLOAT key increment
DECR key
DECRBY key decrement

INCR,INCRBY,INCRBYFLOAT是加法运算,DECR,DECRBY是减法运算.INCR,DECR是加一或减一,INCRBY,DECRBY加或减后面给定的整数,INCRBYFLOAT加一个给定的小数.

当INCRBY,DECRBY的参数不是整数时会报错.

当然虽然是整数,但是也可以使用操作字符串的命令

存的值是二进制数据

在控制台运行:

cat 1.jpg | redis-cli -x set key6

将1.jpg的内容存到key6中.

也可以使用操作字符串的命令,最好还是采用专业的工具操作.

编码方式

最后来看下字符串在redis中采用的编码方式:

如果是数字则采用int编码,如果字符串的长度小于等于44则采用embstr,否则采用raw.那为什么要采用不同的编码呢? 主要是为了节省使用的空间.比如数字23,采用int编码会保存为C语言的long类型,一般是4字节或8字节,采用embstr则是3字节,C语言的字符串还需结尾字符\0.看起来没有节省空间,但是当数字特别大时,比如123456789,就看出差距了.

标签:set,seconds,redis,value,命令,字符串,key,类型,strings
From: https://www.cnblogs.com/shigongp/p/18415995

相关文章

  • 【Java+GDAL】读取shp文件图层几何类型
    文章目录前言一、GDAL和Java版本二、代码实现1.引入gdal环境2.代码实现3.ogrConstants中的几何类型总结前言今天继续Java+GDAL,之前写的几篇处理shp的文章包括:【Java+GDAL】读取shp文件的坐标信息(坐标系+EPSG码)【Java+GDAL】shp新增属性字段与删除属性字段【Java......
  • 语言的新类型
    编程语言默认提供的类型显然不能满足人类的需要,定义新类型是高级编程语言必须解决的事情。大部分编程语言提供形如结构体或者类,枚举也是一种简单的新类型。C/C++提供宏定义的方式可以用文本替换的方式引入”新类型”,同时也提供typedef定义新类型。C#也可以用宏#define,但不能......
  • 初探九型人格:掌握不同类型的人格特质
    九型人格的不同类型2号人格—给予者:争取得到他人支持,避免被他人反对。对自己的重要性感到骄傲。“他们没有我不行”。1号人格—完美主义者:内心的正确标准变成严格的自我要求。不断产生自责的思想。有一种强迫性需要,只接受正确的事情。7号人格—享乐主义者:需要保持高度......
  • 深入理解redis删除策略和淘汰策略
    1、redis的删除策略Redis是一种内存级数据库,数据都存在内存中,但是针对于已经过期的数据,reids不会立刻删除只是会存储在 expires 中,当执行删除策略的时候,才会从expires中寻找对应的数据存储的地址,在存储空间中找到对应的数据进行删除。数据删除其实就是内存和CPU占用之间寻......
  • 深入理解Redis锁与Backoff重试机制在Go中的实现
    目录Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论在构建分布式系统时,确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制,能够帮助我们在多进程或分布式环境中同步访问共享资源。本文将深......
  • 【Go开发】Go语言基本语法入门:数据类型与方法定义
    文章目录环境准备一、引言二、Var关键字三、数据类型1.整型符号表示值的范围2.浮点型精度范围性能3.布尔型4.字符串三、变量声明1.指定变量类型2.自动推导类型3.批量声明四、方法定义五、总结环境准备开发环境:MacOSGo版本:goversiongo1.23.1darwin/am......
  • 06_Python数据类型_元组
    Python的基础数据类型数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合元组元组(Tuple)是一种不可变的序列类型,与列表类似,但有一些关键的区别。本质:只读的列表(list)定义元组元组是由圆括号()包围的元素集合,元素之间用逗号分隔。元组一旦创建,其内......
  • redis主从环境搭建
    准备系统环境:Linuxubuntu4.15.0-62-generic下载redis-6.2.4.tar.gz(官网下载即可)解压编译redistar-xvfredis-6.2.4.tar.gzcdredis-6.2.4make环境准备三个redis服务,一主二从(安装在本地所以用127.0.0.1,此版本从服务器用replica):127.0.0.1:6379master127.......
  • 编程日记 后端使用redis
    编程日记后端使用redis问题:在写伙伴匹配系统的时候,要使用redis存储数据,需要在xml文件中设置spring.session.tore-type=redis但是3.x版本的spring不再有这个参数。那么怎么设置是否使用redis存储呢?只要导入了org.springframework.session包那就启用,不导入就不启用https://www.......
  • C++ decltype 类型知识符
    希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。decltype(f())sum=x;//sum的类型就是函数f的返回类型编译器并不实际调用函数f,而是使用当调用发生时f的返回值类型作为sum的类型。decltype处理顶层const和引用的方式与auto有些许不同......