Redis(二)相关命令

(一)简介

Redis 命令用于在 redis 服务上执行操作。

要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。Redis 客户端的基本语法为:redis-cli

[root@localhost ~]# /usr/local/redis-3.2.9/src/redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

远程登录为:

[root@localhost ~]# /usr/local/redis-3.2.9/src/redis-cli -h 127.0.0.1 -p 6379 -a "redis123456"     
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>


(二)命令的详解

 (1)Redis键(key)。redis键命令用于管理redis的键

语法:127.0.0.1:6379>  COMMAND  KEY_NAME

 实例如下:

127.0.0.1:6379> set foo redis
OK
127.0.0.1:6379> get foo
"redis"
127.0.0.1:6379> del foo
(integer) 1
127.0.0.1:6379> get foo
(nil)

在上边的实例中set 是一个命令,foo是一个键,get foo是获取这个键,del foo是删除这个键,如果删除成功后会输出 (integer) 1,否则将输出 (integer) 0

下表给出了与redis键相关的基本命令:

编号 命令 描述
1 DEL key 此命令删除一个指定键(如果存在)。
2 DUMP key 此命令返回存储在指定键的值的序列化版本。
3 EXISTS key 此命令检查键是否存在。
4 EXPIRE key seconds 设置键在指定时间秒数之后到期/过期。
5 EXPIREAT key timestamp 设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式。
6 PEXPIRE key milliseconds 设置键的到期时间(以毫秒为单位)。
7 PEXPIREAT key milliseconds-timestamp 以Unix时间戳形式来设置键的到期时间(以毫秒为单位)。
8 KEYS pattern 查找与指定模式匹配的所有键。
9 MOVE key db 将键移动到另一个数据库。
10 PERSIST key 删除指定键的过期时间,得永生。
11 PTTL key 获取键的剩余到期时间。
12 RANDOMKEY 从Redis返回一个随机的键。
13 RENAME key newkey 更改键的名称。
14 PTTL key 获取键到期的剩余时间(以毫秒为单位)。
15 RENAMENX key newkey 如果新键不存在,重命名键。
16 TYPE key 返回存储在键中的值的数据类型。


(2)redis字符串(string)。redis字符串数据类型的相关命令是用于管理redis字符串值。语法:

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例:

127.0.0.1:6379> set country china
OK
127.0.0.1:6379> get country
"china"

在上边的例子中,set和get是redis中的命令,而country是键的名称。下表列出了redis中管理字符串的基本命令:

编号 命令 描述说明
1 SET key value 此命令设置指定键的值。
2 GET key 获取指定键的值。
3 GETRANGE key start end 获取存储在键上的字符串的子字符串。
4 GETSET key value 设置键的字符串值并返回其旧值。
5 GETBIT key offset 返回在键处存储的字符串值中偏移处的位值。
6 MGET key1 [key2..] 获取所有给定键的值
7 SETBIT key offset value 存储在键上的字符串值中设置或清除偏移处的位
8 SETEX key seconds value 使用键和到期时间来设置值
9 SETNX key value 设置键的值,仅当键不存在时
10 SETRANGE key offset value 在指定偏移处开始的键处覆盖字符串的一部分
11 STRLEN key 获取存储在键中的值的长度
12 MSET key value [key value …] 为多个键分别设置它们的值
13 MSETNX key value [key value …] 为多个键分别设置它们的值,仅当键不存在时
14 PSETEX key milliseconds value 设置键的值和到期时间(以毫秒为单位)
15 INCR key 将键的整数值增加1
16 INCRBY key increment 将键的整数值按给定的数值增加
17 INCRBYFLOAT key increment 将键的浮点值按给定的数值增加
18 DECR key 将键的整数值减1
19 DECRBY key decrement 按给定数值减少键的整数值
20 APPEND key value 将指定值附加到键


 (3)Redis 哈希(Hash)。Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

127.0.0.1:6379> HMSET myhash id "1" name "arvin" sex "man" address "china" 
OK
127.0.0.1:6379> hgetall myhash
1) "id"
2) "1"
3) "name"
4) "arvin"
5) "sex"
6) "man"
7) "address"
8) "china"
127.0.0.1:6379> hkeys myhash
1) "id"
2) "name"
3) "sex"
4) "address"
127.0.0.1:6379> hvals myhash
1) "1"
2) "arvin"
3) "man"
4) "china"

在上面的例子中设置了redis的一些描述信息(id,name sex address)到哈希表myhash中。

