欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Redis字符串string常用命令总结

时间:2023-07-10

Redis中文官网命令大全
笔者Redis字符串数据结构源码分析文章推送:Redis 5.0数据结构之SDS简单动态字符串实现源码详解

string常用命令汇总 命令语法语义setset key value [EX|PX time] [NX|XX]将键key设定为value值。如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,可以选用EX或PX来指定键key的过期时间,可以选用NX或XX来指定键key不存在或存在时才执行命令getget key返回键key的value,如果key不存在,返回nil如果键key的value不是string,就返回错误msetmset key value [key value …]set的复数操作版本,将键keys设定为values值mgetmget key [key …get的复数操作版本,返回键keys的values值,对于不存在的键key和非string类型的value值,一律返回nilsetexsetex key seconds value将键key设定为value值,并且设置键在seconds秒后过期psetexpsetex key milliseconds value将键key设定为value值,并且设置键在milliseconds毫秒后过期setnxsetnx key value将键key的值设为value值,当目标键key不存在时效果等同于set,键key存在时什么也不做msetnxmsetnx key value [key value …]setnx的复数操作版本,只要键keys中任一key存在,则msetnx一个set操作也不会执行setrangesetrange key offset value覆盖键key原value值的一部分,offset是原value起始位置,新的value值从offset位置开始覆盖getrangegetrange key start end返回键key的子串,子串为value值在start和end区间内的部分getsetgetset key value将键key的value值返回,并使用传入新value值覆盖。如果key存在但是对应的value不是字符串,就返回错误strlenstrlen key返回键key的value值长度,如果value值非string类型则返回错误appendappend key value如果键key存在,则将新value值追加到原value值的结尾,如果键key不存在,则创建一个空字符串键key后执行追加操作incrincr key键key的value值自增1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误incrbyincrby key increment键key的value值自增increment ,如果value值非string类型或其存储的字符串不能表示为整数则返回错误decrdecr key键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误decrbydecrby key decrement键key的value值自减1,如果value值非string类型或其存储的字符串不能表示为整数则返回错误命令演示 setget系列 set和get

可以使用set方法创建一个键并设置value值或者改变现有键key的value值,2.6.12版本以后Redis为set添加了如下几个可选选项:

EX seconds – 设置键key的过期时间,单位时秒PX milliseconds – 设置键key的过期时间,单位时毫秒NX – 只有键key不存在的时候才会设置key的值XX – 只有键key存在的时候才会设置key的值

有了以上几个可选选项后,可以使得单独的set命令就具有setex、setnx等命令的功能。当set执行成功时,此前键key设置的过期时间会被覆盖或失效。


可以使用get方法获取某个键key的value值,目标键key不存在时返回nil,目标键key的值不是string类型时返回错误。

使用示例如下:

127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> get k1"v1"127.0.0.1:6379> set k1 v2OK127.0.0.1:6379> get k1"v2"127.0.0.1:6379> set k2 v3 ex 10 nxOK127.0.0.1:6379> ttl k2 //ttl 查看键k2过期时间(integer) 9127.0.0.1:6379> get k2"v3"127.0.0.1:6379> ttl k2(integer) -2// k2过期127.0.0.1:6379> get k2(nil)

mset和mget

mset和mget分别是set和get的复数操作版本,使用方法与set和get基本无差异,只不过能同时设置或获取多个键的值。mset不像set具有设置过期时间等选项,同时mset是原子操作,所有给定的键key都是一次性设置。

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4OK127.0.0.1:6379> mget k1 k2 k3 k41) "v1"2) "v2"3) "v3"4) "v4"

setex和psetex

二者使用方法完全相同,都是为键key设置value值并设定过期时间,唯一的区别是使用setex时设定的时间单位是秒s,使用psetex时设定的时间单位是毫秒ms。使用setex比连续使用set和expire执行效率更快。

只演示setex,psetex使用方法完全相同。

127.0.0.1:6379> setex k1 10 v1OK127.0.0.1:6379> ttl k1(integer) 7127.0.0.1:6379> get k1"v1"127.0.0.1:6379> ttl k1(integer) -2127.0.0.1:6379> get k1(nil)

setnx和msetnx

setnx全称是set if not exist,即不存在时set,只有在目标键key不存在时才会set,否则什么也不做,msetnx是mset和setnx的结合,传入键keys中只要有任何一个键key存在,则msetnx一个操作也不会执行。

127.0.0.1:6379> setnx k1 v1(integer) 1127.0.0.1:6379> setnx k1 v1(integer) 0127.0.0.1:6379>127.0.0.1:6379> msetnx k1 v1 k2 v2(integer) 0127.0.0.1:6379> msetnx k2 v2 k3 v3(integer) 1127.0.0.1:6379> keys *1) "k1"2) "k3"3) "k2"

setrange和getrange

使用setrange可以覆盖目标键key原value值的一部分,offset作为覆盖的起始位置,有两种特殊情况。

当传入的新value值的长度 > 原value长度-offset时。效果等同于在原value的offset的位置覆盖追加新value,例如键key原value值为aaa,offset为1,新的value值为bbb,最终键key的value为abbb。当传入offset > 键key原value值的长度时。原value末尾位置到offset位置部分用0补全,然后追加新value值,例如key原value值为aaa,offset为5,新的value值为bbb,最终键key的value为aaa00bbb。

127.0.0.1:6379> set k1 aaaOK127.0.0.1:6379> setrange k1 1 aaaa(integer) 5127.0.0.1:6379> get k1"aaaaa"127.0.0.1:6379> setrange k1 8 bbb(integer) 11127.0.0.1:6379> get k1"aaaaax00x00x00bbb"


使用getrange可以获取键key的子串,即返回原value值[start, stop]闭区间内的部分,可以使start或stop值为负数,表示从原value尾部开始获取。

127.0.0.1:6379> set k1 123456789OK127.0.0.1:6379> getrange k1 1 3"234"127.0.0.1:6379> getrange k1 0 -1"123456789"127.0.0.1:6379> getrange k1 -5 -1"56789"

getset

将键key的旧value值返回,并使用传入新value值覆盖。

127.0.0.1:6379> get k1"v1"127.0.0.1:6379> getset k1 v2"v1"127.0.0.1:6379> get k1"v2"

自运算 incr和decr

incr和decr用法相同,使用incr自增1,使用decr自减1。

如果键key不存在,则创建相应键key并设初值为0后自增或自减。如果键key的value值并非string类型或存储的字符串不能表示为一个整数,则返回错误。

用法相同,只演示incr:

127.0.0.1:6379> set k1 1OK127.0.0.1:6379> incr k1(integer) 2127.0.0.1:6379> decr k1(integer) 1127.0.0.1:6379> incr k2(integer) 1

incrby和decrby

与incr和decr用法完全相同,只不过可以指定自运算步长。

127.0.0.1:6379> set k1 1OK127.0.0.1:6379> incrby k1 5(integer) 6127.0.0.1:6379> decrby k1 3(integer) 3127.0.0.1:6379> incrby k2 10(integer) 10

其他 strlen

返回键key的value值长度,如果value值非string类型则返回错误

127.0.0.1:6379> set k1 abcOK127.0.0.1:6379> strlen k1(integer) 3

append

如果键key存在,则将新value值追加到原value值末尾,如果键key不存在,效果等同于set,效果等同于创建一个键key,并将其值设置为传入value。

127.0.0.1:6379> set k1 aaaOK127.0.0.1:6379> append k1 bbb(integer) 6127.0.0.1:6379> get k1"aaabbb"127.0.0.1:6379> append k2 ccc(integer) 3127.0.0.1:6379> get k2"ccc"

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。