Redis命令-常规

Monday, January 15, 2018

redis-server

启动服务器

vagrant@homestead:~$ sudo /etc/init.d/redis-server [start|stop|restart]

redis-cli

连接服务器,可选参数有 -h(Host) -p[Port] -a[AuthPassword]

vagrant@homestead:~$ redis-cli -h 127.0.0.1 -p 6379 -a foobar

ping

ping命令可用于检测redis实例是否存活,如果存活则显示PONG

vagrant@homestead:~$ redis-cli -h 127.0.0.1 -p 6379 -a foobar
127.0.0.1:6379> ping
PONG

info

获取redis服务器的统计信息

127.0.0.1:6379> info
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:1bc80a08306a3efd
redis_mode:standalone
os:Linux 4.15.0-22-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:7.3.0
process_id:6296
run_id:2e8154c6a22a501c3718ed0842e3dd7b0f12d52b
tcp_port:6379
uptime_in_seconds:4524
uptime_in_days:0
hz:10
lru_clock:10579059
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:841280
used_memory_human:821.56K
used_memory_rss:4009984
used_memory_rss_human:3.82M
used_memory_peak:886360
used_memory_peak_human:865.59K
used_memory_peak_perc:94.91%
used_memory_overhead:832750
used_memory_startup:782512
used_memory_dataset:8530
used_memory_dataset_perc:14.51%
total_system_memory:4136120320
total_system_memory_human:3.85G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.77
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:4
rdb_bgsave_in_progress:0
rdb_last_save_time:1537305449
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:135168
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
aof_last_cow_size:0

# Stats
total_connections_received:13
total_commands_processed:186
instantaneous_ops_per_sec:0
total_net_input_bytes:5692
total_net_output_bytes:140424
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:7
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:25
keyspace_misses:11
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:115
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Replication
role:master
connected_slaves:0
master_replid:d142a42ed468b574fa29e6625d5bd29ff07a5142
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:4.52
used_cpu_user:1.41
used_cpu_sys_children:0.00
used_cpu_user_children:0.01

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=12,expires=0,avg_ttl=0

auth [password]

验证密码

# 没有设置密码
127.0.0.1:6379> auth 123
(error) ERR Client sent AUTH, but no password is set

# 密码错误
127.0.0.1:6379> auth 123
(error) ERR invalid password

# 密码正确
127.0.0.1:6379> auth xxx
OK

select [dbid]

选择数据库

# 正常情况
127.0.0.1:6379> select 1
OK

# 数据库下标超出范围
127.0.0.1:6379[1]> select 20
(error) ERR DB index is out of range

echo [message]

打印字符串,返回字符串本身

127.0.0.1:6379[1]> echo helloredis
"helloredis"

quit

退出连接

127.0.0.1:6379[1]> quit

slaveof [host] [port]

将当前redis服务器转变为指定服务器的从属服务器,如果当期服务器已经是某个主服务器的从属服务器,那么将停止对旧主服务器的复制,丢弃旧数据,转而开始对新服务器进行同步.

slaveof no one: 这个命令将使当前服务器关闭复制功能,并从从属服务器变为主服务器,旧数据不会被丢弃,利用这个特性可以在主服务器失败的时候,将从属服务器变为主服务器,从而实现无间断运行.

shutdown [save|nosave]

该命令执行以下操作:

  • 停止所有客户端
  • 如果有至少一个保存点在等待,执行 SAVE 命令
  • 如果 AOF 选项被打开,更新 AOF 文件
  • 关闭 redis 服务器(server)

执行失败时返回错误, 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出

127.0.0.1:6379> shutdown
not connected>

save

执行一个同步保存操作,将当前 Redis 实例上的所有数据快照(snapshot)以 RDB 文件的形式保存在磁盘,保存成功时返回OK

127.0.0.1:6379> save
OK

bgsave

在后台异步保存当前数据库的数据到磁盘,命令执行之后立即返回 OK,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出

127.0.0.1:6379> bgsave
Background saving started

lastsave

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

127.0.0.1:6379> lastsave
(integer) 1537430941

dbsize

返回当前数据库的key数量

127.0.0.1:6379> dbsize
(integer) 66

flushdb

清空当前数据库的所有key

127.0.0.1:6379[1]> flushdb
OK