序号 命令 说明
1 HDEL key field2 [field2] 删除一个或多个哈希字段。
2 HEXISTS key field 判断是否存在散列字段。
3 HGET key field 获取存储在指定键的哈希字段的值。
4 HGETALL key 获取存储在指定键的哈希中的所有字段和值
5 HINCRBY key field increment 将哈希字段的整数值按给定数字增加
6 HINCRBYFLOAT key field increment 将哈希字段的浮点值按给定数值增加
7 HKEYS key 获取哈希中的所有字段
8 HLEN key 获取散列中的字段数量
9 HMGET key field1 [field2] 获取所有给定哈希字段的值
10 HMSET key field1 value1 [field2 value2 ] 为多个哈希字段分别设置它们的值
11 HSET key field value 设置散列字段的字符串值
12 HSETNX key field value 仅当字段不存在时,才设置散列字段的值
13 HVALS key 获取哈希中的所有值


 (4)redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

127.0.0.1:6379> LPUSH database mysql
(integer) 1
127.0.0.1:6379> LPUSH database oracle
(integer) 2
127.0.0.1:6379> LPUSH database sql server
(integer) 4
127.0.0.1:6379> LPUSH database db2
(integer) 5
127.0.0.1:6379> lrange database 0 4
1) "db2"
2) "server"
3) "sql"
4) "oracle"
5) "mysql"

已上列子通过LPUSH将四个值插入到名称为database的redis列表中。列表常用的基本命令:

序号 命令 说明
1 BLPOP key1 [key2 ] timeout 删除并获取列表中的第一个元素,或阻塞,直到有一个元素可用
2 BRPOP key1 [key2 ] timeout 删除并获取列表中的最后一个元素,或阻塞,直到有一个元素可用
3 BRPOPLPUSH source destination timeout 从列表中弹出值,将其推送到另一个列表并返回它; 或阻塞,直到一个可用
4 LINDEX key index 通过其索引从列表获取元素
5 LINSERT key BEFORE/AFTER pivot value 在列表中的另一个元素之前或之后插入元素
6 LLEN key 获取列表的长度
7 LPOP key 删除并获取列表中的第一个元素
8 LPUSH key value1 [value2] 将一个或多个值添加到列表
9 LPUSHX key value 仅当列表存在时,才向列表添加值
10 LRANGE key start stop 从列表中获取一系列元素
11 LREM key count value 从列表中删除元素
12 LSET key index value 通过索引在列表中设置元素的值
13 LTRIM key start stop 修剪列表的指定范围
14 RPOP key 删除并获取列表中的最后一个元素
15 RPOPLPUSH source destination 删除列表中的最后一个元素,将其附加到另一个列表并返回
16 RPUSH key value1 [value2] 将一个或多个值附加到列表
17 RPUSHX key value 仅当列表存在时才将值附加到列表


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

127.0.0.1:6379> SADD myset "redis"
(integer) 1
127.0.0.1:6379> SADD myset "mysql"
(integer) 1
127.0.0.1:6379> SADD myset "mongodb"
(integer) 1
127.0.0.1:6379> SADD myset "mysql"
(integer) 0
127.0.0.1:6379> SMEMBERS MYSET
(empty list or set)
127.0.0.1:6379> SMEMBERS myset
1) "mongodb"
2) "mysql"
3) "redis"

以上示例通过sadd将三个值插入到myset的redis集合中。

序号 命令 说明
1 SADD key member1 [member2] 将一个或多个成员添加到集合
2 SCARD key 获取集合中的成员数
3 SDIFF key1 [key2] 减去多个集合
4 SDIFFSTORE destination key1 [key2] 减去多个集并将结果集存储在键中
5 SINTER key1 [key2] 相交多个集合
6 SINTERSTORE destination key1 [key2] 交叉多个集合并将结果集存储在键中
7 SISMEMBER key member 判断确定给定值是否是集合的成员
8 SMOVE source destination member 将成员从一个集合移动到另一个集合
9 SPOP key 从集合中删除并返回随机成员
10 SRANDMEMBER key [count] 从集合中获取一个或多个随机成员
11 SREM key member1 [member2] 从集合中删除一个或多个成员
12 SUNION key1 [key2] 添加多个集合
13 SUNIONSTORE destination key1 [key2] 添加多个集并将结果集存储在键中
14 SSCAN key cursor [MATCH pattern] [COUNT count] 递增地迭代集合中的元素


 (6)Redis有序集合(sorted set)和集合一样也是string字符型元素的集合,且不允许有重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

