Redis操作.docx
- 文档编号:29496240
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:23
- 大小:23.54KB
Redis操作.docx
《Redis操作.docx》由会员分享,可在线阅读,更多相关《Redis操作.docx(23页珍藏版)》请在冰豆网上搜索。
Redis操作
BGREWRITEAOF
异步(Asynchronously)重写 AOF 文件以反应当前数据库的状态。
即使 BGREWRITEAOF 命令执行失败,旧 AOF 文件中的数据也不会因此丢失或改变。
时间复杂度:
O(N), N 为要追加到 AOF 文件中的数据数量。
返回值:
反馈信息。
redis> BGREWRITEAOF
Background append only file rewriting started
BGSAVE
在后台异步保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
反馈信息。
redis> BGSAVEBackground saving started
SAVE
同步保存当前数据库的数据到磁盘。
时间复杂度:
O(N), N 为要保存到数据库中的 key 的数量。
返回值:
总是返回 OK 。
redis>SAVEOK
LASTSAVE
返回最近一次 Redis 成功执行保存操作的时间点( SAVE 、 BGSAVE 等),以 UNIX 时间戳格式表示。
时间复杂度:
O
(1)
返回值:
一个 UNIX 时间戳。
redis> LASTSAVE(integer) 1324043588
DBSIZE
返回当前数据库的 key 的数量。
时间复杂度:
O
(1)
返回值:
当前数据库的 key 的数量。
redis> DBSIZE
(integer) 5
redis> SET new_key "hello_moto" # 增加一个 key 试试OK
redis> DBSIZE
(integer) 6
SLAVEOF host port
SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用“ SLAVEOF NO ONE 不会丢弃同步所得数据集”这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
时间复杂度:
SLAVEOF host port ,O(N), N 为要同步的数据数量。
SLAVEOF NO ONE , O
(1) 。
返回值:
总是返回 OK 。
redis> SLAVEOF 127.0.0.1 6379
OK
redis> SLAVEOF NO ONE
OK
FLUSHALL
清空整个 Redis 服务器的数据(删除所有数据库的所有 key)。
此命令从不失败。
时间复杂度:
尚未明确
返回值:
总是返回 OK 。
redis> DBSIZE # 0 号数据库的 key 数量
(integer) 9
redis> SELECT 1 # 切换到 1 号数据库
OK
redis[1]> DBSIZE # 1 号数据库的 key 数量
(integer) 6
redis[1]> flushall # 清空所有数据库的所有 key
OK
redis[1]> DBSIZE # 不但 1 号数据库被清空了
(integer) 0
redis[1]> SELECT 0 # 0 号数据库(以及其他所有数据库)也一样
OK
redis> DBSIZE(integer) 0
FLUSHDB
清空当前数据库中的所有 key 。
此命令从不失败。
时间复杂度:
O
(1)
返回值:
总是返回 OK 。
redis> DBSIZE # 清空前的 key 数量
(integer) 4
redis> FLUSHDB
OK
redis> DBSIZE # 清空后的 key 数量
(integer) 0
SHUTDOWN
SHUTDOWN 命令执行以下操作:
停止所有客户端
如果有最少一个保存点在等待,执行 SAVE 命令
如果 AOF 选项被打开,更新 AOF 文件
服务器关闭
如果持久化被打开的话, SHUTDOWN 命令会保证服务器正常关闭而不丢失任何数据。
假如只是单纯地执行 SAVE 命令,然后再执行 QUIT 命令,则没有这一保证 —— 因为在执行 SAVE 之后、执行 QUIT 之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。
时间复杂度:
不明确
返回值:
执行失败时返回错误。
执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。
redis> PING
PONG
redis> SHUTDOWN
[huangz@mypad]$
[huangz@mypad]$ redis
Could not connect to Redis at:
Connection refusednot connected>
SLOWLOG subcommand [argument]
什么是 SLOWLOG
Slow log 是 Redis 用来记录查询执行时间的日志系统。
查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。
另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。
设置 SLOWLOG
Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和CONFIG SET 命令对它们动态地进行修改。
第一个选项是 slowlog-log-slower-then ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:
CONFIG SET slowlog-log-slower-then 100 ,
而以下命令记录所有查询时间大于 1000 微秒的查询:
CONFIG SET slowlog-log-slower-then 1000 。
另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 LIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
以下命令让 slow log 最多保存 1000 条日志:
CONFIG SET slowlog-max-len 1000 。
使用 CONFIG GET 命令可以查询两个选项的当前值:
redis> CONFIG GET slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "1000"
redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1000"
查看 slow log
要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志。
最新的日志会最先被打印:
# 为测试需要,将 slowlog-log-slower-than 设成了 10 微秒
redis> SLOWLOG GET
1) 1) (integer) 12 # 唯一性(unique)的日志标识符
2) (integer) 1324097834 # 被记录命令的执行时间点,以 UNIX 时间戳格式表示
3) (integer) 16 # 查询执行时间,以微秒为单位
4) 1) "CONFIG" # 执行的命令,以数组的形式排列
2) "GET" # 这里完整的命令是 CONFIG GET slowlog-log-slower-than
3) "slowlog-log-slower-than"
2) 1) (integer) 11
2) (integer) 1324097825
3) (integer) 42
4) 1) "CONFIG"
2) "GET"
3) "*"
3) 1) (integer) 10
2) (integer) 1324097820
3) (integer) 11
4) 1) "CONFIG"
2) "GET"
3) "slowlog-log-slower-then"# ...
日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理(比如你可能会想在每次发现新的慢查询时发邮件通知你)。
查看当前日志的数量
使用命令 SLOWLOG LEN 可以查看当前日志的数量。
请注意这个值和 slower-max-len 的区别,它们一个是当前日志的数量,一个是允许记录的最大日志的数量。
redis> SLOWLOG LEN
(integer) 14
清空日志
使用命令 SLOWLOG RESET 可以清空 slow log 。
redis> SLOWLOG LEN
(integer) 14
redis> SLOWLOG RESET
OK
redis> SLOWLOG LEN
(integer) 0
时间复杂度:
O
(1)
返回值:
取决于不同命令,返回不同的值。
INFO
返回关于 Redis 服务器的各种信息和统计值。
时间复杂度:
O
(1)
返回值:
具体请参见下面的测试代码。
redis> INFO
redis_version:
2.4.4 # Redis 的版本
redis_git_sha1:
00000000
redis_git_dirty:
0
arch_bits:
32
multiplexing_api:
epoll
process_id:
903 # 当前 Redis 服务器进程id
uptime_in_seconds:
24612 # 运行时间(以秒计算)
uptime_in_days:
0 # 运行时间(以日计算)
lru_clock:
283730
used_cpu_sys:
3.38
used_cpu_user:
2.15
used_cpu_sys_children:
0.11
used_cpu_user_children:
0.00
connected_clients:
1 # 连接的客户端数量
connected_slaves:
0 # 从属服务器的数量
client_longest_output_list:
0
client_biggest_input_buf:
0
blocked_clients:
0
used_memory:
557304 # Redis 分配的内存总量
used_memory_human:
544.24K
used_memory_rss:
17879040 # Redis 分配的内存总量(包括内存碎片)
used_memory_peak:
565904
used_memory_peak_human:
552.64K
mem_fragmentation_ratio:
32.08 # 内存碎片比率
mem_allocator:
jemalloc-2.2.5 # 目前使用的内存分配库
loading:
0aof_enabled:
0
changes_since_last_save:
2 # 上次保存数据库之后,执行命令的次数
bgsave_in_progress:
0 # 后台进行中的 save 操作的数量
last_save_time:
1324042687 # 最后一次成功保存的时间点,以 UNIX 时间戳格式显示
bgrewriteaof_in_progress:
0 # 后台进行中的 aof 文件修改操作的数量
total_connections_received:
16 # 运行以来连接过的客户端的总数量
total_commands_processed:
87 # 运行以来执行过的命令的总数量
expired_keys:
0 # 运行以来过期的 key 的数量
evicted_keys:
0keyspace_hits:
14 # 命中 key 的次数
keyspace_misses:
14 # 不命中 key 的次数
pubsub_channels:
0 # 当前使用中的频道数量
pubsub_patterns:
0 # 当前使用的模式的数量
latest_fork_usec:
314vm_enabled:
0 # 是否开启了 vm
role:
masterdb0:
keys=6,expires=0 # 各个数据库的 key 的数量,以及带有生存期的 key 的数量
db1:
keys=6,expires=0
db2:
keys=1,expires=0
CONFIG GET parameter
CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),不过并非所有配置参数都被CONFIG GET 命令所支持。
CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以“键-值对”(key-value pairs)的方式排列。
比如执行 CONFIG GET s* 命令,服务器就会返回所有以 s 开头的配置参数及参数的值:
redis> CONFIG GET s*
1) "save" # 参数名:
save
2) "900 1 300 10 60 10000" # save 参数的值
3) "slave-serve-stale-data" # 参数名:
slave-serve-stale-data
4) "yes" # slave-serve-stale-data 参数的值
5) "set-max-intset-entries" # ...
6) "512"
7) "slowlog-log-slower-than"
8) "1000"
9) "slowlog-max-len"
10) "1000"
如果你只是寻找特定的某个参数的话,你当然也可以直接指定参数的名字:
redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1000"
使用命令 CONFIG GET * ,可以列出 CONFIG GET 命令支持的所有参数:
redis> CONFIG GET *
1) "dir"
2) "/var/lib/redis"
3) "dbfilename"
4) "dump.rdb"
5) "requirepass"
6) (nil)
7) "masterauth"
8) (nil)
9) "maxmemory"
10) "0"
11) "maxmemory-policy"
12) "volatile-lru"
13) "maxmemory-samples"
14) "3"
15) "timeout"
16) "0"
17) "appendonly"
18) "no"# ...
49) "loglevel"
50) "verbose"
所有被 CONFIG SET 所支持的配置参数都可以在配置文件 redis.conf 中找到,不过 CONFIG GET 和 CONFIG SET 使用的格式和 redis.conf 文件所使用的格式有以下两点不同:
10kb 、 2gb 这些在配置文件中所使用的储存单位缩写,不可以用在 CONFIG 命令中, CONFIG SET 的值只能通过数字值显式地设定。
像 CONFIG SET xxx 1k 这样的命令是错误的,正确的格式是 CONFIG SET xxx 1000 。
save 选项在 redis.conf 中是用多行文字储存的,但在 CONFIG GET 命令中,它只打印一行文字。
以下是 save 选项在 redis.conf 文件中的表示:
save 900 1
save 300 10
save 60 10000
但是 CONFIG GET 命令的输出只有一行:
redis> CONFIG GET save
1) "save"
2) "900 1 300 10 60 10000"
上面 save 参数的三个值表示:
在 900 秒内最少有 1 个 key 被改动,或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,以上三个条件随便满足一个,就触发一次保存操作。
时间复杂度:
不明确
返回值:
给定配置参数的值。
CONFIG SET parameter value
CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生效。
关于 CONFIG SET 命令的更多消息,请参见命令 CONFIG GET 的说明。
关于如何使用 CONFIG SET 命令修改 Redis 持久化方式,请参见 Redis Persistence 。
时间复杂度:
不明确返回值:
当设置成功时返回 OK ,否则返回一个错误。
redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "1024"
redis> CONFIG SET slowlog-max-len 10086
OK
redis> CONFIG GET slowlog-max-len
1) "slowlog-max-len"
2) "10086"
CONFIG RESETSTAT
重置 INFO 命令中的某些统计数据,包括:
Keyspace hits (键空间命中次数)
Keyspace misses (键空间不命中次数)
Number of commands processed (执行命令的次数)
Number of connections received (连接服务器的次数)
Number of expired keys (过期key的数量)
时间复杂度:
O
(1)返回值:
总是返回 OK 。
# 重置前的部分数据
redis> INFO
# ...
expired_keys:
0
evicted_keys:
0
keyspace_hits:
0
keyspace_misses:
5
# ...
# 重置
redis> CONFIG RESETSTATOK
# 重置后的部分数据
redis> INFO
# ...
expired_keys:
0
evicted_keys:
0
keyspace_hits:
0
keyspace_misses:
0
pubsub_channels:
0
# ...
DEBUG OBJECT key
返回给定 key 的调试信息。
时间复杂度:
O
(1)
返回值:
当 key 存在时,返回有关信息。
当 key 不存在时,返回一个错误。
redis> DEBUG OBJECT my_pc
Value at:
0xb6838d20 refcount:
1 encoding:
raw serializedlength:
9 lru:
283790 lru_seconds_idle:
150redis> DEBUG OBJECT your_mac
(error) ERR no such key
DEBUG SEGFAULT
令 Redis 服务器崩溃,调试用。
时间复杂度:
不明确
返回值:
无
redis> DEBUG SEGFAULT
Could not connect to Redis at:
Connection refusednot connected>
MONITOR
实时打印出 Redis 服务器接收到的命令,调试用。
时间复杂度:
不明确
返回值:
总是返回 OK 。
redis> MONITOR
OK
1324109476.800290 "MONITOR" # 第一个值是 UNIX 时间戳,之后是执行的命令和参数
1324109479.632445 "PING"
1324109486.408230 "SET" "greeting" "hello moto"
1324109490.800364 "KEYS" "*"
1324109509.023495 "lrange" "my_book_li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redis 操作