博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 基础学习
阅读量:4228 次
发布时间:2019-05-26

本文共 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>

键(key)

del

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

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

EXISTS 命令用于检查给定 key 是否存在。若 key 存在返回 1 ,否则返回 0 。

127.0.0.1:6379> exists greeting(integer) 1127.0.0.1:6379> exists greet(integer) 0

expire

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 

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

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

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

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 

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

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

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

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 命令的游标参数, 以此来延续之前的迭代过程。

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

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

字符串(String)

set

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

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

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

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

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

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

 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

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

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

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

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

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

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

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

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

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

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

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

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

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"

哈希(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

hdel

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

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

 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

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

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

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

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

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

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

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

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

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

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

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"

列表(List)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

blpop

BLPOP (block left pop)命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

127.0.0.1:6379> blpop list1 10(nil)(10.07s)

brpop

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

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

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

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

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

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

 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

 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

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

LREM (list remove)根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。

返回被移除元素的数量。 列表不存在时返回 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

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

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

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

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

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

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"

集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

sadd

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

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

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

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

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

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

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

smember

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

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

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

SRANDMEMBER 命令用于返回集合中的一个随机元素。

从 Redis 2.6 版本开始, Srandmember 命令接受可选的 count 参数:

  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 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

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

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

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 命令基本语法如下:

SSCAN key cursor [MATCH pattern] [COUNT count]
  • cursor - 游标。
  • pattern - 匹配的模式。
  • count - 指定从数据集里返回多少元素,默认值为 10 。

返回匹配到的数组列表。

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"

有序集合(sorted set)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

不过我很好奇的是,为什么 redis 有序集合相关的命令是以 Z 打头呢?

zadd

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

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

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

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

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

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

 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

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

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

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

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

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

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

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

 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

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

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

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

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 命令用于退订给定的一个或多个频道的信息。

Redis 使用发布订阅

[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

Python 使用 Redis

# 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']

Ruby 使用 Redis

# 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 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。
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

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

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

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

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

UNWATCH 命令用于取消 WATCH 命令对所有 key 的监视。

127.0.0.1:6379> unwatchOK

脚本

eval

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

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

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

Script Flush 命令用于清除所有 Lua 脚本缓存。

127.0.0.1:6379> script flushOK

script kill

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 Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。如果给定的脚本已经在缓存里面了,那么不执行任何操作。

在脚本被加入到缓存之后,通过  命令,可以使用脚本的 SHA1 校验和来调用这个脚本。脚本可以在缓存中保留无限长的时间,直到执行  为止。

127.0.0.1:6379> script load "return 'hello world'""5332031c6b470dc5a0dd9b4bf2030dea6d65de91"

连接

连接命令主要是用于连接 redis 服务。

auth

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

ECHO 命令用于打印给定的字符串。

127.0.0.1:6379> echo "hello world""hello world"

ping

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

QUIT 命令用于关闭与当前客户端与redis服务的连接。一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

127.0.0.1:6379> quit[root@master ruby_learning]#

select

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

Bgrewriteaof 命令用于异步执行一个 AOF(AppendOnly File) 文件重写操作。重写会创建一个当前 AOF 文件的体积优化版本。

即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改。

127.0.0.1:6379> bgrewriteaofBackground append only file rewriting started

bgsave

Bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

127.0.0.1:6379> bgsaveBackground saving started

debug segfault

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

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 命令用于返回  命令为连接设置的名字。 因为新创建的连接默认是没有名字的, 对于没有名字的连接, 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

Client Pause 命令用于阻塞客户端命令一段时间(以毫秒计)。

127.0.0.1:6379> client pause 5000OK127.0.0.1:6379> get key1# "34" 会等一会儿才输出来"34"(1.42s)

client setname

Client Setname 命令用于指定当前连接的名称。这个名字会显示在  命令的结果中, 用于识别当前正在与服务器进行连接的客户端。

127.0.0.1:6379> client setname hello-worldOK127.0.0.1:6379> client getname"hello-world"

cluster slots

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

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

Time 命令用于返回当前服务器时间。返回一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。

127.0.0.1:6379> time1) "1606636424"2) "787225"

command info

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

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

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

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 

Config Resetstat 命令用于重置  命令中的某些统计数据

127.0.0.1:6379> config resetstatOK

dbsize

Dbsize 命令用于返回当前数据库的 key 的数量。

127.0.0.1:6379> dbsize(integer) 43

flushall

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

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

Lastsave 命令返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。

127.0.0.1:6379> lastsave(integer) 1607162732

monitor

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

Role 命令查看主从实例所属的角色,角色有master, slave, sentinel。

127.0.0.1:6379> role1) "master"2) (integer) 03) (empty list or set)

save

Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。

127.0.0.1:6379> saveOK

shutdown

Shutdown 命令执行以下操作:

  • 停止所有客户端
  • 如果有至少一个保存点在等待,执行 SAVE 命令
  • 如果 AOF 选项被打开,更新 AOF 文件
  • 关闭 redis 服务器(server)

执行失败时返回错误。 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。要继续使用的话重新启动一下服务就好。

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

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/

你可能感兴趣的文章
Java I/O
查看>>
SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach
查看>>
Core Python Programming
查看>>
Creating Database Web Applications with PHP and ASP
查看>>
ASP.NET 2.0 Demystified
查看>>
Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects
查看>>
Pattern-Oriented Software Architecture, Volume 1: A System of Patterns
查看>>
Database Programming with Visual Basic® .NET and ADO.NET: Tips, Tutorials, and Code
查看>>
Visual Basic 2005 Express: Now Playing
查看>>
Jakarta Struts Cookbook
查看>>
AspectJ Cookbook
查看>>
IntelliJ IDEA in Action
查看>>
HTML Professional Projects
查看>>
Python Cookbook, Second Edition
查看>>
Java Extreme Programming Cookbook
查看>>
XSLT Cookbook
查看>>
Java Programming with Oracle JDBC
查看>>
Hack Proofing Your Network (Second Edition)
查看>>
XML Programming (Core Reference)
查看>>
Visual Studio .NET: The .NET Framework Black Book
查看>>