127.0.0.1:6379> zadd mysorted 1 redis
(integer) 1
127.0.0.1:6379> zadd mysorted 3 mongodb
(integer) 1
127.0.0.1:6379> zadd mysorted 2 mysql
(integer) 1
127.0.0.1:6379> zadd mysorted 4 mysql
(integer) 0
127.0.0.1:6379> zadd mysorted 6 mysql
(integer) 0
127.0.0.1:6379> zrange mysorted 0 10
1) "redis"
2) "mongodb"
3) "mysql"
127.0.0.1:6379> zrange mysorted 0 10 withscores
1) "redis"
2) "1"
3) "mongodb"
4) "3"
5) "mysql"
6) "6"


 (7)Redis HyperLogLog是用来做基数统计的算法,以少量内存提供集合中唯一元素数量的近似值。HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值:

  • 基数:集合中不同元素的数量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基数就是 3 。

  • 估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。

HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以
HyperLogLog 不能像集合那样,返回输入的各个元素。

127.0.0.1:6379> pfadd qaz "redis"
(integer) 1
127.0.0.1:6379> pfadd qaz "mysql"
(integer) 1
127.0.0.1:6379> pfadd qaz "mongodb"
(integer) 1
127.0.0.1:6379> pfcount qaz
(integer) 3
序号 命令 说明
1 PFADD key element [element …] 将指定的元素添加到指定的HyperLogLog 中。
2 PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog


 (8)redis发布订阅。

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 发布订阅(pub/sub)实现了消息系统,发送者(在redis术语中称为发布者)在接收者(订阅者)接收消息时发送消息。传送消息的链路称为信道。

在Redis中,客户端可以订阅任意数量的信道

首先在一个客户端输入subscribe redischat,等待另一个客户端输入,显示如下:

127.0.0.1:6379> subscribe redischat 
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redischat"
3) (integer) 1
1) "message"
2) "redischat"
3) "hello everyont"
1) "message"
2) "redischat"
3) "redis is very great caching technique"

重新开个客户端输入如下:

127.0.0.1:6379> publish redischat "hello everyont"
(integer) 1
127.0.0.1:6379> publish redischat "redis is very great caching technique"
(integer) 1
127.0.0.1:6379> publish redischat "learn redis by lqb"
(integer) 1
127.0.0.1:6379> publish redischat "learn redis by lqb"
(integer) 1

下表列出了与Redis发布订阅相关的一些基本命令。

序号 命令 说明
1 PSUBSCRIBE pattern [pattern …] 订阅一个或多个符合给定模式的频道。
2 PUBSUB subcommand [argument [argument …]] 查看订阅与发布系统状态。
3 PUBLISH channel message 将信息发送到指定的频道。
4 PUNSUBSCRIBE [pattern [pattern …]] 退订所有给定模式的频道。
5 SUBSCRIBE channel [channel …] 订阅给定的一个或多个频道的信息。
6 UNSUBSCRIBE [channel [channel …]] 退订给定的频道。


 (9)Redis事物。Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 事务中的所有命令作为单个隔离操作并按顺序执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

  • Redis事务也是原子的。原子意味着要么处理所有命令,要么都不处理。

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

  • 开始事务。

  • 命令入队。

  • 执行事务。

实例:Redis事务由命令MULTI命令启动,然后需要传递一个应该在事务中执行的命令列表,然后整个事务由EXEC命令执行。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set foo "this is test page"
QUEUED
127.0.0.1:6379> get book-name
QUEUED
127.0.0.1:6379> sadd tag "c++ is very good programming"
QUEUED
127.0.0.1:6379> smembers tag
QUEUED
127.0.0.1:6379> exec
1) OK
2) (nil)
3) (integer) 1
4) 1) "c++ is very good programming"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set mykey "redis"
QUEUED
127.0.0.1:6379> get mykey
QUEUED
127.0.0.1:6379> incr visitors
QUEUED
127.0.0.1:6379> exec
1) OK
2) "redis"
3) (integer) 1

与redis相关的基本命令:


序号 命令 说明
1 DISCARD 丢弃在MULTI之后发出的所有命令
2 EXEC 执行MULTI后发出的所有命令
3 MULTI 标记事务块的开始
4 UNWATCH 取消 WATCH 命令对所有 key 的监视。
5 WATCH key [key …] 监视给定的键以确定MULTI / EXEC块的执行


 (10)redis脚本。Redis脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

下表列出了与Redis脚本相关的一些基本命令。

