Redis shell

流过昼夜 提交于 2019-12-01 08:56:54

Redis的使用

Redis key 值是二进制安全的, 可以用任何二进制序列作为key值, 无论是简单字符串还是JPEG文件的内容皆可。空字符串也是有效key值。

切换数据库

select databaseid 选中数据库 (redis 默认有16个实例库, 0~15, 登录时默认库0)

Key操作

KEYS pattern

  • 查找所有符合给定模式 pattern 的 key

EXISTS key

  • 检查给定 key 是否存在

EXPIRE key seconds

  • 给key设置生命周期, 当key过期时会被自动删除

MOVE key db

  • 将当前数据库的 key 移动到给定的数据库 db 中
  • 如果源数据库和目标数据库有相同的key, 或 key 不存在于当前数据库, 那么 MOVE 无效

TTL key

  • 以秒为单位, 返回给定key的剩余存活时间(保留时间)

TYPE key

  • 返回 key 所存储的值的类型

DEL key [key ...]

  • 删除给定的一个或多个key。 不存在的 key 会被 忽略

练习:

# exercise
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> exists ronnie
(integer) 0
127.0.0.1:6379[1]> set ronnie yuan
OK
127.0.0.1:6379[1]> exists ronnie
(integer) 1
127.0.0.1:6379[1]> move ronnie 2
(integer) 1
127.0.0.1:6379[1]> exists ronnie
(integer) 0
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> exists ronnie
(integer) 1
127.0.0.1:6379[2]> type ronnie
string
127.0.0.1:6379[2]> del ronnie
(integer) 1
127.0.0.1:6379[2]> exists ronnie
(integer) 0

# ex
127.0.0.1:6379[2]> SETEX test 20 fun
OK
127.0.0.1:6379[2]> ttl test
(integer) 16
127.0.0.1:6379[2]> ttl test
(integer) 12
127.0.0.1:6379[2]> ttl test
(integer) 5
127.0.0.1:6379[2]> ttl test
(integer) -2

String操作

字符串是Redis最基本的一种值类型。Redis 字符串是二进制安全的, 这意味着一个Redis字符串能包含任意类型的数据

SET key value [EX seconds][PX milliseconds] [NX|XX]
# EX: 设置过期时间, 秒, 等同于SETEX key seconds value
# PX: 设置过期时间, 毫秒, 等同于PSETEX key milliseconds value
# NX: NX键不存在, 才能设置, 等同于SETNX key value
# XX: XX键存在时, 才能设置

## 将字符串值 value 关联到key
## 如果该 key 已经持有其他值, SET就覆写旧值, 无视类型
## 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

GET key

  • 返回 key 所关联的字符串值
  • 如果key不存在, 返回特殊值nil
  • 假如 key 储存的值不是字符串类型, 则返回一个错误, 因为 GET 只能用于处理字符串值

APPEND key value

  • 如果 key 已经存在并且是一个字符串, APPEND命令将 value 追加到 key 原来的值的末尾。
  • 如果 key 不存在, APPEND 就简单地将给定 key 设为 value, 就像执行 SET key value 一样。

STRLEN key (String Length of key)

  • 返回 key 所储存的字符串值的长度。
  • 当 key 储存的不是字符串值时, 返回一个错误。

INCR key (INCR --> Increase)

  • 将 key 中储存的数字值增一
  • 如果 key 不存在, 那么 key 的值会先被初始化为0, 然后再执行INCR 操作
  • 如果值包含错误的类型, 或字符串类型的值不能表示为数字, 那么返回一个错误

INCRBY key increment (INCRBY --> Increase by)

  • 将 key 所储存的值加上增量 increment
  • 如果 key 不存在, 那么 key 的值会先被初始化为 0, 然后再执行INCRBY命令
  • 如果值包含错误的类型, 或字符串类型的值不能表示为数字, 那么返回一个错误。

DECR key (DECR --> decrease)

  • 将 key 中储存的数字值减一

DECRBY key decrement (DECRBY --> Decrease by)

  • 将 key 所存储的值减去减量 decrement

GETRANGE key start end

  • 返回 key 中字符串值的子字符串, 字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end)
  • 附属偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个 ...

SETRANGE key offset value

  • 用 value 参数覆写(overwrite) 给定 key 所储存的字符串值, 从偏移量 offset 开始。

