Redis常用的命令

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: Redis常用的命令

文章目录

redis数据结构常用的命令

key(键)

del

keys

RANDOMKEY

TTL

EXISTS

MOVE

RENAME

TYPE

EXPIRE

String(字符串)

SET

`SETNX`

SETEX

MSET

MSETNX

APPEND

GET

MGET

GETSET

STRLEN

DECR

DECRBY

INCR INCRBY

Hash(哈希表)

HSET

HSETNX

HMSET 与HMGET

HGETALL

HDEL

HLEN

HEXISTS

HKEYS

HVALS

List(列表)

LPUSH

LPUSHX

RPUSH

LPOP

RPOP

Set(集合)

SADD

SREM

SMEMBERS

SortedSet(有序集合)

ZADD

redis数据结构常用的命令

key(键)

del

格式:DEL key [key …]

删y删除一个key或者多个key

127.0.0.1:6379> del k1

(integer) 1

keys

格式:keys pattern

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

还可以指定正则表达式。

127.0.0.1:6379> keys *

1) "key1"

2) "\xac\xed\x00\x05t\x00\x04name"

3) "k2"

4) "\xac\xed\x00\x05t\x00\x03age"

5) "\xac\xed\x00\x05t\x00\aaddress"

RANDOMKEY

格式:randomkey

从当前数据库中随机返回(不删除)一个 key 。

127.0.0.1:6379> randomkey

"\xac\xed\x00\x05t\x00\x03age"

TTL

格式:ttl key

以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

返回值:

当 key 不存在时,返回 -2 。

当 key 存在但没有设置剩余生存时间时,返回 -1 。

否则,以秒为单位,返回 key 的剩余生存时间。

127.0.0.1:6379> set k3 2

OK

127.0.0.1:6379> ttl k2

(integer) -1

127.0.0.1:6379> ttl k3

(integer) -1

127.0.0.1:6379> del k3

(integer) 1

127.0.0.1:6379> set k3 10

OK

127.0.0.1:6379> ttl k3

(integer) -1

127.0.0.1:6379> expire k3 5

(integer) 1

127.0.0.1:6379> ttl k3

(integer) 2

127.0.0.1:6379> ttl k3

(integer) -2

127.0.0.1:6379>  

EXISTS

格式:exists key

检查给定 key 是否存在。

127.0.0.1:6379> exists k3

(integer) 0

127.0.0.1:6379> exists k2

(integer) 1

MOVE

格式:move key db

将当前数据库的 key 移动到给定的数据库 db 当中。

127.0.0.1:6379> move k1 1

(integer) 1

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> keys *

1) "k1"

RENAME

格式:rename key newkey

将 key 改名为 newkey 。

当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。

当 newkey 已经存在时, RENAME 命令将覆盖旧值。

127.0.0.1:6379[1]> set name elite

OK

127.0.0.1:6379[1]> keys *

1) "k1"

2) "name"

127.0.0.1:6379[1]> rename name name1

OK

127.0.0.1:6379[1]> keys *

1) "k1"

2) "name1"

TYPE

格式:type key

返回 key 所储存的值的类型

127.0.0.1:6379[1]> type name1

string

EXPIRE

格式:expire key seconds

为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。在 Redis 中,带有生存时间的 key 被称为『可挥发』(volatile)的。

String(字符串)

SET

格式:set key value

将字符串值 value 关联到 key 。

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

127.0.0.1:6379> set name elite

OK

127.0.0.1:6379> set name elite1

OK

127.0.0.1:6379> get name

"elite1"

SETNX

这个命令很重要,在分布式锁中会用到。

格式:setnx key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

127.0.0.1:6379> setnx name elite

(integer) 0

127.0.0.1:6379> setnx name1 elite1

(integer) 1

127.0.0.1:6379> setnx name1 elite2

(integer) 0

SETEX

格式:setex key seconds value

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将覆写旧值。

127.0.0.1:6379> setex name2 10 elite2

OK