序号 命令 说明
1 EVAL script numkeys key [key …] arg [arg …] 执行一个Lua脚本。
2 EVALSHA sha1 numkeys key [key …] arg [arg …] 执行一个Lua脚本。
3 SCRIPT EXISTS script [script …] 检查脚本缓存中是否存在脚本。
4 SCRIPT FLUSH 从脚本缓存中删除所有脚本。
5 SCRIPT KILL 杀死当前正在执行的脚本。
6 SCRIPT LOAD script 将指定的Lua脚本加载到脚本缓存中。


 (11)Redis连接。Redis中的连接命令基本上是用于管理与Redis服务器的客户端连接。

redis 127.0.0.1:6379> AUTH "password"
OK
redis 127.0.0.1:6379> PING
PONG

下表列出了与Redis连接相关的一些基本命令。

序号 命令 说明
1 AUTH password 使用给定的密码验证服务器
2 ECHO message 打印给定的字符串信息
3 PING 检查服务器是否正在运行
4 QUIT 关闭当前连接
5 SELECT index 更改当前连接的所选数据库


 (12)Redis 服务器,Redis 服务器命令主要是用于管理 redis 服务

127.0.0.1:6379> info
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:2f58f346024ca4bb
redis_mode:standalone
os:Linux 3.10.0-327.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:2329
run_id:bf5c0b97691ac975438fb6a954b13ed9a9d564ba
tcp_port:6379
uptime_in_seconds:97760
uptime_in_days:1
hz:10
lru_clock:4162916
executable:/usr/local/redis-3.2.9/src/redis-server
config_file:
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:913168
used_memory_human:891.77K
used_memory_rss:2727936
used_memory_rss_human:2.60M
used_memory_peak:913168
used_memory_peak_human:891.77K
total_system_memory:3968024576
total_system_memory_human:3.70G
used_memory_lua:40960
used_memory_lua_human:40.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.99
mem_allocator:libc
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1497328628
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:6
total_commands_processed:180
instantaneous_ops_per_sec:0
total_net_input_bytes:7123
total_net_output_bytes:35960048
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:171
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:70
keyspace_misses:13
pubsub_channels:1
pubsub_patterns:0
latest_fork_usec:113
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:33.59
used_cpu_user:14.42
used_cpu_sys_children:0.01
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=20,expires=0,avg_ttl=0

下表列出了与Redis服务器相关的一些基本命令。

序号 命令 说明
1 BGREWRITEAOF 异步重写仅追加的文件
2 BGSAVE 将数据集异步保存到磁盘
3 CLIENT KILL [ip:port] [ID client-id] 杀死或断开指定的客户端的连接
4 CLIENT LIST 获取到服务器的客户端连接列表
5 CLIENT GETNAME 获取当前连接的名称
6 CLIENT PAUSE timeout 在指定时间内停止处理来自客户端的命令
7 CLIENT SETNAME connection-name 设置当前连接名称
8 CLUSTER SLOTS 获取群集插槽到节点映射的数组
9 COMMAND 获取Redis命令详细信息的数组
10 COMMAND COUNT 获取Redis命令的总数
11 COMMAND GETKEYS 提取键给出一个完整的Redis的命令
12 BGSAVE 将数据集异步保存到磁盘
13 COMMAND INFO command-name [command-name …] 获取特定Redis命令详细信息的数组
14 CONFIG GET parameter 获取配置参数的值
15 CONFIG REWRITE 使用内存中配置来重写配置文件
16 CONFIG SET parameter value 将配置参数设置为给定值
17 CONFIG RESETSTAT 重置由INFO返回的统计信息
18 DBSIZE 返回所选数据库中的键数量
19 DEBUG OBJECT key 获取有关键的调试信息
20 DEBUG SEGFAULT 使服务器崩溃
21 FLUSHALL 从所有数据库中删除所有键
22 FLUSHDB 删除当前数据库中的所有键
23 INFO [section] 获取有关服务器的信息和统计信息
24 LASTSAVE 获取上次成功保存到磁盘的UNIX时间戳
25 MONITOR 监听服务器实时接收的所有请求
26 ROLE 返回实例在复制上下文中的角色
27 SAVE 将数据集同步保存到磁盘
28 SHUTDOWN [NOSAVE] [SAVE] 将数据集同步保存到磁盘,然后关闭服务器
29 SLAVEOF host port 使服务器成为另一个实例的从属,或将其提升作为主服务器
30 SLOWLOG subcommand [argument] 管理Redis慢查询日志
31 SYNC 用于复制的命令
32 TIME 返回当前服务器的时间