redis常用命令使用详情

  • 目标
  • 远程服务器连接
  • redis key命令
  • redis string命令
  • redis hash命令
  • redis list命令
  • redis set命令
  • redis sorted set命令
  • redis HyperLogLog
  • redis 发布订阅命令
  • redis 事务
  • redis 脚本
  • redis 连接
  • redis服务器
  • redis GEO
  • redis Stream


目标

以版本redis-6.2.1为例学习redis常用命令的使用

远程服务器连接

注意:远程连接服务器时可以使用–raw避免中文乱码

#连接
redis-cli -h 127.0.0.1 -p 6379 -a "password"
#避免中文乱码
redis-cli --raw
#验证远程服务是否已经启动
redis 127.0.0.1:6379> PING
PONG
redis key命令

redis键 基本命令

#基本语法
redis 127.0.0.1:6379> COMMAND KEY_NAME

命令

命令说明

DEL key

删除 key

DUMP key

序列化key,并返回被序列化的value的值

EXISTS key

检查key是否存在,过期该键会自动删除

EXPIRE key seconds

为key设置过期时间,以秒计

EXPIREAT key timestamp

与EXPIRE 相同,不同在于参数是 UNIX 时间戳(unix timestamp)

PEXPIRE key milliseconds

与EXPIRE 相同,不同在于过期时间以毫秒计。

PEXPIREAT key milliseconds-timestamp

与EXPIRE 相同,不同在于过期时间以毫秒(unix timestamp)计

KEYS pattern

查找符合给定pattern的key

MOVE key db

将key移动到给定db当中

PERSIST key

移除key过期时间,key 将持久保持

PTTL key

返回key的剩余过期时间,以毫秒为单位

TTL key

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

RANDOMKEY

从当前库随机返回一个key

RENAME key newkey

修改key名称

RENAMENX key newkey

仅当newkey不存在时,将key改为 newkey

SCAN cursor [MATCH pattern] [COUNT count]

迭代库中数据库键

TYPE key

返回 key 所储存的值的类型

redis string命令

redis字符串 基本命令

#基本语法
redis 127.0.0.1:6379> COMMAND KEY_NAME

命令

命令说明

SET key value

设置key

GET key

获取key值

MSET key value [key value …]

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

MGET key1 [key2…]

获取所有(一个或多个)给定key的值

SETNX key value

key不存在时设置key的值

MSETNX key value [key value …]

同时设置一个或多个key-value对,当且仅当所有给定key都不存在,成功都成功,否则设置都失败

STRLEN key

获取key所储存的字符串值的长度

GETRANGE key start end

截取key字符串值的子字符串并返回

GETSET key value

将key的值设为value,返回旧值

GETBIT key offset

对key储存的字符串值,获取指定偏移量上的位(bit),bit位操作

SETBIT key offset value

对key储存的字符串值,设置或清除指定偏移量上的位(bit),bit位操作

SETRANGE key offset value

用value参数覆写给定key所储存的字符串值,从偏移量offset开始,value有几个字符依次向后覆写几个字符

SETEX key seconds value

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

PSETEX key milliseconds value

这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,而不是像SETEX命令那样,以秒为单位

INCR key

将key中储存的数字值增一

INCRBY key increment

将key所储存的数字值加上给定的增量值(increment)

INCRBYFLOAT key increment

将key所储存的数字值加上给定的浮点增量值(increment)

DECR key

将key中储存的数字值减一

DECRBY key decrement

key所储存的数字值减去给定的减量值(decrement)

APPEND key value

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

redis hash命令

redis hash 基本命令

命令

命令说明

HSET key field value

将key对应哈希表field的值设为value

HGET key field

获取key对应的哈希表field的值。

HDEL key field1 [field2]

删除key对应的哈希表中一个或多个field字段

HLEN key

获取key对应的哈希表中字段的数量

HMGET key field1 [field2]

获取key对应的哈希表中给定的多个字段的值

HMSET key field1 value1 [field2 value2 ]

