redis命令入门(string)

1,764 阅读6分钟

学习版本:6.0.6

本章主要写redis的string相关命令,废话不多说,开始

redis-cli里可以通过命令查看 string 相关的操作都有哪些命令:

help @string

执行之后,会显示所有关于 string 操作的命令,以及简单的命令介绍

1. SET

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

summary: Set the string value of a key

since: 1.0.0

set命令可以说是最常用的命令之一,直接举例看用法:

set k1 v1  ex 30  nx

ex: 过期时间单位,秒

px: 过期时间单位,毫秒

nx: 如果键不存在则set ,成功会返回 ok,失败会返回 nil

xx :如果键存在则set ,成功会返回 ok,失败会返回 nil

keepttl :6.0版本追加的选项,我们可以根据一个示例来介绍:

上面这个栗子,当对一个相同的 key,做多次 set 且命令中不含有 keepttl 选项时,最后一次的 set 操作会覆盖掉当前 key 的 ttl值,反之,如果包含 keepttl 选项,则在 set 之后,会沿用当前 key 上一次的 ttl值。

2.GET

 GET key

summary: Get the value of a key

since: 1.0.0

返回keyvalue值,如果key不存在,返回nil。如果keyvalue不是string类型,会返回错误,因为get只处理string类型的values

3.APPEND

APPEND key value

summary: Append a value to a key

since: 2.0.0

如果 key 已经存在,会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作

4.SETEX

SETEX key seconds value

summary: Set the value and expiration of a key

since: 2.0.0

设置 key 的值为 value,并且设置 ttl,相当于 set key value ex seconds

5.SETNX

SETNX key value

summary: Set the value of a key, only if the key does not exist

since: 1.0.

如果key不存在,则执行set操作,相当于 set key value nxsetnx是 set if not exists 的简写

6.SETRANGE

SETRANGE key offset value

summary: Overwrite part of a string at key starting at the specified offset

since: 2.2.0

从offset位置开始覆盖值,例如:

先执行set k1 hello,然后执行setrange k1 5 worldget k1 结果是 "helloworld",

使用strlen k1 查看长度是10,再执行 setrange k1 15 redis,结果是 

"helloworld     redis",也就是说,如果offset偏移量超出value的长度,则使用空格补全然后进行追加操作

7.STRLEN

STRLEN key

summary: Get the length of the value stored in a key

since: 2.2.0

获取指定key的value值长度,如果key不存在,则返回0

8.GETRANGE

GETRANGE key start end

summary: Get a substring of the string stored at a key

since: 2.4.0

获取key对应的字符串value的子串,这个子串是由start和end位移决定的,可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推;分别执行set k1 hellogetrange k1 1 2 返回 "el",getrange k1 -2 -1,返回 "lo" ,如果 start 的值大于 end 的值,则会返回空字符串

9.MSET

MSET key value [key value ...]

summary: Set multiple keys to multiple values

since: 1.0.1

可以一次设置多个key value,并且是原子的,例如:mset k1 v1 k2 v2

10.MGET

MGET key [key ...]

summary: Get the values of all the given keys

since: 1.0.0

可以一次获取多个key的value值,如果key不存在,则返回nil,例如:mget k1 k2

11.MSETNX

MSETNX key value [key value ...]

summary: Set multiple keys to multiple values, only if none of the keys exist

since: 1.0.1

同时set多个值,如果其中任意一个key已存在,则任何操作都不会执行,返回值为0,如果所有key都不存在,则全都set成功,返回1,同样的也是原子命令

12.PSETEX

PSETEX key milliseconds value

summary: Set the value and expiration in milliseconds of a key

since: 2.6.0

psetex和setex一样,唯一的区别是到期时间以毫秒为单位,而不是秒

13.GETSET

GETSET key value

summary: Set the string value of a key and return its old value

since: 1.0.0

返回之前的旧值,set新值,忽略原始类型并且取消keyttl值,如果之前key不存在则返回nil

14.INCR

INCR key

summary: Increment the integer value of a key by one

since: 1.0.0

对指定keyvalue值执行原子的加1操作,如果key不存在,那么在执行incr操作之前,会先将它的值设定为0,如果指定的key中存储的值不是字符串类型或者存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回error,这个操作最多支持64位有符号的整型数字

15.INCRBY

INCRBY key increment

summary: Increment the integer value of a key by the given amount

since: 1.0.0

对key的值加上increment,同样的,如果key不存在,则在incrby之前先给key的值设为0,再进行相加操作,这个操作最多支持64位有符号的整型数字

16.INCRBYFLOAT

INCRBYFLOAT key increment

summary: Increment the float value of a key by the given amount

since: 2.6.0

和incrby命令类似,incrbyfloat是支持对小数进行相加操作的,返回值为string类型,string中已存的值或者相加参数可以任意选用指数符号,但相加计算的结果会以科学计数法的格式存储,无论各计算的内部精度如何, 输出精度都固定为小数点后17位.

例如:INCRBYFLOAT kkk 2.0e3 返回 2000

17.DECR

DECR key

summary: Decrement the integer value of a key by one

since: 1.0.0

同incr相反,decr会对key的value值做减一的操作

18.DECRBY

DECRBY key decrement

summary: Decrement the integer value of a key by the given number

since: 1.0.0

同incrby相反,decrby会对key的value值做减decrement 的操作

19.SETBIT

SETBIT key offset value

summary: Sets or clears the bit at offset in the string value stored at key

since: 2.2.0

redis提供了位操作,如图:

举例说明,setbit k1 1 1,意思是说 在偏移量为1的位置的值设置为1,offset是偏移量,value只能为1或0,其他值会报错

20.GETBIT

GETBIT key offset

summary: Returns the bit value at offset in the string value stored at key

since: 2.2.0

返回key对应的string在offset处的bit值,当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间;当key不存在的时候,它就认为是一个空字符串,然后value也被认为是由0比特填充的连续空间

21.BITCOUNT

BITCOUNT key [start end]

summary: Count set bits in a string

since: 2.6.0

统计指定key的字符串值value被设置为1的bit个数,start 和 end 分别表示开始位置和结束位置,可以理解为一个区间,类似getrange 的 start,end参数

22.BITPOS

BITPOS key bit [start] [end]

summary: Find first bit set or clear in a string

since: 2.8.7

返回指定key的字符串值value里面第一个被设置为bit(1或0)的bit位,比如执行 set k1 4 1,继续执行 bitpos k1 1,返回4,如果是执行bitpos k1 0,则返回0,同样的start,end也表示为区间,需要注意的是,start和end这里的单位是字节,而不是bit的索引。

23.LCS

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

since:7.0

时间复杂度:O(N*M),N和M分别表示k1和k2的字符串长度(官网文档)。

计算k1和k2的最长公共子序列。

举个栗子:

mset k1 javaObject k2 javascript

LCS k1 k2   会返回  java

LCS k1 k2 LEN 会返回4

24.GETDEL

GETDEL key

since:6.2

字面含义:先GET再DEL,原子操作

25.GETEX

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

since:6.2

GETEX 类似GET命令,但是它支持GET之后并设置过期时间,比如:GETEX k1 EX 60,表示GET出key的值,并设置过期时间,PX毫秒,EXAT设置指定秒级时间戳,PXAT设置执行毫秒时间戳,所以它是一个写命令。

asdfasfda