连接

安装redis-cli后,使用

  1. redis-cli -h host -p port [-a password]

连接上redis

基本操作

直接粘贴自redis的help指令

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

判断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

获得制定范围的值集合;要注意,

  1. 如果stop大于列表长度-1,那么就会取到最后一个元素为止,而非发生越界错误。
  2. 如果stop小于0,则从start开始取到最后,并在末尾剩下|stop+1|个元素。也即,快速取全list只用start与stop设为0 -1即可。

    基础添加与删除:L/RPOP与L/RPUSH

    格式(以L为例):LPOP keyLPUSH 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出一个。

返回值

  • 如果列表为空或超时,返回一个 nil。
  • 如果有有意义的返回值,则返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

    细节

  1. 当多个客户端为同一个 key 阻塞的时候,第一个被处理的客户端是等待最长时间的那个,即第一个因该key被阻塞的客户端;这个优先级的持续时间尽在单个命令,不会在命令间保留。
  2. 当一个客户端被多个key阻塞时,如果多个key同时可用(通过事务实现,且在上一条可能排队的情况下排到),那么客户端会解除阻塞,并从可用key中取出第一个接收到push操作的一个基于客户端做pop操作。
  3. 在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

仅在列表存在时向list前后插入元素

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 …]

此处写入的field也是字符串,亦有nx后缀选项

HGET key field [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:
  1. 首次hscan,cursor应当置0
  2. 每次hscan,redis的返回如下例子
    1. 1) "0"
    2. 2) 1) "f1"
    3. 2) "[1,2,3,4]"
    4. 3) "f2"
    5. 4) "asd111"
    可以看到返回的第一个数组值,即是下一次scan需要的cursor值(前提是下一次scan需要从这次返回处开始)

    集合的数据结构与操作

    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 …]

删除指定吗member列表的元素,返回删除的元素数

SSCAN key cursor [MATCH pattern] [COUNT count]

整体的模式同哈希表的scan,返回值数组的第二个元素,是一次扫描中的元素列表