同时将多个field-value对设置到key对应的哈希表中。

HEXISTS key field

查看key对应的哈希表中是否存在指定字段

HGETALL key

获取key对应的哈希表中的所有字段和值

HINCRBY key field increment

对key对应的哈希表中field字段的整数值加上增量increment

HINCRBYFLOAT key field increment

对key对应的哈希表中field字段的浮点数值加上增量 increment

HKEYS key

获取key对应的哈希表中的所有字段

HVALS key

获取key对应的哈希表中的所有值。

HSETNX key field value

在key对应的哈希表中若字段field不存在,则设置field字段的值

HSCAN key cursor [MATCH pattern] [COUNT count]

迭代key对应的哈希表中的键值对

redis list命令

redis list 基本命令

命令

命令说明

LPUSH key value1 [value2]

将一个或多个值插入到列表头部

LPUSHX key value

将一个值插入到已存在的列表头部

RPUSH key value1 [value2]

在列表中添加一个或多个值

RPUSHX key value

为已存在的列表添加值

LRANGE key start stop

获取列表指定范围内的元素

LINDEX key index

通过索引获取列表中的元素

LLEN key

获取列表长度

LSET key index value

通过索引设置列表元素的值

LREM key count value

移除列表元素,value表示要移除的元素,count表示移除几个

LTRIM key start stop

列表修剪(trim),只保留指定区间内的元素,其他元素都将被删除

LINSERT key BEFORE

AFTER pivot value

LPOP key

移除并获取列表的第一个元素

RPOP key

移除并获取列表的最后一个元素,返回值为移除的元素

BLPOP key1 [key2] timeout

移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

BRPOP key1 [key2] timeout

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

RPOPLPUSH source destination

移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回

BRPOPLPUSH source destination timeout

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

redis set命令

redis set基本命令

命令

命令说明

SADD key member1 [member2]

向集合添加一个或多个成员

SMEMBERS key

返回集合中的所有成员

SCARD key

获取集合的成员数量

SISMEMBER key member

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

SRANDMEMBER key [count]

返回集合中一个或多个随机数

SDIFF key1 [key2]

返回第一个集合减去第二个集合获取差异值

SDIFFSTORE destination key1 [key2]

返回给定所有集合的差集并存储在 destination 中

SINTER key1 [key2]

返回给定所有集合的交集

SINTERSTORE destination key1 [key2]

返回给定所有集合的交集并存储在 destination 中

SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合

SUNION key1 [key2]

返回所有给定集合的并集

SUNIONSTORE destination key1 [key2]

所有给定集合的并集存储在 destination 集合中

SSCAN key cursor [MATCH pattern] [COUNT count]

迭代集合中的元素

SPOP key

移除并返回集合中的一个随机元素

SREM key member1 [member2]

移除集合中一个或多个成员

redis sorted set命令

redis sorted set基本命令

命令

命令说明

ZADD key score1 member1 [score2 member2]

向有序集合中添加成员,或者更新已存在成员的分数

ZRANK key member

返回有序集合中指定成员的索引

ZCARD key

获取有序集合的成员数

ZCOUNT key min max

计算在有序集合中指定区间分数的成员数

ZRANGE key start stop [WITHSCORES]

通过索引区间返回有序集合指定区间内的成员

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]

通过分数返回有序集合指定区间内的成员

ZSCORE key member

返回有序集中,成员的分数值

ZREVRANGE key start stop [WITHSCORES]

返回有序集中指定索引区间内成员,分数从高到低排序

ZREVRANGEBYSCORE key max min [WITHSCORES]

返回有序集中指定分数区间内成员,分数从高到低排序

ZREVRANK key member

返回有序集合中指定成员的排名,分数从高到低排序

ZUNIONSTORE destination numkeys key [key …]

计算给定的一个或多个有序集的并集,并存储在新的key中,交集元素的分数默认会相加

ZINTERSTORE destination numkeys key [key …]

计算给定的一个或多个有序集的交集,并将结果集存储在新的有序集合 destination 中,交集元素的分数默认会相加

