学习版本: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
返回key的value值,如果key不存在,返回nil。如果key的value不是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 nx,setnx是 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 world,get 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 hello,getrange 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新值,忽略原始类型并且取消key的ttl值,如果之前key不存在则返回nil
14.INCR
INCR key
summary: Increment the integer value of a key by one
since: 1.0.0
对指定key的value值执行原子的加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