127.0.0.1:6379> TTL name2

(integer) 9

127.0.0.1:6379> TTL name2

(integer) 7

127.0.0.1:6379> TTL name2

(integer) 6

MSET

格式:mset key value [key value …]

同时设置一个或多个 key-value 对。

127.0.0.1:6379> mset k1 v1 k2 v2

OK

127.0.0.1:6379> keys *

1) "k1"

2) "k2"

MSETNX

格式:msetnx key value [key value …]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。

MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

127.0.0.1:6379> msetnx k1 v1 k2 v2

(integer) 0

127.0.0.1:6379> msetnx k3 v3 k4 v4

(integer) 1

APPEND

格式:append key value

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

127.0.0.1:6379> append k5 v5

(integer) 2

127.0.0.1:6379> append k4 append

(integer) 8

127.0.0.1:6379> get k4

"v4append"

GET

格式:get key

返回 key 所关联的字符串值。

如果 key 不存在那么返回特殊值 nil 。

假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

MGET

格式:mget key [key …]

返回所有(一个或多个)给定 key 的值。

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败。

GETSET

格式:getset key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

当 key 存在但不是字符串类型时,返回一个错误。

127.0.0.1:6379> set k1 v1

OK

127.0.0.1:6379> getset k1 v11

"v1"

STRLEN

格式:strlen key

返回 key 所储存的字符串值的长度。

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

127.0.0.1:6379> getset k1 v11

"v1"

127.0.0.1:6379> strlen k1

(integer) 3

127.0.0.1:6379> set k2 112122asadws

OK

127.0.0.1:6379> strlen k2

(integer) 12

DECR

格式:decr key

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

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

本操作的值限制在 64 位(bit)有符号数字表示之内。

127.0.0.1:6379> set count 1

OK

127.0.0.1:6379> decr count

(integer) 0

127.0.0.1:6379> decr count

(integer) -1

127.0.0.1:6379> decr count

(integer) -2

DECRBY

格式:decrby key decrement

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

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

INCR INCRBY

格式:incr key

格式:incrby key increment

将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

127.0.0.1:6379> set count 0

OK

127.0.0.1:6379> incr count

(integer) 1

127.0.0.1:6379> incr count

(integer) 2

127.0.0.1:6379> incr count

(integer) 3

127.0.0.1:6379> incrby count 3

(integer) 6

Hash(哈希表)

HSET

格式:hset key field value

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

如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

如果域 field 已经存在于哈希表中,旧值将被覆盖。

127.0.0.1:6379> hset map name elite

(integer) 1

127.0.0.1:6379> keys *

1) "map"

2) "count"

127.0.0.1:6379> hset map age 12

(integer) 1

HSETNX

格式:hsetnx key field value

将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

127.0.0.1:6379> hsetnx map name elite1

(integer) 0

127.0.0.1:6379> hsetnx map name1 elite1

(integer) 1

HMSET 与HMGET

格式:hmset key field value [field value …]

同时将多个 field-value (域-值)对设置到哈希表 key 中。

此命令会覆盖哈希表中已存在的域。

如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。

127.0.0.1:6379> hmset person name elite age 12 address xxpro

OK

127.0.0.1:6379> hmget person name age address

1) "elite"

2) "12"

3) "xxpro"

HGETALL

格式:hgetall key

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

在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

127.0.0.1:6379> HGETALL person

1) "name"

2) "elite"

3) "age"

4) "12"

5) "address"

6) "xxpro"

HDEL

格式:hdel key field [field …]

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

127.0.0.1:6379> hdel person name age

(integer) 2

HLEN

格式:hlen key

返回哈希表 key 中域的数量。

127.0.0.1:6379> hmset person name elite age 12 address xxpro

OK

127.0.0.1:6379> hlen person

(integer) 3

HEXISTS

格式:hexists key field

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

127.0.0.1:6379> hmset person name elite age 12 address xxpro

OK

127.0.0.1:6379> hexists person name

(integer) 1