SETEX key seconds value

  • 将值 value 关联到 key, 并将 key 的生存时间设为 seconds
  • 如果key已经存在, SETEX 命令将覆写旧值
  • 类似于 SET key value 和 EXPIRE key seconds, 不同之处是:
    • SETEX 是一个原子性(atomic) 操作, 关联值和设置生存时间这两个action会在同一时间内完成, 该命令在Redis用作缓存时, 非常实用。

SETNX key value

  • 将 key 的值设置为 value, 当且仅当 key 不存在。
  • 若给定的 key 已将存在, 则SETNX不做任何动作。
  • SETNX <=> SET if Not exists

MGET key [key ... ] (M --> Multiply)

  • 返回所有(一个或多个)给定 key 的值。
  • 如果给定的 key 里面, 有某个 key 不存在, 那么该 key 返回特殊值nil(该命令永不失败)。

MSET key value [key value ... ]

  • 同时设置一个或多个 key-value 对
  • 如果某个给定 key 已经存在, 那么 MEST 会用新值覆盖原来的旧值
  • 如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。

MSETNX key value [key value ... ]

  • 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
  • 即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。
  • MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。
# e1
127.0.0.1:6379[2]> set heros slark
OK
127.0.0.1:6379[2]> append heros luna
(integer) 9
127.0.0.1:6379[2]> strlen heros
(integer) 9
127.0.0.1:6379[2]> get heros
"slarkluna"
127.0.0.1:6379[2]> getrange heros 4 -1
"kluna"
127.0.0.1:6379[2]> setrange heros 5 sf
(integer) 9
127.0.0.1:6379[2]> get heros
"slarksfna"
127.0.0.1:6379[2]> setex heros 10 storm
OK
127.0.0.1:6379[2]> ttl heros
(integer) 1
127.0.0.1:6379[2]> ttl heros
(integer) -2

# e2
127.0.0.1:6379[2]> SETNX balance 300
(integer) 1
127.0.0.1:6379[2]> get balance
"300"
127.0.0.1:6379[2]> SETNX balance 200
(integer) 0
127.0.0.1:6379[2]> get balance
"300"

# e3
127.0.0.1:6379[2]> MSETNX name ronnie hometown shanghai university massey age 24 major chemistry
(integer) 1
127.0.0.1:6379[2]> MGET name hometown university age major
1) "ronnie"
2) "shanghai"
3) "massey"
4) "24"
5) "chemistry"
127.0.0.1:6379[2]> MSETNX name john hometown auckalnd university massey age 57 occupation professor
(integer) 0
127.0.0.1:6379[2]> MGET name hometown university age occupation
1) "ronnie"
2) "shanghai"
3) "massey"
4) "24"
5) (nil)

List 操作

LPUSH key value [value ... ] (L --> Left)

  • 将一个或多个值 value 插入到列表 key 的表头
  • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令"

RPUSH key value [value ... ] (R --> Right)

  • 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
  • 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

LRANGE key start stop (L --> List)

  • 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
  • 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

LPOP key

  • 移除并返回列表 key 的头元素

RPOP key

  • 移除并返回列表 key 的尾元素

LINDEX key index (L --> List)

  • 返回列表key中, 下标为 index 的元素
  • 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素...
  • 可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素...

LLEN key (L --> Left LEN --> Length)

  • 返回列表 key 的长度。
  • 如果 key 不存在,则 key 被解释为一个空列表,返回 0 .

LREM key count value (L --> Left REM --> remove)

  • 根据参数 count 的值,移除列表中与参数 value 相等的元素。count 的值可以是以下几种:
    • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。(left --> right)
    • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。(right -> left)
    • count = 0 : 移除表中所有与 value 相等的值。

LTRIM key start stop (L --> Left)

  • 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
  • 举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

RPOPLPUSH source destination (Right Pop Push)

  • 命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

    • 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。

    • 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

LSET key index value

  • 将列表 key 下标为 index 的元素的值设置为 value 。
  • 当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

LINSERT key BEFORE|AFTER pivot value (Left Insert)

  • 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
  • 当 pivot 不存在于列表 key 时,不执行任何操作。
  • 当 key 不存在时, key 被视为空列表,不执行任何操作。
