- 连接
- 基本操作
- 字符串数据结构与操作
- List数据结构与操作
- 哈希表的数据结构与操作
- 集合的数据结构与操作
- SADD key member [member …]
- SCARD key
- SDIFF[STORE destination] key [key …]
- SINTER[STORE destination] key [key …]
- SUNION[STORE destination] key [key …]
- SCARD key
- SMEMBERS key
- S[M]ISMEMBER key member
- SMOVE source destination member
- SPOP key [count]
- SRANDMEMBER key [count]
- SREM key member [member …]
- SSCAN key cursor [MATCH pattern] [COUNT count]
连接
安装redis-cli后,使用
redis-cli -h host -p port [-a password]
连接上redis
基本操作
DEL key [key …]
删除一个键对应的值,可以用空格隔开多个要删除的键
- 是同步删除,可能导致阻塞
!!!UNLINK key [key …]
由redis自行决定对指定key是同步删除和异步删除,并且都会使key失效;因而如果不是为了立刻清空资源,均应用unlink
DUMP key
EXISTS key [key …]
判断键是否存在,可以用空格隔开多个键
[P]EXPIRE key seconds
为key设定过期时间(p代表毫秒),成功返回1
[P]EXPIREAT key timestamp
为key设定unix时间戳过期时间(p代表毫秒),成功返回1
[P]TTL key
分别以毫秒/秒形式返回对应键剩余时间,-1代表永不过期,-2代表已经过期
PERSIST key
使key变为永久,成功1失败0(没找到key)
KEYS pattern
用正则表达式匹配所有key值
MOVE key db
将指定key迁移到另一个db
RANDOMKEY
从key空间中随即返回一个key
RENAME[NX] key newkey
重命名键(nx指仅在newkey不存在时才执行操作),如果存在重名键且没有nx,则会直接覆盖
TYPE key
其他未探明含义的命令
MIGRATE host port key destination-db timeout [COPY] [REPLACE]
summary: Atomically transfer a key from a Redis instance to another one.
since: 2.6.0
OBJECT subcommand [arguments [arguments …]]
summary: Inspect the internals of Redis objects
since: 2.2.3
RESTORE key ttl serialized-value [REPLACE]
summary: Create a key using the provided serialized value, previously obtained using DUMP.
since: 2.6.0
SCAN cursor [MATCH pattern] [COUNT count](cursor在哪里拿到?)
summary: Incrementally iterate the keys space
since: 2.8.0
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC|DESC] [ALPHA] [STORE destination]
summary: Sort the elements in a list, set or sorted set
since: 1.0.0
WAIT numslaves timeout
summary: Wait for the synchronous replication of all the write commands sent in the context of the current connection
since: 3.0.0
字符串数据结构与操作
APPEND key value
为指定key的字符串值后新增值,成功返回新增后字符串的长度
INCR/DECR key
为能够atoi的字符串进行递增/递减操作
INCRBY[FLOAT]/DECRBYkey delta
为能够atoi的字符串进行递增/递减操作,否则会报错
FLOAT可以实现浮点数的增减
成功后返回更新后的值
[M]GET key [key …] / GETBIT key offset
两种get方法,分别是字符串wise的get和bitwise的get.
带M的get可以传入多个key值,进而得到多个value
GETSET key value
获得key值并set新值,往往用于一些原子操作
GETRANGE key start end
顾名思义,根据范围获取字符子串
多种类型的SET
基本格式:SET key value
前缀:
- M:同时设置多个kv对
- P:用于PSETEX,以毫秒为单位设置key的生存时间,格式为
PSETEX key milliseconds value
后缀:
- BIT:格式为
SETBIT key offset value设定制定bit的值 - EX:以秒为单位设定过期时间
- NX:只有key不存在时执行set操作
- RANGE:格式为
SETRANGE key offset value。从offset开始以制定value覆盖之后的值
bit级别操作
BITCOUNT key [start end]
summary: Count set bits in a string
since: 2.6.0
BITOP operation destkey key [key …]
summary: Perform bitwise operations between strings
since: 2.6.0
BITPOS key bit [start] [end]
summary: Find first bit set or clear in a string
since: 2.8.7
List数据结构与操作
LRANGE key start stop
获得制定范围的值集合;要注意,
- 如果stop大于列表长度-1,那么就会取到最后一个元素为止,而非发生越界错误。
- 如果stop小于0,则从start开始取到最后,并在末尾剩下|stop+1|个元素。也即,快速取全list只用start与stop设为0 -1即可。
基础添加与删除:L/RPOP与L/RPUSH
格式(以L为例):LPOP key、LPUSH key value [value ...]
应注意,lpush的中插入的多个value仍然按照左顺序,因此最后一个value实际上在列表的头结点,以此类推。
扩展的插入与删除
BL/RPOP key [key …] timeout
阻塞pop,会对指定的多个列表执行pop操作,值得注意的是,只要在给出的key中,存在可以pop的列表对象,该命令就会返回第一个能pop的key与对应的pop出的value值;当且仅当所有key都不存在或对应列表为空,该命令才会进入阻塞模式,在等待timeout描述后返回nil(timeout设为0则会永久阻塞),或是在任何key可用时pop出一个。
返回值
- 当多个客户端为同一个 key 阻塞的时候,第一个被处理的客户端是等待最长时间的那个,即第一个因该key被阻塞的客户端;这个优先级的持续时间尽在单个命令,不会在命令间保留。
- 当一个客户端被多个key阻塞时,如果多个key同时可用(通过事务实现,且在上一条可能排队的情况下排到),那么客户端会解除阻塞,并从可用key中取出第一个接收到push操作的一个基于客户端做pop操作。
- 在redis2.6以后,当类似
LPUSH的动作使得阻塞key有了多个可用值,redis的操作逻辑是:先完整执行push操作,再按照1.中规则分发给多个客户端值。
更安全的选择:BRPOPLPUSH以及6.3之后更推荐的BLMOVE
前者的格式是BRPOPLPUSH source destination timeout,从一个列表pop出一个元素到另一个列表,并返回这个值。超时返回nil。同样timeout为0时代表无限等待。
LMOVE的格式是LMOVE source destination LEFT|RIGHT LEFT|RIGHT,这是一个原子性操作,用于从source中移除一个元素到destination,元素增减的位置取决于两个LEFT\RIGHTC参数的取值,LEFT指头,RIGHT指尾。最后该命令返回移动的值。
BLMOVE的格式是 BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout,显然它是LMOVE的阻塞版本,阻塞逻辑同上。
LINDEX key index
根据index查找,不存在返回nil,负数按照倒序,整体上indexing与python类似
LINSERT key BEFORE|AFTER pivot value
根据参数在指定值(而非index)前或后插入新值。返回操作后的列表长度。
LLEN key
L/RPUSHX key value
LREM key count value
删除前count个值等于value的元素,规律如下:
- count>0:从头到尾删除
- count<0:从尾到头删除绝对值
- count=0:全删
LSET key index value
对指定index赋值,负数类上LTRIM key start stop
修剪列表,只留下指定范围的列表值,性质与LRANGE相同
哈希表的数据结构与操作
哈希表适合于存储对象(虽然用字符串表示的JSON适用场景更广),每个哈希键中看以存储多达 40 亿个字段值对。
基本读写操作
应注意,从redis4.0.0开始,hset/hget可以进行多值操作,在此之前只能有hmset/hmget
HSET[NX] key field value [field value …]
HGET key field [field …]
HGETALL key
获取全部哈希字段,返回2n个值得列表,以key,value交替出现
HDEL key field [field …]
删除一个或多个指定字段,不存在的将被忽略,返回成功删除的字段数。
HEXISTS key field
HINCRBY[FLOAT] key field increment
根据指定的增量为制订哈希表的指定值做增量,注意这个increment可以是负数。
- 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
- 如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
- 对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误 ERR ERR hash value is not an integer。
- 本操作的值被限制在 64 位(bit)有符号数字表示之内。
HKEYS/HVALS/HLEN key
返回指定key的所有键/值/长度HSTRLEN key field
返回存储在 key 中的哈希表里, 与给定域 field 相关联的值的字符串长度(string length),如果给定的键或者域不存在, 那么命令返回 0 。HSCAN key cursor [MATCH pattern] [COUNT count]
在指定的哈希表下扫描。注意如果要提供pattern和count,必须要打出MATCH和COUNT两个关键字,他们分别代表匹配的模式与最大数量
关于cursor:
- 首次hscan,cursor应当置0
- 每次hscan,redis的返回如下例子
可以看到返回的第一个数组值,即是下一次scan需要的cursor值(前提是下一次scan需要从这次返回处开始)1) "0"2) 1) "f1"2) "[1,2,3,4]"3) "f2"4) "asd111"
集合的数据结构与操作
redis的集合是string类型的无序集合。集合成员是唯一的,对集合的增删改查时间复杂度都是O(1),集合中最大的成员数为 232 – 1 (4294967295), 每个集合可存储 40 多亿个成员。SADD key member [member …]
将若干个成员加入集合中,已存在的将被忽略,返回新加进集合的元素数量SCARD key
返回集合中元素数量SDIFF[STORE destination] key [key …]
将第一个集合减去剩下的集合(概率论中的集合求差)得到的结果以数组的模式呈现,如果添加了STORE并制定了destination,则将这些值写入指定的集合,两种命令都返回得到的结果。SINTER[STORE destination] key [key …]
求所有集合的交集,如果添加了STORE并制定了destination,则将这些值写入指定的集合,两种命令都返回得到的结果。SUNION[STORE destination] key [key …]
求所有集合的并集,如果添加了STORE并制定了destination,则将这些值写入指定的集合,两种命令都返回得到的结果。SCARD key
返回集合中元素的数量SMEMBERS key
返回储存在key中所有的元素S[M]ISMEMBER key member
此处单查找与多查找仍然需要分离,单查找返回一个值,多查找返回一个数组,每个数组对应着相对位置的member在不在集合中。SMOVE source destination member
从src中移动member(只能有一个)到dest中去。这个操作是原子操作, 在任何时刻,member 只会存在于source 和destination 其中之一
返回1或0指示成功与失败,source不存在member返回0,destination乙醇在member返回1,并且指示从source中删除SPOP key [count]
从key集合中随即删除一个或给定的count个元素,返回被删除的元素,count大于集合大小时直接删除全部。无count返回单个元素,有则返回数组SRANDMEMBER key [count]
与SPOP相同,但只是返回而不是删除,无count返回单个元素,有则返回数组
SREM key member [member …]
SSCAN key cursor [MATCH pattern] [COUNT count]
整体的模式同哈希表的scan,返回值数组的第二个元素,是一次扫描中的元素列表