ZINCRBY key increment member

有序集合中对指定成员的分数加上增量increment

ZREM key member [member …]

移除有序集合中的一个或多个成员

ZREMRANGEBYRANK key start stop

移除有序集合中给定的索引排名区间的所有成员

ZREMRANGEBYSCORE key min max

移除有序集合中给定的分数区间的所有成员

ZSCAN key cursor [MATCH pattern] [COUNT count]

迭代有序集合中的元素(包括元素成员和元素分值)

ZLEXCOUNT key min max

在有序集合中计算指定字典区间内成员数量

ZRANGEBYLEX key min max [LIMIT offset count]

通过字典区间返回有序集合的成员

ZREMRANGEBYLEX key min max

移除有序集合中给定的字典区间的所有成员

redis HyperLogLog

说明:

  • HyperLogLog是用来做基数统计的算法;
  • Redis中,每个HyperLogLog键只需12KB内存,即可计算接近2^64个不同元素的基数;
  • HyperLogLog只会根据输入元素计算基数,不会存储输入元素,也不能像集合一样返回输入元素;
  • HyperLogLog优点是当输入元素量非常大时,计算基数所需的空间是固定的,并且很小;
  • 基数:如 {1, 3, 5, 7, 5, 7, 8}的基数集为 {1, 3, 5 ,7, 8},基数(不重复元素)为5;
  • 基数估计:在误差可接受的范围内,快速计算基数;

redis HyperLogLog 基本命令

命令

命令说明

PFADD key element [element …]

添加元素到 HyperLogLog 中

PFCOUNT key [key …]

HyperLogLog 基数估算值

PFMERGE destkey sourcekey [sourcekey …]

将多个 HyperLogLog 合并为一个 HyperLogLog

redis 发布订阅命令

说明:

  • Redis 发布订阅 (pub/sub) 是一种消息通信模式,发送者 (pub) 发送消息,订阅者 (sub) 接收消息
  • Redis 客户端可以订阅任意数量的频道

redis 发布订阅基本命令

命令

命令说明

SUBSCRIBE channel [channel …]

订阅给定的一个或多个频道的信息

UNSUBSCRIBE [channel [channel …]]

指退订给定的频道

PUBLISH channel message

将信息发送到指定的频道

PSUBSCRIBE pattern [pattern …]

订阅一个或多个符合给定模式的频道

PUNSUBSCRIBE [pattern [pattern …]]

退订所有给定模式的频道

PUBSUB subcommand [argument [argument …]]

查看订阅与发布系统状态

redis 事务

说明:

  • Redis 事务可以一次执行多个命令;
  • 批量操作在发送EXEC命令前被放入队列缓存;
  • 收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余命令继续执行;
  • 在事务执行过程中,其他客户端提交的命令请求不会插入事务执行命令序列中;
  • 事务执行三个阶段
  • 开始事务
  • 命令入队列
  • 执行事务

redis 事务基本命令

命令

命令说明

MULTI

标记一个事务块开始,之后所有命令会被放入执行队列中

DISCARD

取消事务,放弃执行队列中的所有命令

EXEC

执行所有执行队列中的命令

WATCH key [key …]

监视一个(或多个) key ,若在事务执行之前这个(或这些) key 被其他命令改动,那么事务将被打断

UNWATCH

取消 WATCH 命令对所有 key 的监视

redis 脚本

说明:

  • Redis使用Lua解释器来执行脚本,redis内嵌支持 Lua 环境;
  • 执行脚本的常用命令为 EVAL

redis 脚本基本命令

命令

命令说明

EVAL script numkeys key [key …] arg [arg …]

执行 Lua 脚本

script: 参数是一段Lua脚本程序,脚本不必(也不应该)定义为一个Lua函数

numkeys: 指定键名参数的个数

key [key …]: 表示在脚本中所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量KEYS数组访问,如KEYS[1] ,KEYS[2]