127.0.0.1:6379[2]> LPUSH heros slark luna spectre storm ember broodmother
(integer) 6
127.0.0.1:6379[2]> LRANGE heros 0 4
1) "broodmother"
2) "ember"
3) "storm"
4) "spectre"
5) "luna"
127.0.0.1:6379[2]> LRANGE heros 0 -1
1) "broodmother"
2) "ember"
3) "storm"
4) "spectre"
5) "luna"
6) "slark"
127.0.0.1:6379[2]> RPUSH heros2 viper anti_mage zeus meepo huskar
(integer) 5
127.0.0.1:6379[2]> LLEN heros
(integer) 6
127.0.0.1:6379[2]> RPOPLPUSH heros heros2
"slark"
127.0.0.1:6379[2]> LRANGE heros 0 -1
1) "broodmother"
2) "ember"
3) "storm"
4) "spectre"
5) "luna"
127.0.0.1:6379[2]> LRANGE heros2 0 -1
1) "slark"
2) "viper"
3) "anti_mage"
4) "zeus"
5) "meepo"
6) "huskar"
127.0.0.1:6379[2]> LSET heros 0 wtf
OK
127.0.0.1:6379[2]> LRANGE heros 0 -1
1) "wtf"
2) "ember"
3) "storm"
4) "spectre"
5) "luna"
127.0.0.1:6379[2]> LINSERT heros BEFORE wtf omg
(integer) 6
127.0.0.1:6379[2]> LRANGE heros 0 -1
1) "omg"
2) "wtf"
3) "ember"
4) "storm"
5) "spectre"
6) "luna"

Set 操作

SADD key member [member ... ]

  • 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
  • 假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

SMEMBERS key

  • 返回集合 key 中的所有成员。
  • 不存在的 key 被视为空集合。

SISMEMEBER key member

  • 判断 member 元素是否集合 key 的成员。

SCARD key

  • 返回集合 key 的基数(集合中元素的数量)。

SREM key member [member ... ]

  • 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

SPOP key (随机抽奖)

  • 移除并返回集合中的一个随机元素。
  • 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。

SMOVE source destination member

  • 将 member 元素从 source 集合移动到 destination 集合。SMOVE 是原子性操作。
  • 如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
  • 当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
  • 当 source 或 destination 不是集合类型时,返回一个错误。

SDIFF key [key ... ]

  • 求差集:从第一个key的集合中去除其他集合和自己的交集部分。

SINTER key [key ... ] (求交集)

  • 返回一个集合的全部成员,该集合是所有给定集合的交集。

SUNTION key [key ... ]

  • 返回一个集合的全部成员,该集合是所有给定集合的并集。
  • 不存在的 key 被视为空集。

Sorted set 操作

类似Sets,但是每个字符串元素都关联到一个叫score浮动数值。里面的元素总是通过score进行着排序, 有所不同的是, 它是可以检索一系列元素。Zset 是 key score1 value1 score2 value2。

ZADD key score member [[score member] ... ]

  • 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

ZRANGE key start stop [WITHSCORES]

  • 返回有序集 key 中,指定区间内的成员。

  • 其中成员的位置按 score 值递增(从小到大)来排序。

  • 具有相同 score 值的成员按字典序(lexicographical order )来排列。

  • 如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

ZREVRANGE key start stop [WITHSCORES] (REV --> reverse)

  • 返回有序集 key 中,指定区间内的成员。
  • 其中成员的位置按 score 值递减(从大到小)来排列。

ZREM key member [member ... ]

  • 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

ZREMRANGEBYSCORE key min max

  • 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

ZSCORE key member

  • 返回有序集 key 中,成员 member 的 score 值。

ZCARD key

  • 返回有序集 key 的基数。

ZCOUNT key min max

  • 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

ZRANK key member

  • 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

Hash 操作(散列)

  • KV 模式不变, 但是 V 是一个键值对

HSET key field value

  • 将哈希表 key 中的域 field 的值设为 value 。

HGET key field

  • 返回哈希表 key 中给定域 field 的值。

HMSET key field value [field value ... ]

  • 同时将多个 field-value (域-值)对设置到哈希表 key 中。
  • 此命令会覆盖哈希表中已存在的域。

HMGET key field [field ...]

  • 返回哈希表 key 中, 一个或多个给定域的值。

HGETALL key

  • 返回哈希表 key 中, 所有的域和值。

HKEYS key

  • 返回哈希表 key 中 的所有域

HVALS key

  • 返回哈希表 key 中所有域的值。

HSETNX key field value

  • 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
  • 若域 field 已经存在,该操作无效。

HEXISTS key field

  • 查看哈希表 key 中, 给定域 field是否存在。

HDEL key field [field ... ]

  • 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

HINCRBY key field increment

  • 为哈希表 key 中的域 field 的值加上增量 increment 。
  • 增量也可以为负数,相当于对给定域进行减法操作。

HINCRBTFLOAT key field increment

  • 增加浮点数
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!