可以直接看每一大节的命令示例部分,敲一遍就大体会了
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
/> redis-cli #执行redis客户端工具。 redis 127.0.0.1:6379> exists mykey #判断该键是否存在,存在返回1,否则返回0。 (integer) 0 redis 127.0.0.1:6379> append mykey "hello" #该键并不存在,因此append命令返回当前value的长度。 (integer) 5 redis 127.0.0.1:6379> append mykey " world" #该键已经存在,因此返回追加后value的长度。 (integer) 11 redis 127.0.0.1:6379> get mykey #通过get命令获取该键,以判断append的结果。 "hello world" redis 127.0.0.1:6379> set mykey "this is a test" #通过set命令为键设置新值,并覆盖原有值。 ok redis 127.0.0.1:6379> get mykey "this is a test" redis 127.0.0.1:6379> strlen mykey #获取指定key的字符长度,等效于c库中strlen函数。 (integer) 14
redis 127.0.0.1:6379> set mykey 20 #设置key的值为20 ok redis 127.0.0.1:6379> incr mykey #该key的值递增1 (integer) 21 redis 127.0.0.1:6379> decr mykey #该key的值递减1 (integer) 20 redis 127.0.0.1:6379> del mykey #删除已有键。 (integer) 1 redis 127.0.0.1:6379> decr mykey #对空值执行递减操作,其原值被设定为0,递减后的值为-1 (integer) -1 redis 127.0.0.1:6379> del mykey (integer) 1 redis 127.0.0.1:6379> incr mykey #对空值执行递增操作,其原值被设定为0,递增后的值为1 (integer) 1 redis 127.0.0.1:6379> set mykey hello #将该键的value设置为不能转换为整型的普通字符串。 ok redis 127.0.0.1:6379> incr mykey #在该键上再次执行递增操作时,redis将报告错误信息。 (error) err value is not an integer or out of range redis 127.0.0.1:6379> set mykey 10 ok redis 127.0.0.1:6379> decrby mykey 5 (integer) 5 redis 127.0.0.1:6379> incrby mykey 10 (integer) 15
redis 127.0.0.1:6379> incr mycounter #将计数器的值原子性的递增1 (integer) 1 #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成。 redis 127.0.0.1:6379> getset mycounter 0 "1" redis 127.0.0.1:6379> get mycounter #查看设置后的结果。 "0"
redis 127.0.0.1:6379> setex mykey 10 "hello" #设置指定key的过期时间为10秒。 ok #通过ttl命令查看一下指定key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。 redis 127.0.0.1:6379> ttl mykey (integer) 4 redis 127.0.0.1:6379> get mykey #在该键的存活期内我们仍然可以获取到它的value。 "hello" redis 127.0.0.1:6379> ttl mykey #该ttl命令的返回值显示,该key已经过期。 (integer) 0 redis 127.0.0.1:6379> get mykey #获取已过期的key将返回nil。 (nil)
redis 127.0.0.1:6379> del mykey #删除该键,以便于下面的测试验证。 (integer) 1 redis 127.0.0.1:6379> setnx mykey "hello" #该键并不存在,因此该命令执行成功。 (integer) 1 redis 127.0.0.1:6379> setnx mykey "world" #该键已经存在,因此本次设置没有产生任何效果。 (integer) 0 redis 127.0.0.1:6379> get mykey #从结果可以看出,返回的值仍为第一次设置的值。 "hello"
redis 127.0.0.1:6379> set mykey "hello world" #设定初始值。 ok redis 127.0.0.1:6379> setrange mykey 6 dd #从第六个字节开始替换2个字节(dd只有2个字节) (integer) 11 redis 127.0.0.1:6379> get mykey #查看替换后的值。 "hello ddrld" redis 127.0.0.1:6379> setrange mykey 20 dd #offset已经超过该key原有值的长度了,该命令将会在末尾补0。 (integer) 22 redis 127.0.0.1:6379> get mykey #查看补0后替换的结果。 "hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd" redis 127.0.0.1:6379> del mykey #删除该key。 (integer) 1 redis 127.0.0.1:6379> setrange mykey 2 dd #替换空值。 (integer) 4 redis 127.0.0.1:6379> get mykey #查看替换空值后的结果。 "\x00\x00dd" redis 127.0.0.1:6379> set mykey "0123456789" #设置新值。 ok redis 127.0.0.1:6379> getrange mykey 1 2 #截取该键的value,从第一个字节开始,到第二个字节结束。 "12" redis 127.0.0.1:6379> getrange mykey 1 20 #20已经超过value的总长度,因此将截取第一个字节后面的所有字节。 "123456789"
redis 127.0.0.1:6379> del mykey (integer) 1 redis 127.0.0.1:6379> setbit mykey 7 1 #设置从0开始计算的第七位bit值为1,返回原有bit值0 (integer) 0 redis 127.0.0.1:6379> get mykey #获取设置的结果,二进制的0000 0001的十六进制值为0x01 "\x01" redis 127.0.0.1:6379> setbit mykey 6 1 #设置从0开始计算的第六位bit值为1,返回原有bit值0 (integer) 0 redis 127.0.0.1:6379> get mykey #获取设置的结果,二进制的0000 0011的十六进制值为0x03 "\x03" redis 127.0.0.1:6379> getbit mykey 6 #返回了指定offset的bit值。 (integer) 1 redis 127.0.0.1:6379> getbit mykey 10 #offset已经超出了value的长度,因此返回0。 (integer) 0
redis 127.0.0.1:6379> mset key1 "hello" key2 "world" #批量设置了key1和key2两个键。 ok redis 127.0.0.1:6379> mget key1 key2 #批量获取了key1和key2两个键的值。 1) "hello" 2) "world" #批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1。 redis 127.0.0.1:6379> msetnx key3 "study" key4 "zhang" (integer) 1 redis 127.0.0.1:6379> mget key3 key4 1) "study" 2) "zhang" #批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0。 redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" (integer) 0 #批量获取key3和key5,由于key5没有设置成功,所以返回nil。 redis 127.0.0.1:6379> mget key3 key5 1) "study" 2) (nil)
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
/> redis-cli ## 在shell提示符下启动redis客户端工具。 redis 127.0.0.1:6379> del mykey (integer) 1 ## mykey键并不存在,该命令会创建该键及与其关联的list, ## 之后在将参数中的values从左到右依次插入。 redis 127.0.0.1:6379> lpush mykey a b c d (integer) 4 ## 取从位置0开始到位置2结束的3个元素。 redis 127.0.0.1:6379> lrange mykey 0 2 1) "d" 2) "c" 3) "b" ## 取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "d" 2) "c" 3) "b" 4) "a" ## mykey2键此时并不存在,因此该命令将不会进行任何操作,其返回值为0。 redis 127.0.0.1:6379> lpushx mykey2 e (integer) 0 ## 可以看到mykey2没有关联任何list value。 redis 127.0.0.1:6379> lrange mykey2 0 -1 (empty list or set) ## mykey键此时已经存在,所以该命令插入成功,并返回链表中当前元素的数量。 redis 127.0.0.1:6379> lpushx mykey e (integer) 5 ## 获取该键的list value的头部元素。 redis 127.0.0.1:6379> lrange mykey 0 0 1) "e"
redis 127.0.0.1:6379> lpush mykey a b c d (integer) 4 redis 127.0.0.1:6379> lpop mykey "d" redis 127.0.0.1:6379> lpop mykey "c" ## 在执行lpop命令两次后,链表头部的两个元素已经被弹出, ## 此时链表中元素的数量是2 redis 127.0.0.1:6379> llen mykey (integer) 2
## 为后面的示例准备测试数据。 redis 127.0.0.1:6379> lpush mykey a b c d a c (integer) 6 ## 从头部(left)向尾部(right)变量链表, ## 删除2个值等于a的元素,返回值为实际删除的数量。 redis 127.0.0.1:6379> lrem mykey 2 a (integer) 2 ## 看出删除后链表中的全部元素。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "c" 2) "d" 3) "c" 4) "b" ## 获取索引值为1(头部的第二个元素)的元素值。 redis 127.0.0.1:6379> lindex mykey 1 "d" ## 将索引值为1(头部的第二个元素)的元素值设置为新值e。 redis 127.0.0.1:6379> lset mykey 1 e ok ## 查看是否设置成功。 redis 127.0.0.1:6379> lindex mykey 1 "e" ## 索引值6超过了链表中元素的数量,该命令返回nil。 redis 127.0.0.1:6379> lindex mykey 6 (nil) ## 设置的索引值6超过了链表中元素的数量,设置失败,该命令返回错误信息。 redis 127.0.0.1:6379> lset mykey 6 hh (error) err index out of range ## 仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留。 redis 127.0.0.1:6379> ltrim mykey 0 2 ok ## 查看trim后的结果。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "c" 2) "e" 3) "c"
##删除该键便于后面的测试。 redis 127.0.0.1:6379> del mykey (integer) 1 ##为后面的示例准备测试数据。 redis 127.0.0.1:6379> lpush mykey a b c d e (integer) 5 ##在a的前面插入新元素a1。 redis 127.0.0.1:6379> linsert mykey before a a1 (integer) 6 ##查看是否插入成功,从结果看已经插入。注意lindex的index值是0-based。 redis 127.0.0.1:6379> lindex mykey 0 "e" ##在e的后面插入新元素e2,从返回结果看已经插入成功。 redis 127.0.0.1:6379> linsert mykey after e e2 (integer) 7 ##再次查看是否插入成功。 redis 127.0.0.1:6379> lindex mykey 1 "e2" ##在不存在的元素之前或之后插入新元素,该命令操作失败,并返回-1。 redis 127.0.0.1:6379> linsert mykey after k a (integer) -1 ##为不存在的key插入新元素,该命令操作失败,返回0。 redis 127.0.0.1:6379> linsert mykey1 after a a2 (integer) 0
##删除该键,以便于后面的测试。 redis 127.0.0.1:6379> del mykey (integer) 1 ##从链表的尾部插入参数中给出的values,插入顺序是从左到右依次插入。 redis 127.0.0.1:6379> rpush mykey a b c d (integer) 4 ##通过lrange的可以获悉rpush在插入多值时的插入顺序。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "a" 2) "b" 3) "c" 4) "d" ##该键已经存在并且包含4个元素,rpushx命令将执行成功, ##并将元素e插入到链表的尾部。 redis 127.0.0.1:6379> rpushx mykey e (integer) 5 ## 通过lindex命令可以看出之前的rpushx命令确实执行成功 ## 因为索引值为4的元素已经是新元素了。 redis 127.0.0.1:6379> lindex mykey 4 "e" ##由于mykey2键并不存在,因此该命令不会插入数据,其返回值为0。 redis 127.0.0.1:6379> rpushx mykey2 e (integer) 0 ##在执行rpoplpush命令前,先看一下mykey中链表的元素有哪些, ##注意他们的位置关系。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" ##将mykey的尾部元素e弹出,同时再插入到mykey2的头部(原子性的完成这两步操作)。 redis 127.0.0.1:6379> rpoplpush mykey mykey2 "e" ##通过lrange命令查看mykey在弹出尾部元素后的结果。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "a" 2) "b" 3) "c" 4) "d" ##通过lrange命令查看mykey2在插入元素后的结果。 redis 127.0.0.1:6379> lrange mykey2 0 -1 1) "e" ##将source和destination设为同一键,将mykey中的尾部元素移到其头部。 redis 127.0.0.1:6379> rpoplpush mykey mykey "d" ##查看移动结果。 redis 127.0.0.1:6379> lrange mykey 0 -1 1) "d" 2) "a" 3) "b" 4) "c"
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
hset key field value
hget key field
hexists key field
hlen key
hdel key field [field ...] o(n) 时间复杂度中的n表示参数中待删除的字段数量。从指定key的hashes value中删除参数中指定的多个字段,如果不存在的字段将被忽略。如果key不存在,则将其视为空hashes,并返回0.
hsetnx key field value
hincrby key field increment
hgetall key
hkeys key
hvals key
hmget key field [field ...]
hmset key field value [field value ...] * o(n) 时间复杂度中的n表示被设置的field数量。逐对依次设置参数中给出的field/value对。如果其中某个field已经存在,则用新值覆盖原有值。如果key不存在,则创建新key,同时设定参数中的field/value。
## 在shell命令行启动redis客户端程序 /> redis-cli ## 给键值为myhash的键设置字段为field1,值为study。 redis 127.0.0.1:6379> hset myhash field1 "study" (integer) 1 ## 获取键值为myhash,字段为field1的值。 redis 127.0.0.1:6379> hget myhash field1 "study" ## myhash键中不存在field2字段,因此返回nil。 redis 127.0.0.1:6379> hget myhash field2 (nil) ## 给myhash关联的hashes值添加一个新的字段field2,其值为zhang。 redis 127.0.0.1:6379> hset myhash field2 "zhang" (integer) 1 ## 获取myhash键的字段数量。 redis 127.0.0.1:6379> hlen myhash (integer) 2 ## 判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 1 ## 删除myhash键中字段名为field1的字段,删除成功返回1。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 1 ## 再次删除myhash键中字段名为field1的字段, ## 由于上一条命令已经将其删除,因为没有删除,返回0。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 0 ## 判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 0 ## 通过hsetnx命令给myhash添加新字段field1, ## 其值为zhang,因为该字段已经被删除,所以该命令添加成功并返回1。 redis 127.0.0.1:6379> hsetnx myhash field1 study (integer) 1 ## 由于myhash的field1字段已经通过上一条命令添加成功, ## 因为本条命令不做任何操作后返回0。 redis 127.0.0.1:6379> hsetnx myhash field1 study (integer) 0
## 删除该键,便于后面示例的测试。 redis 127.0.0.1:6379> del myhash (integer) 1 ## 准备测试数据,该myhash的field字段设定值1。 redis 127.0.0.1:6379> hset myhash field 5 (integer) 1 ## 给myhash的field字段的值加1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field 1 (integer) 6 ## 给myhash的field字段的值加-1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -1 (integer) 5 ## 给myhash的field字段的值加-10,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -10 (integer) -5
## 删除该键,便于后面示例测试。 redis 127.0.0.1:6379> del myhash (integer) 1 ## 为该键myhash,一次性设置多个字段, ## 分别是field1 = "hello", field2 = "world"。 redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world" ok ## 获取myhash键的多个字段,其中field3并不存在, ## 因为在返回结果中与该字段对应的值为nil。 redis 127.0.0.1:6379> hmget myhash field1 field2 field3 1) "hello" 2) "world" 3) (nil) ## 返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。 redis 127.0.0.1:6379> hgetall myhash 1) "field1" 2) "hello" 3) "field2" 4) "world" ## 仅获取myhash键中所有字段的名字。 redis 127.0.0.1:6379> hkeys myhash 1) "field1" 2) "field2" ## 仅获取myhash键中所有字段的值。 redis 127.0.0.1:6379> hvals myhash 1) "hello" 2) "world"
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
sadd key member [member ...]
scard key
sismember key member
smembers key
spop key
srem key member [member ...]
srandmember key
smove source destination member
sdiff key [key ...]
sdiffstore destination key [key ...]
sinter key [key ...]
sinterstore destination key [key ...]
sunion key [key ...]
sunionstore destination key [key ...]
## 在shell命令行下启动redis的客户端程序。 /> redis-cli ## 插入测试数据,由于该键myset之前并不存在,因此参数中的三个成员都被正常插入。 redis 127.0.0.1:6379> sadd myset a b c (integer) 3 ## 由于参数中的a在myset中已经存在,因此本次操作仅仅插入了d和e两个新成员。 redis 127.0.0.1:6379> sadd myset a d e (integer) 2 ## 判断a是否已经存在,返回值为1表示存在。 redis 127.0.0.1:6379> sismember myset a (integer) 1 ## 判断f是否已经存在,返回值为0表示不存在。 redis 127.0.0.1:6379> sismember myset f (integer) 0 ## 通过smembers命令查看插入的结果,从结果可以,输出的顺序和插入顺序无关。 redis 127.0.0.1:6379> smembers myset 1) "c" 2) "d" 3) "a" 4) "b" 5) "e" ## 获取set集合中元素的数量。 redis 127.0.0.1:6379> scard myset (integer) 5
## 删除该键,便于后面的测试。 redis 127.0.0.1:6379> del myset (integer) 1 ## 为后面的示例准备测试数据。 redis 127.0.0.1:6379> sadd myset a b c d (integer) 4 ## 查看set中成员的位置。 redis 127.0.0.1:6379> smembers myset 1) "c" 2) "d" 3) "a" 4) "b" ## 从结果可以看出,该命令确实是随机的返回了某一成员。 redis 127.0.0.1:6379> srandmember myset "c" ## set中尾部的成员b被移出并返回,事实上b并不是之前插入的第一个或最后一个成员。 redis 127.0.0.1:6379> spop myset "b" ## 查看移出后set的成员信息。 redis 127.0.0.1:6379> smembers myset 1) "c" 2) "d" 3) "a" ## 从set中移出a、d和f三个成员,其中f并不存在,因此只有a和d两个成员被移出,返回为2。 redis 127.0.0.1:6379> srem myset a d f (integer) 2 ## 查看移出后的输出结果。 redis 127.0.0.1:6379> smembers myset 1) "c" ## 为后面的smove命令准备数据。 redis 127.0.0.1:6379> sadd myset a b (integer) 2 redis 127.0.0.1:6379> sadd myset2 c d (integer) 2 ## 将a从myset移到myset2,从结果可以看出移动成功。 redis 127.0.0.1:6379> smove myset myset2 a (integer) 1 ## 再次将a从myset移到myset2,由于此时a已经不是myset的成员了, ## 因此移动失败并返回0。 redis 127.0.0.1:6379> smove myset myset2 a (integer) 0 ## 分别查看myset和myset2的成员,确认移动是否真的成功。 redis 127.0.0.1:6379> smembers myset 1) "b" redis 127.0.0.1:6379> smembers myset2 1) "c" 2) "d" 3) "a"
##为后面的命令准备测试数据。 redis 127.0.0.1:6379> sadd myset a b c d (integer) 4 redis 127.0.0.1:6379> sadd myset2 c (integer) 1 redis 127.0.0.1:6379> sadd myset3 a c e (integer) 3 ##myset和myset2相比,a、b和d三个成员是两者之间的差异成员。 ## 再用这个结果继续和 myset3进行差异比较,b和d是myset3不存在的成员。 redis 127.0.0.1:6379> sdiff myset myset2 myset3 1) "d" 2) "b" ##将3个集合的差异成员存在在diffkey关联的set中,并返回插入的成员数量。 redis 127.0.0.1:6379> sdiffstore diffkey myset myset2 myset3 (integer) 2 ##查看一下sdiffstore的操作结果。 redis 127.0.0.1:6379> smembers diffkey 1) "d" 2) "b" ##从之前准备的数据就可以看出,这三个set的成员交集只有c。 redis 127.0.0.1:6379> sinter myset myset2 myset3 1) "c" ##将3个集合中的交集成员存储到与interkey关联的set中,并返回交集成员的数量。 redis 127.0.0.1:6379> sinterstore interkey myset myset2 myset3 (integer) 1 ##查看一下sinterstore的操作结果。 redis 127.0.0.1:6379> smembers interkey 1) "c" ##获取3个集合中的成员的并集。 redis 127.0.0.1:6379> sunion myset myset2 myset3 1) "b" 2) "c" 3) "d" 4) "e" 5) "a" ##将3个集合中成员的并集存储到unionkey关联的set中,并返回并集成员的数量。 redis 127.0.0.1:6379> sunionstore unionkey myset myset2 myset3 (integer) 5 ##查看一下suiionstore的操作结果。 redis 127.0.0.1:6379> smembers unionkey 1) "b" 2) "c" 3) "d" 4) "e" 5) "a"
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
zadd key score member [score] [member]
zcard key
zcount key min max
zincrby key increment member
zrange key start stop [withscores]
zrangebyscore key min max [withscores] [limit offset count]
zrank key member
zrem key member [member ...]
zrevrange key start stop [withscores]
zrevrank key member
zscore key member
zrevrangebyscore key max min [withscores] [limit offset count]
zremrangebyrank key start stop
zremrangebyscore key min max
##在shell的命令行下启动redis客户端工具。 /> redis-cli ##添加一个分数为1的成员。 redis 127.0.0.1:6379> zadd myzset 1 "one" (integer) 1 ## 添加两个分数分别是2和3的两个成员。 redis 127.0.0.1:6379> zadd myzset 2 "two" 3 "three" (integer) 2 ## 0表示第一个成员,-1表示最后一个成员。 ## withscores选项表示返回的结果中包含每个成员及其分数,否则只返回成员。 redis 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" ## 获取成员one在sorted-set中的位置索引值。0表示第一个位置。 redis 127.0.0.1:6379> zrank myzset one (integer) 0 ## 成员four并不存在,因此返回nil。 redis 127.0.0.1:6379> zrank myzset four (nil) ## 获取myzset键中成员的数量。 redis 127.0.0.1:6379> zcard myzset (integer) 3 ## 返回与myzset关联的sorted-set中, ## 分数满足表达式1 <= score <= 2的成员的数量。 redis 127.0.0.1:6379> zcount myzset 1 2 (integer) 2 ## 删除成员one和two,返回实际删除成员的数量。 redis 127.0.0.1:6379> zrem myzset one two (integer) 2 ## 查看是否删除成功。 redis 127.0.0.1:6379> zcard myzset (integer) 1 #获取成员three的分数。返回值是字符串形式。 redis 127.0.0.1:6379> zscore myzset three "3" ## 由于成员two已经被删除,所以该命令返回nil。 redis 127.0.0.1:6379> zscore myzset two (nil) ## 将成员one的分数增加2,并返回该成员更新后的分数。 redis 127.0.0.1:6379> zincrby myzset 2 one "3" ## 将成员one的分数增加-1,并返回该成员更新后的分数。 redis 127.0.0.1:6379> zincrby myzset -1 one "2" ## 查看在更新了成员的分数后是否正确。 redis 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "one" 2) "2" 3) "two" 4) "2" 5) "three" 6) "3"
redis 127.0.0.1:6379> del myzset (integer) 1 redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four (integer) 4 ## 获取分数满足表达式1 <= score <= 2的成员。 redis 127.0.0.1:6379> zrangebyscore myzset 1 2 1) "one" 2) "two" ## 获取分数满足表达式1 < score <= 2的成员。 redis 127.0.0.1:6379> zrangebyscore myzset (1 2 1) "two" ## -inf表示第一个成员,+inf表示最后一个成员, ## limit后面的参数用于限制返回成员的自己, ## 2表示从位置索引(0-based)等于2的成员开始,去后面3个成员。 redis 127.0.0.1:6379> zrangebyscore myzset -inf +inf limit 2 3 1) "three" 2) "four" ## 删除分数满足表达式1 <= score <= 2的成员,并返回实际删除的数量。 redis 127.0.0.1:6379> zremrangebyscore myzset 1 2 (integer) 2 ## 看出一下上面的删除是否成功。 redis 127.0.0.1:6379> zrange myzset 0 -1 1) "three" 2) "four" ## 删除位置索引满足表达式0 <= rank <= 1的成员。 redis 127.0.0.1:6379> zremrangebyrank myzset 0 1 (integer) 2 ## 查看上一条命令是否删除成功。 redis 127.0.0.1:6379> zcard myzset (integer) 0
## 为后面的示例准备测试数据。 redis 127.0.0.1:6379> del myzset (integer) 0 redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four (integer) 4 ## 以位置索引从高到低的方式获取并返回此区间内的成员。 redis 127.0.0.1:6379> zrevrange myzset 0 -1 withscores 1) "four" 2) "4" 3) "three" 4) "3" 5) "two" 6) "2" 7) "one" 8) "1" ## 由于是从高到低的排序,所以位置等于0的是four,1是three,并以此类推。 redis 127.0.0.1:6379> zrevrange myzset 1 3 1) "three" 2) "two" 3) "one" ## 由于是从高到低的排序,所以one的位置是3。 redis 127.0.0.1:6379> zrevrank myzset one (integer) 3 ## 由于是从高到低的排序,所以four的位置是0。 redis 127.0.0.1:6379> zrevrank myzset four (integer) 0 ## 获取分数满足表达式3 >= score >= 0的成员,并以相反的顺序输出, ## 即从高到底的顺序。 redis 127.0.0.1:6379> zrevrangebyscore myzset 3 0 1) "three" 2) "two" 3) "one" ## 该命令支持limit选项,其含义等同于zrangebyscore中的该选项, ## 只是在计算位置时按照相反的顺序计算和获取。 redis 127.0.0.1:6379> zrevrangebyscore myzset 4 0 limit 1 2 1) "three" 2) "two"
此后按照如下的排版进行讲解:
[命令原型] * [时间复杂度] [命令描述] * 返回值
keys pattern
del key [key ...]
exists key
move key db
rename key newkey
renamenx key newkey
persist key
expire key seconds
expireat key timestamp
ttl key
randomkey
type key
sort key [by pattern] [limit offset count] [get pattern [get pattern ...]] [asc|desc] [alpha] [store destination]
## 在shell命令行下启动redis客户端工具。 /> redis-cli ## 清空当前选择的数据库,以便于对后面示例的理解。 redis 127.0.0.1:6379> flushdb ok ## 添加string类型的模拟数据。 redis 127.0.0.1:6379> set mykey 2 ok redis 127.0.0.1:6379> set mykey2 "hello" ok ## 添加set类型的模拟数据。 redis 127.0.0.1:6379> sadd mysetkey 1 2 3 (integer) 3 ## 添加hash类型的模拟数据。 redis 127.0.0.1:6379> hset mmtest username "study" (integer) 1 ## 根据参数中的模式,获取当前数据库中符合该模式的所有key, ## 从输出可以看出,该命令在执行时并不区分与key关联的value类型。 redis 127.0.0.1:6379> keys my* 1) "mysetkey" 2) "mykey" 3) "mykey2" ## 删除了两个keys。 redis 127.0.0.1:6379> del mykey mykey2 (integer) 2 ## 查看一下刚刚删除的key是否还存在,从返回结果看,mykey确实已经删除了。 redis 127.0.0.1:6379> exists mykey (integer) 0 ## 查看一下没有删除的key,以和上面的命令结果进行比较。 redis 127.0.0.1:6379> exists mysetkey (integer) 1 ## 将当前数据库中的mysetkey键移入到id为1的数据库中, ## 从结果可以看出已经移动成功。 redis 127.0.0.1:6379> move mysetkey 1 (integer) 1 ## 打开id为1的数据库。 redis 127.0.0.1:6379> select 1 ok ## 查看一下刚刚移动过来的key是否存在,从返回结果看已经存在了。 redis 127.0.0.1:6379[1]> exists mysetkey (integer) 1 ## 在重新打开id为0的缺省数据库。 redis 127.0.0.1:6379[1]> select 0 ok ## 查看一下刚刚移走的key是否已经不存在,从返回结果看已经移走。 redis 127.0.0.1:6379> exists mysetkey (integer) 0 ## 准备新的测试数据。 redis 127.0.0.1:6379> set mykey "hello" ok ## 将mykey改名为mykey1 redis 127.0.0.1:6379> rename mykey mykey1 ok ## 由于mykey已经被重新命名,再次获取将返回nil。 redis 127.0.0.1:6379> get mykey (nil) ## 通过新的键名获取。 redis 127.0.0.1:6379> get mykey1 "hello" ## 由于mykey已经不存在了,所以返回错误信息。 redis 127.0.0.1:6379> rename mykey mykey1 (error) err no such key ## 为renamenx准备测试key redis 127.0.0.1:6379> set oldkey "hello" ok redis 127.0.0.1:6379> set newkey "world" ok ## 由于newkey已经存在,因此该命令未能成功执行。 redis 127.0.0.1:6379> renamenx oldkey newkey (integer) 0 ## 查看newkey的值,发现它也没有被renamenx覆盖。 redis 127.0.0.1:6379> get newkey "world"
## 为后面的示例准备的测试数据。 redis 127.0.0.1:6379> set mykey "hello" ok ## 将该键的超时设置为100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 ## 通过ttl命令查看一下还剩下多少秒。 redis 127.0.0.1:6379> ttl mykey (integer) 97 ## 立刻执行persist命令,该存在超时的键变成持久化的键,即将该key的超时去掉。 redis 127.0.0.1:6379> persist mykey (integer) 1 ## ttl的返回值告诉我们,该键已经没有超时了。 redis 127.0.0.1:6379> ttl mykey (integer) -1 ## 为后面的expire命令准备数据。 redis 127.0.0.1:6379> del mykey (integer) 1 redis 127.0.0.1:6379> set mykey "hello" ok ## 设置该键的超时被100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 ## 用ttl命令看一下当前还剩下多少秒,从结果中可以看出还剩下96秒。 redis 127.0.0.1:6379> ttl mykey (integer) 96 ## 重新更新该键的超时时间为20秒,从返回值可以看出该命令执行成功。 redis 127.0.0.1:6379> expire mykey 20 (integer) 1 ## 再用ttl确认一下,从结果中可以看出果然被更新了。 redis 127.0.0.1:6379> ttl mykey (integer) 17 ## 立刻更新该键的值,以使其超时无效。 redis 127.0.0.1:6379> set mykey "world" ok ## 从ttl的结果可以看出,在上一条修改该键的命令执行后,该键的超时也无效了。 redis 127.0.0.1:6379> ttl mykey (integer) -1
## 由于mm键在数据库中不存在,因此该命令返回none。 redis 127.0.0.1:6379> type mm none ## mykey的值是字符串类型,因此返回string。 redis 127.0.0.1:6379> type mykey string ## 准备一个值是set类型的键。 redis 127.0.0.1:6379> sadd mysetkey 1 2 (integer) 2 ## mysetkey的键是set,因此返回字符串set。 redis 127.0.0.1:6379> type mysetkey set ## 返回数据库中的任意键。 redis 127.0.0.1:6379> randomkey "oldkey" ## 清空当前打开的数据库。 redis 127.0.0.1:6379> flushdb ok ## 由于没有数据了,因此返回nil。 redis 127.0.0.1:6379> randomkey (nil)
如对本文有疑问, 点击进行留言回复!!
express+mongoose实现对mongodb增删改查操作详解
修复 Mac brew 安装 mongodb 报 Error: No available formula with the name ‘mongodb’ 问题详解
网友评论