arg [arg …]: 附加参数,在Lua中通过全局变量ARGV数组访问,如ARGV[1] 、ARGV[2])

EVALSHA sha1 numkeys key [key …] arg [arg …]

执行 Lua 脚本

SCRIPT EXISTS script [script …]

查看指定的脚本是否已经被保存在缓存当中

SCRIPT FLUSH

从脚本缓存中移除所有脚本

SCRIPT KILL

杀死当前正在运行的 Lua 脚本

SCRIPT LOAD script

将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本

redis 连接

redis 连接基本命令

命令

命令说明

AUTH password

密码验证

ECHO message

打印字符串

PING

验证服务是否通畅或是否启动

QUIT

退出客户端

SELECT index

切换库,默认登录库为0

redis服务器

redis 服务器基本命令

命令

命令说明

INFO [section]

获取 Redis 服务器的各种信息和统计数值

SAVE

同步保存数据到硬盘

BGREWRITEAOF

异步执行一个 AOF(AppendOnly File) 文件重写操作

BGSAVE

在后台异步保存当前数据库的数据到磁盘

CLIENT KILL [ip:port] [ID client-id]

关闭客户端连接

CLIENT LIST

获取连接到服务器的客户端连接列表

CLIENT GETNAME

获取连接的名称

CLIENT PAUSE timeout

在指定时间内终止运行来自客户端的命令

CLIENT SETNAME connection-name

设置当前连接的名称

CLUSTER SLOTS

获取集群节点的映射数组

COMMAND

获取 Redis 命令详情数组

COMMAND COUNT

获取 Redis 命令总数

COMMAND GETKEYS

获取给定命令的所有键

TIME

返回当前服务器时间

COMMAND INFO command-name [command-name …]

获取指定 Redis 命令描述的数组

CONFIG GET parameter

获取指定配置参数的值

CONFIG REWRITE

对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写

CONFIG SET parameter value

修改 redis 配置参数,无需重启

CONFIG RESETSTAT

重置 INFO 命令中的某些统计数据

DBSIZE

返回当前数据库的 key 的数量

DEBUG OBJECT key

获取 key 的调试信息

DEBUG SEGFAULT

让 Redis 服务崩溃

FLUSHALL

删除所有数据库的所有key

FLUSHDB

删除当前数据库的所有key

LASTSAVE

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

MONITOR

实时打印出 Redis 服务器接收到的命令,调试用

ROLE

返回主从实例所属的角色

SHUTDOWN [NOSAVE] [SAVE]

异步保存数据到硬盘,并关闭服务器

SLAVEOF host port

将当前服务器转变为指定服务器的从属服务器(slave server)

SLOWLOG subcommand [argument]

管理 redis 的慢日志

SYNC

用于复制功能(replication)的内部命令

redis GEO

说明: GEO 主要用于存储地理位置信息,并对存储的信息进行操作

redis>GEOADD geotestkey 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
redis>GEOPOS geotestkey Palermo Catania NonExisting
redis>GEODIST geotestkey Palermo Catania
redis>GEODIST geotestkey Palermo Catania km
redis>GEORADIUS geotestkey 15 37 100 km
redis>GEORADIUSBYMEMBER geotestkey Agrigento 100 km
redis>GEOHASH geotestkey Palermo Catania

redis GEO基本命令

命令

命令说明

GEOADD key longitude latitude member [longitude latitude member …]

可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中

GEOPOS key member [member …]

从key里返回所有指定名称(member)的位置(经度和纬度),不存在返回 nil

GEODIST key member1 member2 [m|km|ft|mi]

返回两个给定位置之间的距离

m :米,默认单位

km :千米

mi :英里

ft :英尺

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回;

WITHCOORD: 将位置元素的经度和维度也一并返回;

WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。主要用于底层应用或者调试, 实际中的作用并不大;

COUNT 限定返回的记录数

ASC: 查找结果根据距离从近到远排序;

DESC: 查找结果根据从远到近排序;

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回;

WITHCOORD: 将位置元素的经度和维度也一并返回;

WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。主要用于底层应用或者调试, 实际中的作用并不大;

COUNT 限定返回的记录数

ASC: 查找结果根据距离从近到远排序;

DESC: 查找结果根据从远到近排序;

GEOHASH key member [member …]

geohash 用于获取一个或多个位置元素的 geohash 值

使用 geohash 来保存地理位置的坐标

redis Stream

说明

  • 主要用于消息队列MQ;
  • redis有发布订阅 (pub/sub) 来实现MQ功能,但MQ消息无法持久化,若网络断开、Redis宕机等,消息会被丢弃;
  • 发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息;
  • Stream提供了消息持久化和主备复制功能,可让任何客户端访问任何时刻的数据,且能记住每一个客户端的访问位置,还能保证消息不丢失;
  • Stream结构有一个消息链表将所有加入的消息串起来,每个消息都有一个唯一的ID和对应内容;
  • 每个Stream都有唯一的名称,即Redis的key,首次使用 xadd 指令追加消息时自动创建

主要概念

  • Consumer Group:消费组,使用XGROUP CREATE命令创建,一个消费组有多个消费者(Consumer)
  • last_delivered_id:游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。
  • pending_ids:消费者(Consumer)状态变量,维护消费者的未确认的 id,记录当前已被客户端读取的消息,但还没有ack(Acknowledge character:确认字符)

redis Stream消息队列基本命令

redis> XADD mystream * f1 test1 f2 test2
redis> XADD mystream * fie1 fietest1 fie2 fietest2
redis> XLEN mystream
redis> XRANGE mystream - +
redis> XTRIM mystream MAXLEN 2
redis> XDEL mystream 1538561700640-0
redis> XREVRANGE mystream + -
redis> XREAD COUNT 2 STREAMS mystream 1615131293407-0

命令

命令说明

XADD key ID field value [field value …]

添加消息到末尾

key :队列名称,如果不存在就创建

ID :消息 id,我们使用 * 表示由 redis 生成,可自定义,但是要自己保证递增性

field value : 记录

XLEN

获取流包含的元素数量,即消息长度

XTRIM key MAXLEN [~] count

对流进行修剪,限制长度

key :队列名称

MAXLEN :长度

count :数量

XDEL key ID [ID …]

删除消息

key:队列名称

ID :消息 ID

XRANGE key start end [COUNT count]

获取消息列表,会自动过滤已经删除的消息

key :队列名

start :开始值, - 表示最小值

end :结束值, + 表示最大值

count :数量

XREVRANGE key end start [COUNT count]

反向获取消息列表,ID 从大到小

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] id [id …]

以阻塞或非阻塞方式获取消息列表,以指定消息id的位置读取指定数量的消息

count :数量

milliseconds :可选,阻塞毫秒数,没有设置就是非阻塞模式

key :队列名

id :消息 ID

redis Stream消费者组基本命令

redis> XGROUP CREATE mystream mygroup 1615131301613-0
redis> XGROUP CREATE mystream mygroup $
redis> XREADGROUP GROUP mygroup myuser COUNT 1 STREAMS mystream >
redis> 
redis>

命令

命令说明

XGROUP [CREATE key groupname id-or-$] [SETID key groupname id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]

创建消费者组

key :队列名称,如果不存在就创建

groupname :组名

$ : 表示从尾部开始消费,只接受新消息,当前 Stream 消息会全部忽略

XGROUP DESTROY

删除消费者组

XGROUP DELCONSUMER

删除消费者

XGROUP SETID

为消费者组设置新的最后递送消息ID

XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key …] ID [ID …]

读取消费者组中的消息

group :消费组名

consumer :消费者名

count : 读取数量

milliseconds : 阻塞毫秒数

key : 队列名

ID : 消息 ID

XACK

将消息标记为"已处理"

XPENDING

显示待处理消息的相关信息

XCLAIM

转移消息的归属权

XINFO

查看流和消费者组的相关信息

XINFO GROUPS

打印消费者组的信息

XINFO STREAM

打印流信息