Redis相关命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis相关命令相关的知识,希望对你有一定的参考价值。

(一)简介

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

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

[[email protected] ~]# /usr/local/redis-3.2.9/src/redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

远程登录为:

[[email protected] ~]# /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键相关的基本命令:

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

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

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

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

序号命令说明
1SADD key member1 [member2]将一个或多个成员添加到集合
2SCARD key获取集合中的成员数
3SDIFF key1 [key2]减去多个集合
4SDIFFSTORE destination key1 [key2]减去多个集并将结果集存储在键中
5SINTER key1 [key2]相交多个集合
6SINTERSTORE destination key1 [key2]交叉多个集合并将结果集存储在键中
7SISMEMBER key member判断确定给定值是否是集合的成员
8SMOVE source destination member将成员从一个集合移动到另一个集合
9SPOP key从集合中删除并返回随机成员
10SRANDMEMBER key [count]从集合中获取一个或多个随机成员
11SREM key member1 [member2]从集合中删除一个或多个成员
12SUNION key1 [key2]添加多个集合
13SUNIONSTORE destination key1 [key2]添加多个集并将结果集存储在键中
14SSCAN 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
序号命令说明
1PFADD key element [element …]将指定的元素添加到指定的HyperLogLog 中。
2PFCOUNT key [key …]返回给定 HyperLogLog 的基数估算值。
3PFMERGE 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发布订阅相关的一些基本命令。

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


序号命令说明
1DISCARD丢弃在MULTI之后发出的所有命令
2EXEC执行MULTI后发出的所有命令
3MULTI标记事务块的开始
4UNWATCH取消 WATCH 命令对所有 key 的监视。
5WATCH 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脚本相关的一些基本命令。

序号命令说明
1EVAL script numkeys key [key …] arg [arg …]执行一个Lua脚本。
2EVALSHA sha1 numkeys key [key …] arg [arg …]执行一个Lua脚本。
3SCRIPT EXISTS script [script …]检查脚本缓存中是否存在脚本。
4SCRIPT FLUSH从脚本缓存中删除所有脚本。
5SCRIPT KILL杀死当前正在执行的脚本。
6SCRIPT 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连接相关的一些基本命令。

序号命令说明
1AUTH password使用给定的密码验证服务器
2ECHO message打印给定的字符串信息
3PING检查服务器是否正在运行
4QUIT关闭当前连接
5SELECT 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服务器相关的一些基本命令。

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


本文出自 “清风明月” 博客,请务必保留此出处http://liqingbiao.blog.51cto.com/3044896/1934927

以上是关于Redis相关命令的主要内容,如果未能解决你的问题,请参考以下文章

12 string 相关操作

15 set 相关操作

16 zset 相关操作

11 key 相关操作

最通俗易懂的Redis发布订阅及代码实战

20 发布订阅 相关操作