flushall

清空整个Redis的所有key

127.0.0.1:6379[1]> flushall
OK

time

返回当前服务器的时间,返回一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数

127.0.0.1:6379> time
1) "1537431255"
2) "527641"

client list

返回当前连接的所有客户端信息和统计数据,返回多行字符串:这些字符串按以下形式被格式化:

  • 每个已连接客户端对应一行(以 LF 分割)
  • 每行字符串由一系列 属性=值 形式的域组成,每个域之间以空格分开

以下是域的含义:

  • addr : 客户端的地址和端口
  • fd : 套接字所使用的文件描述符
  • age : 以秒计算的已连接时长
  • idle : 以秒计算的空闲时长
  • flags : 客户端 flag
  • db : 该客户端正在使用的数据库 ID
  • sub : 已订阅频道的数量
  • psub : 已订阅模式的数量
  • multi : 在事务中被执行的命令数量
  • qbuf : 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)
  • qbuf-free : 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)
  • obl : 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)
  • oll : 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
  • omem : 输出缓冲区和输出列表占用的内存总量
  • events : 文件描述符事件
  • cmd : 最近一次执行的命令

客户端 flag 可以由以下部分组成:

  • O : 客户端是 MONITOR 模式下的附属节点(slave)
  • S : 客户端是一般模式下(normal)的附属节点
  • M : 客户端是主节点(master)
  • x : 客户端正在执行事务
  • b : 客户端正在等待阻塞事件
  • i : 客户端正在等待 VM I/O 操作(已废弃)
  • d : 一个受监视(watched)的键已被修改, EXEC 命令将失败
  • c : 在将回复完整地写出之后,关闭链接
  • u : 客户端未被阻塞(unblocked)
  • A : 尽可能快地关闭连接
  • N : 未设置任何 flag

文件描述符事件可以是:

  • r : 客户端套接字(在事件 loop 中)是可读的(readable)
  • w : 客户端套接字(在事件 loop 中)是可写的(writeable)
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:60146 fd=8 name= age=404 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=4 addr=127.0.0.1:60148 fd=9 name= age=63 idle=63 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
id=5 addr=127.0.0.1:60150 fd=10 name= age=61 idle=61 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
id=6 addr=127.0.0.1:60152 fd=11 name= age=60 idle=60 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command

client setname [name]

指定当前连接的名称,这个名字会显示在 client list结果中,用于识别客户端

可以设置name为"“来达到清除名称的目的,必须是双引号

127.0.0.1:6379> client setname a
OK
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:60146 fd=8 name=a age=1235 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=4 addr=127.0.0.1:60148 fd=9 name= age=894 idle=894 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
id=5 addr=127.0.0.1:60150 fd=10 name= age=892 idle=892 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
id=6 addr=127.0.0.1:60152 fd=11 name= age=891 idle=891 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=command
127.0.0.1:6379> client getname
"a"

# 清除名称
127.0.0.1:6379> client setname ""
OK
127.0.0.1:6379> client getname
(nil)

client getname

获取当前连接的名称

127.0.0.1:6379> client getname
"a"

client kill [ip:port]

关闭指定连接,ip:port可通过 client list 查看.

127.0.0.1:6379> client kill 127.0.0.1:60146
OK
127.0.0.1:6379> client list
not connected>

client pause [timeout]

阻塞客户端一段时间,单位是毫秒,成功后客户端执行命令会被暂时阻塞

127.0.0.1:6379> client pause 10000
OK
127.0.0.1:6379> set a 1
OK
(8.79s)

command

返回所有的Redis命令的详细信息,以数组形式展示

127.0.0.1:6379> command 
0) 1) "zunionstore"
     2) (integer) -4
     3) 1) write
        2) denyoom
        3) movablekeys
     4) (integer) 0
     5) (integer) 0
     6) (integer) 0
1) 1) "set"
     2) (integer) -3
     3) 1) write
        2) denyoom
     4) (integer) 1
     5) (integer) 1
     6) (integer) 1

command count

获取所有命令的总数

127.0.0.1:6379> command count
(integer) 180

role

返回主从实例中所属的角色

127.0.0.1:6379> role
1) "master"
2) (integer) 0
3) (empty list or set)
Redis Redis

MySql学习笔记Redis配置项