本文共 48888 字,大约阅读时间需要 162 分钟。
redis 里边有字符串,哈希,列表和集合等,让人不免觉得它更像是常规脚本语言的用法了(比如 Python,Ruby 等),只不过同时兼有了数据库存储的角色。
[root@master ~]# service redis stopRedirecting to /bin/systemctl stop redis.service[root@master ~]# service redis startRedirecting to /bin/systemctl start redis.service[root@master ~]# service redis restartRedirecting to /bin/systemctl restart redis.service[root@master ~]# service redis statusRedirecting to /bin/systemctl status redis.service● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Sat 2020-12-05 18:24:51 CST; 8s ago Process: 5732 ExecStop=/usr/libexec/redis-shutdown (code=exited, status=0/SUCCESS) Main PID: 5747 (redis-server) CGroup: /system.slice/redis.service └─5747 /usr/bin/redis-server 127.0.0.1:6379Dec 05 18:24:51 master systemd[1]: Starting Redis persistent key-value database...Dec 05 18:24:51 master systemd[1]: Started Redis persistent key-value database.[root@master packages]# redis-cli127.0.0.1:6379>
DEL (delete)命令用于删除已存在的键。返回被删除 key 的数量。
127.0.0.1:6379> set w3ckey redisOK127.0.0.1:6379> del w3ckey(integer) 1127.0.0.1:6379> del hello(integer) 0
DUMP 命令用于序列化给定 key ,并返回被序列化的值。如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。
127.0.0.1:6379> set greeting "hello world"OK127.0.0.1:6379> dump greeting"\x00\x0bhello world\a\x00\xf4\xce\x9cJ\xae\ru."127.0.0.1:6379> dump greet(nil)
EXISTS 命令用于检查给定 key 是否存在。若 key 存在返回 1 ,否则返回 0 。
127.0.0.1:6379> exists greeting(integer) 1127.0.0.1:6379> exists greet(integer) 0
EXPIRE 命令用于设置 key 的过期时间,key 过期后将自动删除不再可用。单位以秒计。
127.0.0.1:6379> set test_key redisOK127.0.0.1:6379> expire test_key 30(integer) 1127.0.0.1:6379> get test_key"redis"127.0.0.1:6379> get test_key(nil)
EXPIREAT 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时返回 0 。
127.0.0.1:6379> expireat test_key 1604584100(integer) 1127.0.0.1:6379> exists test_key(integer) 1127.0.0.1:6379> exists test_key(integer) 0
PEXPIRE 命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。 设置成功,返回 1。key 不存在或设置失败,返回 0。
127.0.0.1:6379> set test_key redisOK127.0.0.1:6379> pexpire test_key 10000(integer) 1127.0.0.1:6379> exists test_key(integer) 1127.0.0.1:6379> exists test_key(integer) 0
KEYS 命令用于查找所有符合给定模式 pattern 的 key 。
127.0.0.1:6379> set runoob1 redisOK127.0.0.1:6379> set runoob2 mysqlOK127.0.0.1:6379> set runoob3 mongodbOK127.0.0.1:6379> keys runoob*1) "runoob2"2) "runoob3"3) "runoob1"
MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。移动成功返回 1 ,失败则返回 0 。
# key 存在于当前数据库127.0.0.1:6379> select 0OK127.0.0.1:6379> set song "secret base - Zone"OK127.0.0.1:6379> move song 1(integer) 1127.0.0.1:6379> exists song(integer) 0127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> exists song(integer) 1# 当 key 不存在的时候127.0.0.1:6379> exists fake_key(integer) 0127.0.0.1:6379> move fake_key 0(error) ERR source and destination objects are the same127.0.0.1:6379> select 0OK127.0.0.1:6379> exists fake_key(integer) 0# 当源数据库和目标数据库有相同的 key 时127.0.0.1:6379> select 0OK127.0.0.1:6379> set favorite_fruit "banana"OK127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> set favorite_fruit "apple"OK127.0.0.1:6379[1]> select 0OK127.0.0.1:6379> move favorite_fruit 1(integer) 0127.0.0.1:6379> get favorite_fruit"banana"127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> get favorite_fruit"apple"
PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。 当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。
127.0.0.1:6379[1]> set mykey "hello"OK127.0.0.1:6379[1]> expire mykey 10(integer) 1127.0.0.1:6379[1]> ttl mykey(integer) 6127.0.0.1:6379[1]> persist mykey(integer) 1127.0.0.1:6379[1]> ttl mykey(integer) -1127.0.0.1:6379[1]> get mykey"hello"
TTL (time to live) 命令以秒为单位返回 key 的剩余过期时间。当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
127.0.0.1:6379[1]> set mykey "hello"OK127.0.0.1:6379[1]> expire mykey 10(integer) 1127.0.0.1:6379[1]> ttl mykey(integer) 6127.0.0.1:6379[1]> persist mykey(integer) 1127.0.0.1:6379[1]> ttl mykey(integer) -1127.0.0.1:6379[1]> get mykey"hello"127.0.0.1:6379[1]> ttl no_exist_key(integer) -2
RANDOMKEY (random key) 命令从当前数据库中随机返回一个 key 。 当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null)。
# 数据库不为空127.0.0.1:6379[1]> randomkey"song"127.0.0.1:6379[1]> randomkey"favorite_fruit"127.0.0.1:6379[1]> randomkey"favorite_fruit"127.0.0.1:6379[1]> keys *1) "song"2) "mykey"3) "favorite_fruit"# 数据库为空127.0.0.1:6379[1]> flushdbOK127.0.0.1:6379[1]> randomkey(nil)127.0.0.1:6379[1]> keys *(empty list or set)
RENAME 命令用于修改 key 的名称 。改名成功时提示 OK ,失败时候返回一个错误。当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值;RENAMEENX 命令用于在新的 key 不存在时修改 key 的名称 。修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。
# key 存在且 newkey 不存在127.0.0.1:6379[1]> set message "hello world"OK127.0.0.1:6379[1]> rename message greetingOK127.0.0.1:6379[1]> exists message(integer) 0127.0.0.1:6379[1]> get greeting"hello world"# newkey 已存在时, RENAME 会覆盖旧 newkey127.0.0.1:6379[1]> set aa "hello"OK127.0.0.1:6379[1]> set bb "world"OK127.0.0.1:6379[1]> rename aa bbOK127.0.0.1:6379[1]> get bb"hello"
SCAN 命令用于迭代数据库中的数据库键。SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
相关命令:
127.0.0.1:6379> scan 01) "2"2) 1) "counter" 2) "nosql" 3) "rmdbs" 4) "key1" 5) "myset2" 6) "myphoen" 7) "key2" 8) "list1" 9) "page_view" 10) "key3" 11) "myphone"127.0.0.1:6379> scan 21) "25"2) 1) "failure_times" 2) "bit" 3) "count" 4) "job" 5) "destset" 6) "myset" 7) "rank" 8) "list2" 9) "myset1" 10) "database" 11) "db"
TYPE 命令用于返回 key 所储存的值的类型。
127.0.0.1:6379[1]> set weather "sunny"OK127.0.0.1:6379[1]> type weatherstring127.0.0.1:6379[1]> lpush book_list "programming in scala"(integer) 1127.0.0.1:6379[1]> type book_listlist127.0.0.1:6379[1]> sadd pat "dog"(integer) 1127.0.0.1:6379[1]> type patset
SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
127.0.0.1:6379[1]> set key "value"OK127.0.0.1:6379[1]> get key"value"127.0.0.1:6379[1]> set key "new_value"OK127.0.0.1:6379[1]> get key"new_value"
GET 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果 key 储存的值不是字符串类型,返回一个错误。返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。
127.0.0.1:6379[1]> set key "value"OK127.0.0.1:6379[1]> get key"value"127.0.0.1:6379[1]> set key "new_value"OK127.0.0.1:6379[1]> get key"new_value"127.0.0.1:6379[1]> del db(integer) 0127.0.0.1:6379[1]> lpush db redis mongodb mysql(integer) 3127.0.0.1:6379[1]> get db(error) WRONGTYPE Operation against a key holding the wrong kind of value127.0.0.1:6379[1]> type dblist
GETRANGE 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。返回截取得到的子字符串。
127.0.0.1:6379> set mykey "This is my test key"OK127.0.0.1:6379> getrange mykey 0 3"This"127.0.0.1:6379> getrange mykey 0 -1"This is my test key"127.0.0.1:6379> getrange mykey(error) ERR wrong number of arguments for 'getrange' command127.0.0.1:6379> get mykey"This is my test key"
GETSET 命令用于设置指定 key 的值,并返回 key 的旧值。当 key 没有旧值时,即 key 不存在时,返回 nil 。当 key 存在但不是字符串类型时,返回一个错误。
127.0.0.1:6379> getset db mongodb(nil)127.0.0.1:6379> get db"mongodb"127.0.0.1:6379> getset db redis"mongodb"127.0.0.1:6379> get db"redis"
GETBIT 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。
127.0.0.1:6379> exists bit(integer) 0127.0.0.1:6379> getbit bit 10086(integer) 0127.0.0.1:6379> setbit bit 10086 1(integer) 0127.0.0.1:6379> getbit bit 10086(integer) 1
SETBIT 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
127.0.0.1:6379> setbit bit 10086 1(integer) 0127.0.0.1:6379> getbit bit 10086(integer) 1127.0.0.1:6379> getbit bit 10085(integer) 0
MGET (multi-get)命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
127.0.0.1:6379> set key1 "hello"OK127.0.0.1:6379> set key2 "world"OK127.0.0.1:6379> mget key1 key2 somekey1) "hello"2) "world"3) (nil)
SETEX (set expire)命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
127.0.0.1:6379> setex mykey 60 redisOK127.0.0.1:6379> ttl mykey(integer) 56127.0.0.1:6379> get mykey"redis"127.0.0.1:6379> ttl mykey(integer) 42127.0.0.1:6379> get mykey(nil)
SETNX(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。设置成功,返回 1 。 设置失败,返回 0 。
127.0.0.1:6379> exists job(integer) 0127.0.0.1:6379> setnx job "programmer"(integer) 1127.0.0.1:6379> setnx job "code_farmer"(integer) 0127.0.0.1:6379> get job"programmer"
SETRANGE 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。返回被修改后的字符串长度。
127.0.0.1:6379> set key1 "Hello World"OK127.0.0.1:6379> setrange key1 6 "Redis"(integer) 11127.0.0.1:6379> get key1"Hello Redis"
STRLEN(string length)命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
127.0.0.1:6379> set mykey "Hello World"OK127.0.0.1:6379> strlen mykey(integer) 11127.0.0.1:6379> strlen no_existing(integer) 0
MSET(multi-set)命令用于同时设置一个或多个 key-value 对。
127.0.0.1:6379> mset key1 "Hello" key2 "World"OK127.0.0.1:6379> get key1"Hello"127.0.0.1:6379> get key2"World"
MSETNX(multi-set if Not eXists这是一个原子操作) 用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。当所有 key 都成功设置,返回 1 。 如果给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
127.0.0.1:6379> msetnx rmdbs "mysql" nosql "mongodb"(integer) 1127.0.0.1:6379> msetnx rmdbs 'sqlite' language 'python'(integer) 0127.0.0.1:6379> exists language(integer) 0127.0.0.1:6379> get rmdbs"mysql"
PSETEX 命令以毫秒为单位设置 key 的生存时间。
redis 127.0.0.1:6379> PSETEX mykey 1000 "Hello"OKredis 127.0.0.1:6379> PTTL mykey999redis 127.0.0.1:6379> GET mykey1) "Hello"
INCR (increase)命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> set page_view 10OK127.0.0.1:6379> incr page_view(integer) 11127.0.0.1:6379> get page_view"11"127.0.0.1:6379> set page_view "19"OK127.0.0.1:6379> incr page_view(integer) 20127.0.0.1:6379> get page_view"20"
INCRBY (increase by)命令将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> set rank 50OK127.0.0.1:6379> incrby rank 20(integer) 70127.0.0.1:6379> get rank"70"127.0.0.1:6379> exists counter(integer) 0127.0.0.1:6379> incrby counter 30(integer) 30127.0.0.1:6379> get counter"30"
INCRBYFLOAT (increase by float)命令为 key 中所储存的值加上指定的浮点数增量值。如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。
127.0.0.1:6379> set mykey 314e-2OK127.0.0.1:6379> get mykey"314e-2"127.0.0.1:6379> incrbyfloat mykey 0"3.14"127.0.0.1:6379> set mykey 3OK127.0.0.1:6379> incrbyfloat mykey 1.1"4.1"127.0.0.1:6379> set mykey 3.0OK127.0.0.1:6379> get mykey"3.0"127.0.0.1:6379> incrbyfloat mykey 1.00000"4"127.0.0.1:6379> get mykey"4"
DECR (decrease)命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> set failure_times 10OK127.0.0.1:6379> decr failure_times(integer) 9127.0.0.1:6379> exists count(integer) 0127.0.0.1:6379> decr count(integer) -1
DECRBY (decrease by)命令将 key 所储存的值减去指定的减量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> set count 100OK127.0.0.1:6379> decrby count 20(integer) 80127.0.0.1:6379> exists pages(integer) 0127.0.0.1:6379> decrby pages 10(integer) -10
APPEND 命令用于为指定的 key 追加值。如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。返回追加指定值之后, key 中字符串的长度。
127.0.0.1:6379> exists myphone(integer) 0127.0.0.1:6379> append myphone "nokia" (integer) 5127.0.0.1:6379> append myphone " - 1110"(integer) 12127.0.0.1:6379> get myphone"nokia - 1110"
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
HDEL (hash delete)命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。返回被成功删除字段的数量,不包括被忽略的字段。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hdel myhash field1(integer) 1127.0.0.1:6379> hdel myhash field2(integer) 0
HEXISTS (hash exists)命令用于查看哈希表的指定字段是否存在。如果哈希表含有给定字段,返回 1 ; 如果哈希表不含有给定字段,或 key 不存在,返回 0 。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hexists myhash field1(integer) 1127.0.0.1:6379> hexists myhash field2(integer) 0
HGET (hash get)命令用于返回哈希表中指定字段的值。返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。
127.0.0.1:6379> hset site redis redis.com(integer) 1127.0.0.1:6379> hget site redis"redis.com"127.0.0.1:6379> hget site mysql(nil)
HGETALL (hash get all)命令用于返回哈希表中所有字段和值。在返回值里,紧跟每个字段名之后是字段的值,所以返回值的长度是哈希表大小的两倍。以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。
127.0.0.1:6379> hset myhash file1 "Hello"(integer) 1127.0.0.1:6379> hset myhash field1 "Hello"(integer) 0127.0.0.1:6379> hset myhash field2 "World"(integer) 1127.0.0.1:6379> hgetall myhash1) "field1"2) "Hello"3) "file1"4) "Hello"5) "field2"6) "World"
HINCRBY (hash increase by)命令用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。返回执行 HINCRBY 命令之后,哈希表中字段的值。
127.0.0.1:6379> hset myhash field 5(integer) 1127.0.0.1:6379> hincrby myhash field 1(integer) 6127.0.0.1:6379> hincrby myhash field -1(integer) 5127.0.0.1:6379> hincrby myhash field -10(integer) -5
HINCRBYFLOAT (hash increase by float)命令用于为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。返回执行 Hincrbyfloat 命令之后,哈希表中字段的值。
127.0.0.1:6379> hset mykey field 10.50(integer) 1127.0.0.1:6379> hincrbyfloat mykey field 0.1"10.6"127.0.0.1:6379> hincrbyfloat mykey field -5"5.6"127.0.0.1:6379> hset mykey field 5.0e3(integer) 0127.0.0.1:6379> hincrbyfloat mykey field 2.0e2"5200"
HKEYS (hash keys)命令用于获取哈希表中的所有字段(field)。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hset myhash field2 "bar"(integer) 1127.0.0.1:6379> hkeys myhash1) "field1"2) "field2"
HLEN (hash length)命令用于获取哈希表中字段的数量。返回哈希表中字段的数量。 当 key 不存在时,返回 0 。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hset myhash field2 "bar"(integer) 1127.0.0.1:6379> hlen myhash(integer) 2
HMGET (hash multi-get)命令用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hset myhash field2 "bar"(integer) 1127.0.0.1:6379> hget myhash field1"foo"127.0.0.1:6379> hmget myhash field1 field21) "foo"2) "bar"127.0.0.1:6379> hmget myhash field1 field2 nofield1) "foo"2) "bar"3) (nil)
HMSET (hash multi-set)命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。如果命令执行成功,返回 OK 。
127.0.0.1:6379> hmset myhash field1 "Hello" field2 "World"OK127.0.0.1:6379> hmget myhash field1 field21) "Hello"2) "World"
HSET (hash set)命令用于为哈希表中的字段赋值 。如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hget myhash field1"foo"127.0.0.1:6379> hset website google "www.g.cn"(integer) 1127.0.0.1:6379> hset website google "www.google.com"(integer) 0
Hsetnx (hash set if Not eXists)命令用于为哈希表中不存在的的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
127.0.0.1:6379> hsetnx myhash field1 "bar"(integer) 1127.0.0.1:6379> hsetnx myhash field1 "foo"(integer) 0127.0.0.1:6379> hget myhash field1"bar"
HVALS (hash values)命令返回哈希表所有字段的值。返回一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。
127.0.0.1:6379> hset myhash field1 "foo"(integer) 1127.0.0.1:6379> hset myhash field2 "bar"(integer) 1127.0.0.1:6379> hkeys myhash1) "field1"2) "field2"127.0.0.1:6379> hvals myhash1) "foo"2) "bar"
HSCAN (hash scan)命令用于迭代哈希表中的键值对。返回的每个元素都是一个元组,每一个元组元素由一个字段 (field) 和值(value)组成。
127.0.0.1:6379> 127.0.0.1:6379> HMSET sites google "google.com" runoob "runoob.com" weibo "weibo.com" 4 "taobao.com"OK127.0.0.1:6379> hscan sites 0 match "run*"1) "0"2) 1) "runoob" 2) "runoob.com"127.0.0.1:6379> hscan sites 1 match "*oo*"1) "0"2) 1) "google" 2) "google.com" 3) "runoob" 4) "runoob.com"
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
BLPOP (block left pop)命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> blpop list1 10(nil)(10.07s)
BRPOP (block right pop)命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> rpush list1 a b c(integer) 3127.0.0.1:6379> brpop list1 01) "list1"2) "c"
BRPOPLPUSH (block right pop left push)命令从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。
127.0.0.1:6379> lrange list1 0 -11) "a"2) "b"127.0.0.1:6379> lrange list2 0 -1(empty list or set)127.0.0.1:6379> brpoplpush list1 list2(error) ERR wrong number of arguments for 'brpoplpush' command127.0.0.1:6379> brpoplpush list1 list2 0"b"127.0.0.1:6379> lrange list1 0 -11) "a"127.0.0.1:6379> lrange list2 0 -11) "b"127.0.0.1:6379> brpoplpush list1 list2 0"a"127.0.0.1:6379> brpoplpush list1 list2 5(nil)(5.07s)127.0.0.1:6379> lrange list1 0 -1(empty list or set)127.0.0.1:6379> lrange list2 0 -11) "a"2) "b"
LINDEX (list index)命令用于通过索引获取列表中的元素。以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素。列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。
(integer) 1127.0.0.1:6379> lpush mylist "world"(integer) 1127.0.0.1:6379> lpush mylist "hello"(integer) 2127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "world"127.0.0.1:6379> lindex mylist 0"hello"127.0.0.1:6379> lindex mylist 1"world"127.0.0.1:6379> lindex mylist -1"world"127.0.0.1:6379> lindex mylist 2(nil)
LINSERT (list insert)命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。
127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "world"127.0.0.1:6379> linsert mylist before "world" "there"(integer) 3127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "there"3) "world"127.0.0.1:6379> linsert mylist after "hello" "great"(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "great"3) "there"4) "world"
LLen(list Length)命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "great"3) "there"4) "world"127.0.0.1:6379> llen list1(integer) 0127.0.0.1:6379> llen mylist(integer) 4
LPOP (left pop)命令用于移除并返回列表的第一个元素。列表的第一个元素。 当列表 key 不存在时,返回 nil 。
127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "great"3) "there"4) "world"127.0.0.1:6379> lpop mylist"hello"127.0.0.1:6379> lpop list1(nil)
LPUSH (left push)命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。返回执行 LPUSH 命令后,列表的长度。
127.0.0.1:6379> lrange mylist 0 -11) "great"2) "there"3) "world"127.0.0.1:6379> lpush mylist "foo"(integer) 4127.0.0.1:6379> lpush mylist "bar"(integer) 5127.0.0.1:6379> lrange mylist 0 -11) "bar"2) "foo"3) "great"4) "there"5) "world"
LPUSHX (left push if eXists)将一个值插入到已存在的列表头部,列表不存在时操作无效。返回 LPUSHX 命令执行之后,列表的长度。
127.0.0.1:6379> lpushx mylist "looking"(integer) 6127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "bar"3) "foo"4) "great"5) "there"6) "world"127.0.0.1:6379> lpushx not-exist "looking"(integer) 0
LRANGE (list range)返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。返回一个包含指定区间内元素的列表。
127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "bar"3) "foo"4) "great"5) "there"6) "world"127.0.0.1:6379> lrange mylist 0 01) "looking"127.0.0.1:6379> lrange mylist 2 0(empty list or set)
LREM (list remove)根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
返回被移除元素的数量。 列表不存在时返回 0 。
127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "looking"3) "foo"4) "great"5) "looking"6) "there"7) "world"127.0.0.1:6379> lrem mylist -1 "looking"(integer) 1127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "looking"3) "foo"4) "great"5) "there"6) "world"127.0.0.1:6379> lrem mylist 1 "looking"(integer) 1127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "foo"3) "great"4) "there"5) "world"127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "foo"3) "great"4) "there"5) "world"127.0.0.1:6379> lrem mylist 0 "great"(integer) 1127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "foo"3) "there"4) "world"
LSET (list set)通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。操作成功返回 ok ,否则返回错误信息。
127.0.0.1:6379> lrange mylist 0 -11) "looking"2) "foo"3) "there"4) "world"127.0.0.1:6379> lset mylist 0 "hello"OK127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "foo"3) "there"4) "world"127.0.0.1:6379> lset mylist 10 "hello"(error) ERR index out of range
LTRIM (list trim)对一个列表进行修剪,就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。命令执行成功时,返回 ok 。
127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "foo"3) "there"4) "world"127.0.0.1:6379> ltrim mylist 1 2OK127.0.0.1:6379> lrange mylist 0 -11) "foo"2) "there"
RPOP (right pop)命令用于移除列表的最后一个元素,返回值为移除的元素。返回被移除的元素。当列表不存在时,返回 nil 。
127.0.0.1:6379> lrange mylist 0 -11) "world"2) "hello"3) "there"127.0.0.1:6379> rpop mylist"there"127.0.0.1:6379> rpop non-exist(nil)
RPOPLPUSH (right pop left push)命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。返回被弹出的元素。
127.0.0.1:6379> lrange list1 0 -11) "a"2) "b"127.0.0.1:6379> lrange list2 0 -1(empty list or set)127.0.0.1:6379> rpoplpush list1 list2"b"127.0.0.1:6379> lrange list1 0 -11) "a"127.0.0.1:6379> lrange list2 0 -11) "b"
RPUSH (right push)命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。返回执行 RPUSH 操作后,列表的长度。
127.0.0.1:6379> lrange mylist 0 -11) "world"2) "hello"127.0.0.1:6379> rpush mylist "foo"(integer) 3127.0.0.1:6379> rpush mylist "bar"(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "world"2) "hello"3) "foo"4) "bar"
RPUSHX (right push if eXists)命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。返回执行 Rpushx 操作后,列表的长度。
127.0.0.1:6379> rpushx non-exist "hello"(integer) 0127.0.0.1:6379> lrange non-exist 0 -1(empty list or set)127.0.0.1:6379> rpushx mylist "great"(integer) 5127.0.0.1:6379> lrange mylist 0 -11) "world"2) "hello"3) "foo"4) "bar"5) "great"
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
SADD 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。返回被添加到集合中的新元素的数量,不包括被忽略的元素。
127.0.0.1:6379> sadd myset redis(integer) 1127.0.0.1:6379> sadd myset mysql(integer) 1127.0.0.1:6379> sadd myset mysql(integer) 0127.0.0.1:6379> smembers myset1) "mysql"2) "redis"
SCARD 命令返回集合中元素的数量。 当集合 key 不存在时,返回 0 。
127.0.0.1:6379> smembers myset1) "mysql"2) "redis"127.0.0.1:6379> scard myset(integer) 2127.0.0.1:6379> scard non-exist(integer) 0
SDIFF 命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。返回包含差集成员的列表。
127.0.0.1:6379> smembers key11) "a"2) "b"3) "c"127.0.0.1:6379> smembers key21) "d"2) "e"3) "c"127.0.0.1:6379> sdiff key1 key21) "a"2) "b"
SDIFFSTORE 命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。返回结果集中的元素数量。
127.0.0.1:6379> smembers key11) "a"2) "b"3) "c"127.0.0.1:6379> smembers key21) "d"2) "e"3) "c"127.0.0.1:6379> sdiff key1 key21) "a"2) "b"127.0.0.1:6379> sdiffstore destset key1 key2(integer) 2127.0.0.1:6379> smembers destset1) "a"2) "b"
SINTER 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。返回交集成员的列表。
127.0.0.1:6379> smembers key11) "a"2) "b"3) "c"127.0.0.1:6379> smembers key21) "d"2) "e"3) "c"127.0.0.1:6379> sinter key1 key21) "c"
SINTERSTORE 命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。返回存储交集的集合的元素数量。
127.0.0.1:6379> smembers key11) "a"2) "b"3) "c"127.0.0.1:6379> smembers key21) "d"2) "e"3) "c"127.0.0.1:6379> sinterstore key3 key1 key2(integer) 1127.0.0.1:6379> smembers key31) "c"
SISMEMBER 命令判断成员元素是否是集合的成员。如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。
127.0.0.1:6379> smembers destset1) "a"2) "b"127.0.0.1:6379> sismember destset "hello"(integer) 0127.0.0.1:6379> sismember destset "a"(integer) 1
SMEMBERS 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
127.0.0.1:6379> smembers key11) "a"2) "b"3) "c"127.0.0.1:6379> smembers key21) "d"2) "e"3) "c"
Smove (原子性操作) 命令将指定成员 member 元素从 source 集合移动到 destination 集合。如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时,返回一个错误。
如果成员元素被成功移除,返回 1 。 如果成员元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。
127.0.0.1:6379> smembers myset11) "world"2) "bar"3) "hello"127.0.0.1:6379> smembers myset21) "foo"127.0.0.1:6379> smove myset1 myset2 "bar"(integer) 1127.0.0.1:6379> smembers myset11) "world"2) "hello"127.0.0.1:6379> smembers myset21) "foo"2) "bar"127.0.0.1:6379> smove myset1 myset2 "non-exist"(integer) 0
SPOP 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。
该命令类似 命令,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。返回被移除的随机元素。 当集合不存在或是空集时,返回 nil 。
127.0.0.1:6379> smembers myset1) "mysql"2) "mongodb"3) "redis"127.0.0.1:6379> spop myset"mongodb"127.0.0.1:6379> smembers myset1) "mysql"2) "redis"
SRANDMEMBER 命令用于返回集合中的一个随机元素。
从 Redis 2.6 版本开始, Srandmember 命令接受可选的 count 参数:
该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。
只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。
127.0.0.1:6379> smembers myset1) "mysql"2) "mongodb"3) "redis"127.0.0.1:6379> srandmember myset 21) "mysql"2) "redis"127.0.0.1:6379> srandmember myset 21) "redis"2) "mongodb"127.0.0.1:6379> smembers myset1) "mysql"2) "mongodb"3) "redis"127.0.0.1:6379> srandmember myset"mongodb"127.0.0.1:6379> srandmember myset"mysql"
SREM 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。当 key 不是集合类型,返回一个错误。返回被成功移除的元素的数量,不包括被忽略的元素。
127.0.0.1:6379> smembers myset1) "mysql"2) "mongodb"3) "redis"127.0.0.1:6379> srem myset "mongodb"(integer) 1127.0.0.1:6379> smembers myset1) "mysql"2) "redis"127.0.0.1:6379> srem myset "non-exist"(integer) 0127.0.0.1:6379> smembers myset1) "mysql"2) "redis"
SUNION 命令返回给定集合的并集。不存在的集合 key 被视为空集。返回并集成员的列表。
127.0.0.1:6379> smembers myset11) "great"2) "world"3) "hello"127.0.0.1:6379> smembers myset21) "great"2) "foo"3) "bar"127.0.0.1:6379> sunion myset1 myset21) "great"2) "foo"3) "world"4) "hello"5) "bar"
SUNIONSTORE 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖。返回结果集中的元素数量。
127.0.0.1:6379> smembers myset11) "great"2) "world"3) "hello"127.0.0.1:6379> smembers myset21) "great"2) "foo"3) "bar"127.0.0.1:6379> sunionstore myset3 myset1 myset2(integer) 5127.0.0.1:6379> smembers myset31) "great"2) "foo"3) "world"4) "hello"5) "bar"
SSCAN 命令用于迭代集合中键的元素,Sscan 继承自 。
Sscan 命令基本语法如下:
SSCAN key cursor [MATCH pattern] [COUNT count]
返回匹配到的数组列表。
127.0.0.1:6379> smembers myset31) "great"2) "foo"3) "world"4) "hello"5) "bar"127.0.0.1:6379> sscan myset3 0 match *l*1) "0"2) 1) "world" 2) "hello"127.0.0.1:6379> sscan myset3 0 match *o*1) "0"2) 1) "foo" 2) "world" 3) "hello"
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
不过我很好奇的是,为什么 redis 有序集合相关的命令是以 Z 打头呢?
ZADD 命令用于将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
分数值可以是整数值或双精度浮点数。如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。
127.0.0.1:6379> zadd myzset 1 "one"(integer) 1127.0.0.1:6379> zadd myzset 1 "uno"(integer) 1127.0.0.1:6379> zadd myzset 2 "two" 3 "three"(integer) 2127.0.0.1:6379> zrange myzset 0 -11) "one"2) "uno"3) "two"4) "three"127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"3) "uno"4) "1"5) "two"6) "2"7) "three"8) "3"
ZCARD 命令用于计算集合中元素的数量。当 key 存在且是有序集类型时,返回有序集的基数。 当 key 不存在时,返回 0 。
127.0.0.1:6379> zrange myzset 0 -11) "one"2) "uno"3) "two"4) "three"127.0.0.1:6379> zcard myzset(integer) 4
ZCOUNT 命令用于计算有序集合中指定分数区间的成员数量。返回分数值在 min 和 max 之间的成员的数量。
127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"3) "uno"4) "1"5) "two"6) "2"7) "three"8) "3"127.0.0.1:6379> zcount myzset 2 3(integer) 2
ZINCRBY 命令对有序集合中指定成员的分数加上增量 increment,可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。分数值可以是整数值或双精度浮点数。 以字符串形式返回成员的新分数值。
127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"3) "uno"4) "1"5) "two"6) "2"7) "three"8) "3"127.0.0.1:6379> zincrby myzset 2 "one""3"127.0.0.1:6379> zrange myzset 0 -1 withscores1) "uno"2) "1"3) "two"4) "2"5) "one"6) "3"7) "three"8) "3"
ZINTERSTORE 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。返回保存到目标结果集的的成员数量。
127.0.0.1:6379> zrange mid_test 0 -1 withscores1) "Han Meimei"2) "70"3) "Li Lei"4) "70"5) "Tom"6) "99.5"127.0.0.1:6379> zrange fin_test 0 -1 withscores1) "Han Meimei"2) "75"3) "Li Lei"4) "88"5) "Tom"6) "99.5"127.0.0.1:6379> zinterstore sum_point 2 mid_test fin_test(integer) 3127.0.0.1:6379> zrange sum_point 0 -1 withscores1) "Han Meimei"2) "145"3) "Li Lei"4) "158"5) "Tom"6) "199"
ZLEXCOUNT 命令在计算有序集合中指定字典区间内成员数量。返回指定区间内的成员数量。
127.0.0.1:6379> zadd myzset 0 a 0 b 0 c 0 d 0 e(integer) 5127.0.0.1:6379> zrange myzset 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> zlexcount myzset - +(integer) 5127.0.0.1:6379> zlexcount myzset [b [f(integer) 4
ZRANGE 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列。
如果你需要成员按值递减(从大到小)来排列,请使用 命令。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。返回指定区间内,带有分数值(可选)的有序集成员的列表。
127.0.0.1:6379> zrange myzset 0 -11) "a"2) "b"3) "c"4) "d"5) "e"127.0.0.1:6379> zrange myzset 2 41) "c"2) "d"3) "e"
ZRANGEBYLEX 通过字典区间返回有序集合的成员。至于例子中的括号 [ 和 ( ,如果你学过数学区间那一章节的话,应该不需要我再解释什么了。返回指定区间内的元素列表。
127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g(integer) 7127.0.0.1:6379> zrangebylex myzset - [c1) "a"2) "b"3) "c"127.0.0.1:6379> zrangebylex myzset - (c1) "a"2) "b"127.0.0.1:6379> zrangebylex myzset [a (f1) "a"2) "b"3) "c"4) "d"5) "e"
ZRANGEBYSCORE 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。
127.0.0.1:6379> zrange salary 0 -11) "jack"2) "tom"3) "peter"127.0.0.1:6379> zrangebyscore salary 0 200001) "jack"2) "tom"3) "peter"127.0.0.1:6379> zrangebyscore salary 0 100001) "jack"2) "tom"127.0.0.1:6379> zrangebyscore salary (5000 10000(empty list or set)127.0.0.1:6379> zrangebyscore salary 5000 100001) "tom"
ZRANK 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。如果成员是有序集 key 的成员,返回 member 的排名。 如果成员不是有序集 key 的成员,返回 nil 。
127.0.0.1:6379> zrange salary 0 -1 withscores1) "jack"2) "2500"3) "tom"4) "5000"5) "peter"6) "12000"127.0.0.1:6379> zrank salary peter(integer) 2127.0.0.1:6379> zrank salary tom(integer) 1127.0.0.1:6379> zrank salary jack(integer) 0127.0.0.1:6379> zrank salary unknown(nil)
ZREM 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。被成功移除的成员的数量,不包括被忽略的成员。
127.0.0.1:6379> zrange salary 0 -11) "jack"2) "tom"3) "peter"127.0.0.1:6379> zrem salary tom(integer) 1127.0.0.1:6379> zrange salary 0 -11) "jack"2) "peter"127.0.0.1:6379> zrem salary non-exist(integer) 0
ZREMRANGEBYLEX 命令用于移除有序集合中给定的字典区间的所有成员。返回被成功移除的成员的数量,不包括被忽略的成员。
127.0.0.1:6379> zrange myzset 0 -1 1) "ALPHA" 2) "aaaa" 3) "alpha" 4) "b" 5) "c" 6) "d" 7) "e" 8) "foo" 9) "zap"10) "zip"127.0.0.1:6379> zremrangebylex myzset [alpha [omega(integer) 6127.0.0.1:6379> zrange myzset 0 -11) "ALPHA"2) "aaaa"3) "zap"4) "zip"
ZREMRANGEBYRANK 命令用于移除有序集中,指定排名(rank)区间内的所有成员。返回被移除成员的数量。
127.0.0.1:6379> zrange salary 0 -11) "jack"2) "tom"3) "peter"127.0.0.1:6379> zremrangebyrank salary 0 1(integer) 2127.0.0.1:6379> zrange salary 0 -11) "peter"
ZREMRANGEBYSCORE 命令用于移除有序集中,指定分数(score)区间内的所有成员。返回被移除成员的数量。
127.0.0.1:6379> zrange salary 0 -1 withscores1) "tom"2) "2000"3) "jack"4) "5000"5) "peter"6) "12000"127.0.0.1:6379> zremrangebyscore salary 4500 5500(integer) 1127.0.0.1:6379> zrange salary 0 -1 withscores1) "tom"2) "2000"3) "peter"4) "12000"
ZREVRANGE 命令返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 命令一样。返回指定区间内,带有分数值(可选)的有序集成员的列表。
127.0.0.1:6379> zrange salary 0 -1 withscores1) "tom"2) "2000"3) "jack"4) "5000"5) "peter"6) "12000"127.0.0.1:6379> zrevrange salary 0 -1 withscores1) "peter"2) "12000"3) "jack"4) "5000"5) "tom"6) "2000"
ZREVRANGEBYSCORE 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。
除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 命令一样。指定区间内,带有分数值(可选)的有序集成员的列表。
127.0.0.1:6379> zrange salary 0 -1 withscores1) "tom"2) "2000"3) "jack"4) "5000"5) "peter"6) "12000"127.0.0.1:6379> zrevrangebyscore salary 10000 10001) "jack"2) "tom"
ZREVRANK 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名。如果成员是有序集 key 的成员,返回成员的排名。 如果成员不是有序集 key 的成员,返回 nil 。
127.0.0.1:6379> zrange salary 0 -1 withscores1) "tom"2) "2000"3) "jack"4) "5000"5) "peter"6) "12000"127.0.0.1:6379> zrevrank salary tom(integer) 2127.0.0.1:6379> zrevrank salary tomm(nil)
ZUNIONSTORE 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。返回保存到结果集的成员数量。
127.0.0.1:6379> zrange zset1 0 -11) "two"127.0.0.1:6379> zrange zset2 0 -11) "one"2) "two"3) "three"127.0.0.1:6379> zunionstore out 2 zset1 zset2(integer) 3127.0.0.1:6379> zrange out 0 -11) "one"2) "three"3) "two"127.0.0.1:6379> zrange zset1 0 -1 withscores1) "two"2) "2"127.0.0.1:6379> zrange zset2 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"127.0.0.1:6379> zunionstore out 2 zset1 zset2 weights 2 3(integer) 3# weights 很好理解,对应分数加权求和。3) "two"127.0.0.1:6379> zrange out 0 -1 withscores1) "one"2) "3"3) "three"4) "9"5) "two"6) "10"
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值),返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。
127.0.0.1:6379> zadd site 1 "Google" 2 "Runoob" 3 "Taobao" 4 "Weibo"(integer) 4127.0.0.1:6379> zscan site 0 match oo1) "0"2) (empty list or set)127.0.0.1:6379> zscan site 0 match *oo*1) "0"2) 1) "Google" 2) "1" 3) "Runoob" 4) "2"
psubscribe 命令订阅一个或多个符合给定模式的频道。
publish 命令用于将信息发送到指定的频道。
subscribe 命令用于订阅给定的一个或多个频道的信息。
punsubscribe 命令用于退订所有给定模式的频道。
unsubscribe 命令用于退订给定的一个或多个频道的信息。
[root@master ~]# redis-cli127.0.0.1:6379> subscribe chatReading messages... (press Ctrl-C to quit)1) "subscribe"2) "chat"3) (integer) 11) "message"2) "chat"3) "hello"1) "message"2) "chat"3) "world"
[root@master ~]# redis-cli127.0.0.1:6379> publish chat "hello"(integer) 1127.0.0.1:6379> publish chat "world"(integer) 1
# subscribe.pyimport redispool = redis.ConnectionPool(host='localhost', port=6379)r = redis.StrictRedis(connection_pool=pool) # 利用连接池进行连接p = r.pubsub()p.subscribe("Core") # 订阅通道tmp = p.listen() # 监听订阅的通道for item in tmp: if item['type'] == 'message': receive_msg = item['data'].decode() print("From %s get message : %s" % (item['channel'].decode(), receive_msg))p.unsubscribe("Core") # 取消订阅通道Coreprint("取消订阅")"D:\Program Files\Python36\python3.exe" D:/MyProject/Python/Redis/testSubscribe.pyFrom Core get message : START_20181017083830_254b019374bb3dce1f5b1e9a11ef7fa9@172.24.177.16:6387_14_100_1899124xxxxFrom Core get message : START_20181017083831_453317be7eef32eb5fc3b90f1c98f517@172.24.177.16:6387_14_100_1899890xxxxFrom Core get message : START_20181017083832_7a7418d957f147f960ad3918525146fa@172.24.177.16:6387_14_100_1899460xxxx
# publish.pyimport redisimport timeimport csvpool = redis.ConnectionPool(host='localhost', port=6379)r = redis.StrictRedis(connection_pool=pool)lines = csv.reader(open("D:/MyProject/Python/Redis/ASR.txt", encoding="utf-8", errors="ignore"))for line in lines: msg_list = line[0].split('_') print(msg_list) if msg_list[0] == "START": r.publish('Core', line) time.sleep(3) else: r.publish(msg_list[2], line) time.sleep(0.01)"D:\Program Files\Python36\python3.exe" D:/MyProject/Python/Redis/testPublish.py['START', '20181017083830', '254b019374bb3dce1f5b1e9a11ef7fa9@172.24.177.16:6387', '14', '100', '1899124xxxx']['END', '20181017083830', '254b019374bb3dce1f5b1e9a11ef7fa9@172.24.177.16:6387', '14', '8888', '']['END', '20181017083830', '254b019374bb3dce1f5b1e9a11ef7fa9@172.24.177.16:6387', '14', '100', '100']['START', '20181017083831', '453317be7eef32eb5fc3b90f1c98f517@172.24.177.16:6387', '14', '100', '1899890xxxx']
# subscribe.rbrequire 'redis'redis = Redis.new(host: "localhost", port: 6379)redis.subscribe("Core") do |on| on.message do |channel, message| puts "From #{channel} get message : #{message}" endend[root@master ruby_learning]# ruby subscribe.rb From Core get message : helloFrom Core get message : world
# publish.rbrequire 'redis'redis = Redis.new(:host => "localhost", :port => 6379)redis.publish("Core", "hello")redis.publish("Core", "world")
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
一个事务从开始到执行会经历以下三个阶段:
127.0.0.1:6379> multiOK127.0.0.1:6379> set name "Looking"QUEUED127.0.0.1:6379> get nameQUEUED127.0.0.1:6379> sadd age 25QUEUED127.0.0.1:6379> smembers ageQUEUED127.0.0.1:6379> exec1) OK2) "Looking"3) (integer) 14) 1) "25"
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
DISCARD 命令用于取消事务,放弃执行事务块内的所有命令。
127.0.0.1:6379> multiOK127.0.0.1:6379> pingQUEUED127.0.0.1:6379> set greeting "hello world"QUEUED127.0.0.1:6379> discardOK
EXEC 命令用于执行所有事务块内的命令。事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 nil 。
127.0.0.1:6379> multiOK127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> pingQUEUED127.0.0.1:6379> exec1) (integer) 12) (integer) 23) (integer) 34) PONG
MULTI 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性地执行。
127.0.0.1:6379> multiOK127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> incr user_idQUEUED127.0.0.1:6379> pingQUEUED127.0.0.1:6379> exec1) (integer) 12) (integer) 23) (integer) 34) PONG
WATCH 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
127.0.0.1:6379> watch lock lock_timesOK127.0.0.1:6379> get lock(nil)127.0.0.1:6379> multiOK127.0.0.1:6379> set lock "Looking"QUEUED127.0.0.1:6379> incr lock_timesQUEUED127.0.0.1:6379> exec1) OK2) (integer) 1127.0.0.1:6379> 127.0.0.1:6379> watch lock lock_timesOK127.0.0.1:6379> multiOK127.0.0.1:6379> set lock "looking"QUEUED# 就在这时,另一个客户端修改了 lock_times 的值127.0.0.1:6379> incr lock_timesQUEUED127.0.0.1:6379> exec(nil)
UNWATCH 命令用于取消 WATCH 命令对所有 key 的监视。
127.0.0.1:6379> unwatchOK
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second1) "key1"2) "key2"3) "first"4) "second"
EVALSHA 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样。
127.0.0.1:6379> script load "return 'hello world'""5332031c6b470dc5a0dd9b4bf2030dea6d65de91"127.0.0.1:6379> evalsha "5332031c6b470dc5a0dd9b4bf2030dea6d65de91" 0"hello world"
Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中。返回一个列表,包含 0 和 1 ,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面了。
列表中的元素和给定的 SHA1 校验和保持对应关系,比如列表的第三个元素的值就表示第三个 SHA1 校验和所指定的脚本在缓存中的状态。
127.0.0.1:6379> script load "return 'hello world'""5332031c6b470dc5a0dd9b4bf2030dea6d65de91"127.0.0.1:6379> script exists "5332031c6b470dc5a0dd9b4bf2030dea6d65de91"1) (integer) 1127.0.0.1:6379> script flushOK127.0.0.1:6379> script exists "5332031c6b470dc5a0dd9b4bf2030dea6d65de91"1) (integer) 0
Script Flush 命令用于清除所有 Lua 脚本缓存。
127.0.0.1:6379> script flushOK
Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。
SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。
127.0.0.1:6379> script kill(error) NOTBUSY No scripts in execution right now.
Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。如果给定的脚本已经在缓存里面了,那么不执行任何操作。
在脚本被加入到缓存之后,通过 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。脚本可以在缓存中保留无限长的时间,直到执行 为止。
127.0.0.1:6379> script load "return 'hello world'""5332031c6b470dc5a0dd9b4bf2030dea6d65de91"
连接命令主要是用于连接 redis 服务。
AUTH 命令用于检测给定的密码和配置文件中的密码是否相符。
127.0.0.1:6379> auth looking(error) ERR Client sent AUTH, but no password is set# 设置密码127.0.0.1:6379> config set requirepass "looking"OK127.0.0.1:6379> auth lookingOK127.0.0.1:6379> auth dfd(error) ERR invalid password127.0.0.1:6379> set key1 34(error) NOAUTH Authentication required.127.0.0.1:6379> auth lookingOK127.0.0.1:6379> set key1 34OK# 删除密码127.0.0.1:6379> config set requirepass ''OK
ECHO 命令用于打印给定的字符串。
127.0.0.1:6379> echo "hello world""hello world"
PING 命令使用客户端向 Redis 服务器发送一个 PING ,通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。如果连接正常就返回一个 PONG ,否则返回一个连接错误。
# 客户端和服务器连接正常127.0.0.1:6379> PINGPONG# 客户端和服务器连接不正常(网络不正常或服务器未能正常运行)127.0.0.1:6379> PINGCould not connect to Redis at 127.0.0.1:6379: Connection refused
QUIT 命令用于关闭与当前客户端与redis服务的连接。一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。
127.0.0.1:6379> quit[root@master ruby_learning]#
SELECT 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
127.0.0.1:6379> SET db_number 0 # 默认使用 0 号数据库OK127.0.0.1:6379> SELECT 1 # 使用 1 号数据库OK127.0.0.1:6379[1]> GET db_number # 已经切换到 1 号数据库,注意 Redis 现在的命令提示符多了个 [1] # 在 1 号数据库当然时取不到 0 号数据库的 key 啦!(nil)127.0.0.1:6379[1]> SET db_number 1OK127.0.0.1:6379[1]> GET db_number"1"127.0.0.1:6379[1]> SELECT 3 # 再切换到 3 号数据库OK127.0.0.1:6379[3]> # 提示符从 [1] 改变成了 [3]
服务器命令主要是用于管理 redis 服务,一般最好是谨慎操作。
Bgrewriteaof 命令用于异步执行一个 AOF(AppendOnly File) 文件重写操作。重写会创建一个当前 AOF 文件的体积优化版本。
即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改。
127.0.0.1:6379> bgrewriteaofBackground append only file rewriting started
Bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
127.0.0.1:6379> bgsaveBackground saving started
Debug Segfault 命令执行一个非法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 调试。如果执行后进不去服务了,记得重启一下服务就好。
127.0.0.1:6379> debug segfaultCould not connect to Redis at 127.0.0.1:6379: Connection refused(0.53s)[root@master ruby_learning]# redis-cliCould not connect to Redis at 127.0.0.1:6379: Connection refused[root@master ruby_learning]# service redis startRedirecting to /bin/systemctl start redis.service[root@master ruby_learning]# redis-cli127.0.0.1:6379>
Client Kill 命令用于关闭客户端连接。
# 列出所有已连接客户端127.0.0.1:6379> CLIENT LISTaddr=127.0.0.1:43501 fd=5 age=10 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client# 杀死当前客户端的连接127.0.0.1:6379> CLIENT KILL 127.0.0.1:43501OK# 之前的连接已经被关闭,CLI 客户端又重新建立了连接# 之前的端口是 43501 ,现在是 43504127.0.0.1:6379> CLIENT LISTaddr=127.0.0.1:43504 fd=5 age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
Client Getname 命令用于返回 命令为连接设置的名字。 因为新创建的连接默认是没有名字的, 对于没有名字的连接, CLIENT GETNAME 返回 nil 。
127.0.0.1:6379> client getname(nil)127.0.0.1:6379> client setname hello-worldOK127.0.0.1:6379> client getname"hello-world"
Client Pause 命令用于阻塞客户端命令一段时间(以毫秒计)。
127.0.0.1:6379> client pause 5000OK127.0.0.1:6379> get key1# "34" 会等一会儿才输出来"34"(1.42s)
Client Setname 命令用于指定当前连接的名称。这个名字会显示在 命令的结果中, 用于识别当前正在与服务器进行连接的客户端。
127.0.0.1:6379> client setname hello-worldOK127.0.0.1:6379> client getname"hello-world"
Client Slots 命令用于当前的集群状态,以数组形式展示。 如果显示 support disabled ,请开启集群功能。
yum 安装的话 redis.conf 一般会在 /etc 目录下。
[root@master etc]# pwd/etc[root@master etc]# ll redis.conf-rw-r-----. 1 redis root 46727 Nov 27 15:38 redis.conf[root@master etc]# vim redis.conf# Normal Redis instances can't be part of a Redis Cluster; only nodes that are# started as cluster nodes can. In order to start a Redis instance as a# cluster node enable the cluster support uncommenting the following:#cluster-enabled yes# Every cluster node has a cluster configuration file. This file is not[root@master ~]# service redis restartRedirecting to /bin/systemctl restart redis.service
127.0.0.1:6379> cluster slots(error) ERR This instance has cluster support disabled
Command 命令用于返回所有的Redis命令的详细信息,以数组形式展示。
127.0.0.1:6379> COMMAND1) 1) "pfcount" 2) (integer) -2 3) 1) write 4) (integer) 1 5) (integer) 1 6) (integer) 1 2) 1) "command" 2) (integer) 0 3) 1) readonly 2) loading 3) stale 4) (integer) 0 5) (integer) 0 6) (integer) 0 3) 1) "zscan" 2) (integer) -3 3) 1) readonly 2) random 4) (integer) 1 5) (integer) 1 6) (integer) 1...127.0.0.1:6379> command count(integer) 176127.0.0.1:6379> command getkeys mset a b c1) "a"2) "c"
Time 命令用于返回当前服务器时间。返回一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。
127.0.0.1:6379> time1) "1606636424"2) "787225"
Command Info 命令用于获取 redis 命令的描述信息。
127.0.0.1:6379> command info get set eval1) 1) "get" 2) (integer) 2 3) 1) readonly 2) fast 4) (integer) 1 5) (integer) 1 6) (integer) 12) 1) "set" 2) (integer) -3 3) 1) write 2) denyoom 4) (integer) 1 5) (integer) 1 6) (integer) 13) 1) "eval" 2) (integer) -3 3) 1) noscript 2) movablekeys 4) (integer) 0 5) (integer) 0 6) (integer) 0
Config Get 命令用于获取 redis 服务的配置参数。
127.0.0.1:6379> config get daemonize1) "daemonize"2) "no"127.0.0.1:6379> config get port1) "port"2) "6379"127.0.0.1:6379> config get key1(empty list or set)127.0.0.1:6379> get key1"34"
Config rewrite 命令对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写。 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
127.0.0.1:6379> config get appendonly1) "appendonly"2) "no"127.0.0.1:6379> config set appendonly yesOK127.0.0.1:6379> config get appendonly1) "appendonly"2) "yes"127.0.0.1:6379> config rewrite(error) ERR Rewriting config file: Permission denied
Config Set 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
127.0.0.1:6379> config get appendonly1) "appendonly"2) "no"127.0.0.1:6379> config set appendonly yesOK127.0.0.1:6379> config get appendonly1) "appendonly"2) "yes"
Config Resetstat 命令用于重置 命令中的某些统计数据
127.0.0.1:6379> config resetstatOK
Dbsize 命令用于返回当前数据库的 key 的数量。
127.0.0.1:6379> dbsize(integer) 43
Flushall 命令用于清空整个 Redis 服务器的数据 (删除所有数据库的所有 key,请谨慎使用,不然就等着跑路吧)。
127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> dbsize(integer) 1127.0.0.1:6379[1]> flushallOK127.0.0.1:6379[1]> dbsize(integer) 0127.0.0.1:6379[1]> select 0OK127.0.0.1:6379> dbsize(integer) 0127.0.0.1:6379> get key1(nil)
Flushdb 命令用于清空当前数据库中的所有 key。
127.0.0.1:6379[1]> dbsize(integer) 3127.0.0.1:6379[1]> flushdbOK127.0.0.1:6379[1]> dbsize(integer) 0127.0.0.1:6379[1]> select 0OK127.0.0.1:6379> dbsize(integer) 2
Lastsave 命令返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
127.0.0.1:6379> lastsave(integer) 1607162732
Monitor 命令用于实时打印出 Redis 服务器接收到的命令,调试用。
127.0.0.1:6379> monitorOK1607163167.038366 [0 127.0.0.1:42804] "info"1607163184.896944 [0 127.0.0.1:42804] "get" "key1"
Role 命令查看主从实例所属的角色,角色有master, slave, sentinel。
127.0.0.1:6379> role1) "master"2) (integer) 03) (empty list or set)
Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
127.0.0.1:6379> saveOK
Shutdown 命令执行以下操作:
执行失败时返回错误。 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。要继续使用的话重新启动一下服务就好。
127.0.0.1:6379> shutdownnot connected> [root@master ~]# redis-cliCould not connect to Redis at 127.0.0.1:6379: Connection refusedCould not connect to Redis at 127.0.0.1:6379: Connection refusednot connected> [root@master ~]# service redis startRedirecting to /bin/systemctl start redis.service[root@master ~]# redis-cli127.0.0.1:6379>
Sync 命令用于同步主从服务器。
127.0.0.1:6379> syncEntering slave output mode... (press Ctrl-C to quit)SYNC with master, discarding 106 bytes of bulk transfer...SYNC done. Logging commands from master."PING""PING""PING""PING"
转载地址:http://wnjqi.baihongyu.com/