127.0.0.1:6379> hexists person job

(integer) 0

HKEYS

格式:hkeys key

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

127.0.0.1:6379> hkeys person

1) "name"

2) "age"

3) "address"

HVALS

格式:hvals key

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

127.0.0.1:6379> hvals person

1) "elite"

2) "12"

3) "xxpro"

List(列表)

LPUSH

格式:lpush key value [value …]

将一个或多个值 value 插入到列表 key 的表头

127.0.0.1:6379> lpush subject chinese math english

(integer) 3

127.0.0.1:6379> lpush subject chinese

(integer) 4

LPUSHX

格式:lpushx key value

将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。

和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。

127.0.0.1:6379> lpushx subject geog

(integer) 5

127.0.0.1:6379> lpushx mylist 12

(integer) 0

RPUSH

格式:rpush key value [value …]

将一个或多个值 value 插入到列表 key 的表尾(最右边)。

127.0.0.1:6379> rpush mylist a b c d

(integer) 4

LPOP

格式:lpop key

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

127.0.0.1:6379> rpush mylist a b c d

(integer) 4

127.0.0.1:6379> lpop mylist

"a"

RPOP

格式:rpop key

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

127.0.0.1:6379> rpush mylist a b c d

(integer) 4

127.0.0.1:6379> rpop mylist

"d"

Set(集合)

SADD

格式:sadd key member [member …]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将

被忽略。

假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

当 key 不是集合类型时,返回一个错误。

127.0.0.1:6379> sadd set a b c

(integer) 3

SREM

格式:srem key member [member …]

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

当 key 不是集合类型,返回一个错误。

127.0.0.1:6379> sadd set a b c

(integer) 3

127.0.0.1:6379> srem set d

(integer) 0

127.0.0.1:6379> srem set a

(integer) 1

SMEMBERS

格式:smembers key

返回集合 key 中的所有成员。

不存在的 key 被视为空集合。

127.0.0.1:6379> sadd set a b c

(integer) 1

127.0.0.1:6379> smembers set

1) "a"

2) "c"

3) "b"

其他的操作命令这里不在继续。。。


SortedSet(有序集合)

ZADD

格式:zadd key score member [[score member] [score member] …]

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

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过

重新插入这个 member 元素,来保证该 member 在正确的位置上。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
29天前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
|
22天前
|
存储 缓存 NoSQL
Redis 全局通用命令整理
Redis 全局通用命令整理
47 10
|
21天前
|
存储 JSON NoSQL
Redis常见命令大全
【7月更文挑战第30天】
11 3
|
21天前
|
NoSQL Redis 索引
Redis 中ZSET数据类型命令使用及对应场景总结
Redis 中ZSET数据类型命令使用及对应场景总结
31 2
|
21天前
|
NoSQL Redis
Redis set数据类型命令使用及应用场景使用总结
Redis set数据类型命令使用及应用场景使用总结
22 1
|
25天前
|
NoSQL 网络协议 Redis
Redis性能优化问题之如何判断 Redis 性能下降是否由复杂度过高的命令引起
Redis性能优化问题之如何判断 Redis 性能下降是否由复杂度过高的命令引起
|
25天前
|
编解码 NoSQL Redis
c++开发redis module问题之想实现Redis命令,如何解决
c++开发redis module问题之想实现Redis命令,如何解决
|
25天前
|
NoSQL Java 编译器
c++开发redis module问题之保证Redis在fork时没有处于inflight状态的命令,如何解决
c++开发redis module问题之保证Redis在fork时没有处于inflight状态的命令,如何解决
|
4天前
|
NoSQL Java Redis
Redis字符串数据类型之INCR命令,通常用于统计网站访问量,文章访问量,实现分布式锁
这篇文章详细解释了Redis的INCR命令,它用于将键的值增加1,通常用于统计网站访问量、文章访问量,以及实现分布式锁,同时提供了Java代码示例和分布式锁的实现思路。
11 0
|
25天前
|
NoSQL Redis C++
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决