查看“Redis:常用命令”的源代码
←
Redis:常用命令
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Redis]] == 关于 == <pre> Remote Dictionary Server(Redis)是一个开源的由 Salvatore Sanfilippo 使用 ANSI C 语言编写的'''key-value'''数据存储服务器。其值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型,所以它通常也被称为数据结构服务器。 </pre> Redis 本质上是一个 '''Key-Value 类型的内存数据库''',很像 memcached,整个数据库统统加载在'''内存当中进行操作''',定期通过异步操作把数据库数据 '''flush''' 到硬盘上进行保存。 * 因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。 * Redis的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外【单个 value 的最大限制是 '''1 GB'''】,不像 memcached 只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 *: 比方说用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性 能消息队列服务,用他的 Set 可以做高性能的 tag 系统等等。【???】 * 另外 Redis 也可以对存入的 Key-Value 设置 expire 时间,因此也可以被当作一个功能加强版的 memcached 来用。 Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在'''较小数据量的高性能操作和运算'''上。 * “'''redis.conf'''”是 Redis 的配置文件; * redis 默认为 '''16''' 个库(默认自动使用 '''0''' 号库); === 特点 === redis 的特点: # redis 足够简单和稳定 # 支持丰富的数据结构 # '''内存存储'''读写性能优秀 # 提供'''持久化'''的支持 # 支持部分'''事务'''操作 == 关于 NoSQL == redis 属于'''NoSQL'''数据库,NoSQL 数据库叫'''非关系型数据库''',('''NoSQL = Not Only SQL'''),意即“不仅仅是SQL”。 按存储方式不同,数据库可以分为以下类型: * key-value 存储:“Berkeley DB”、“'''MemcacheDB'''”、“'''Redis'''”;【Memcache不能持久化???】 * 文档存储:“'''MongoDB'''”、“CouchDB”; * 列存储:“Hbase”、“Cassandra”; == Redis命令 == redis手册: * redis英文版命令大全:“https://redis.io/commands” * redis中文版命令大全:“http://redisdoc.com/” === 连接命令 === Redis 连接命令主要是用于连接 redis 服务: {| class="wikitable" ! 命令 !! 描述 |- | '''AUTH''' <password> || 验证密码是否正确 |- | ECHO <message> || 打印字符串 |- | '''PING''' || 查看服务是否运行 |- | '''QUIT''' || 关闭当前连接 |- | '''SELECT''' <index> || 切换到指定的数据库 |} 示例: <syntaxhighlight lang="java" highlight=""> redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG </syntaxhighlight> === 服务器命令 === Redis 服务器命令主要是用于管理 redis 服务: {| class="wikitable" ! 命令 !! 描述 |- | '''INFO''' [section] || 获取 Redis 服务器的各种信息和统计数值 |- | '''MONITOR''' || 实时打印出 Redis 服务器接收到的命令,调试用 |- | '''DBSIZE''' || 返回当前数据库的 key 的数量 |- | '''FLUSHALL''' || 删除所有数据库的所有key |- | '''FLUSHDB''' || 删除当前数据库的所有key |- | TIME || 返回当前服务器时间 |- | '''LASTSAVE''' || 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |- | '''SAVE''' || 同步保存数据到硬盘 |- | '''BGSAVE''' || 在后台异步保存当前数据库的数据到磁盘 |- | '''BGREWRITEAOF''' || 异步执行一个 AOF(AppendOnly File) 文件重写操作 |- | SHUTDOWN [NOSAVE] [SAVE] || 异步保存数据到硬盘,并关闭服务器 |- | '''COMMAND''' || 获取 Redis 命令详情数组 |- | COMMAND COUNT || 获取 Redis 命令总数 |- | COMMAND GETKEYS || 获取给定命令的所有键 |- | COMMAND INFO <command-name> [<command-name>] || 获取指定 Redis 命令描述的数组 |- | '''CLIENT LIST''' || 获取连接到服务器的客户端连接列表 |- | CLIENT GETNAME || 获取连接的名称 |- | CLIENT PAUSE <timeout> || 在指定时间内终止运行来自客户端的命令 |- | CLIENT SETNAME <connection-name> || 设置当前连接的名称 |- | CLIENT KILL [ip:port] [ID client-id] || 关闭客户端连接 |- | '''CONFIG GET''' <parameter> || 获取指定配置参数的值 |- | CONFIG REWRITE || 对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写 |- | '''CONFIG SET''' <parameter> <value> || 修改 redis 配置参数,无需重启 |- | CONFIG RESETSTAT || 重置 INFO 命令中的某些统计数据 |- | DEBUG OBJECT <key> || 获取 key 的调试信息 |- | DEBUG SEGFAULT || 让 Redis 服务崩溃【???】 |- | '''SLOWLOG''' <subcommand> [argument] || 管理 redis 的慢日志 |- | CLUSTER SLOTS || 获取集群节点的映射数组 |- | '''ROLE''' || 返回主从实例所属的角色 |- | '''SLAVEOF''' <host> <port> || 将当前服务器转变为指定服务器的从属服务器(slave server) |- | SYNC || 用于复制功能(replication)的内部命令 |} 以下实例演示了如何获取 redis 服务器的统计信息: <syntaxhighlight lang="java" highlight=""> redis 127.0.0.1:6379> INFO # Server redis_version:2.8.13 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:c2238b38b1edb0e2 redis_mode:standalone os:Linux 3.5.0-48-generic x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.7.2 process_id:3856 run_id:0e61abd297771de3fe812a3c21027732ac9f41fe tcp_port:6379 uptime_in_seconds:11554 uptime_in_days:0 hz:10 lru_clock:16651447 config_file: # Clients connected_clients:1 client-longest_output_list:0 client-biggest_input_buf:0 blocked_clients:0 # Memory used_memory:589016 used_memory_human:575.21K used_memory_rss:2461696 used_memory_peak:667312 used_memory_peak_human:651.67K used_memory_lua:33792 mem_fragmentation_ratio:4.18 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:3 rdb_bgsave_in_progress:0 rdb_last_save_time:1409158561 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:24 total_commands_processed:294 instantaneous_ops_per_sec:0 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 evicted_keys:0 keyspace_hits:41 keyspace_misses:82 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:264 # 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:10.49 used_cpu_user:4.96 used_cpu_sys_children:0.00 used_cpu_user_children:0.01 # Keyspace db0:keys=94,expires=1,avg_ttl=41638810 db1:keys=1,expires=0,avg_ttl=0 db3:keys=1,expires=0,avg_ttl=0 </syntaxhighlight> === 脚本命令 === Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 '''EVAL'''。 Eval 命令的基本语法如下: <syntaxhighlight lang="java" highlight=""> redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...] </syntaxhighlight> 下表列出了 redis 脚本常用命令: {| class="wikitable" ! 命令 !! 描述 |- | EVAL <script> numkeys <key> [<key>] <arg> [<arg>] || 执行 Lua 脚本。 |- | EVALSHA sha1 numkeys <key> [<key>] <arg> [<arg>] || 执行 Lua 脚本。【?】 |- | SCRIPT LOAD <script> || 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。 |- | SCRIPT EXISTS <script> [<script>] || 查看指定的脚本是否已经被保存在缓存当中。 |- | SCRIPT FLUSH || 从脚本缓存中移除所有脚本。 |- | SCRIPT KILL || 杀死当前正在运行的 Lua 脚本。 |} 示例: <syntaxhighlight lang="java" highlight=""> redis 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" </syntaxhighlight> == 安全 == 以下都是在配置文件“'''redis.conf'''”中进行修改。 === 设置密码 === 通过以下命令查看是否设置了密码验证: <syntaxhighlight lang="properties"> 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "" </syntaxhighlight> * 默认情况下 requirepass 参数是空的。 可以通过两种方式设置密码: # 配置文件: #: <syntaxhighlight lang="properties"> requirepass 123456 </syntaxhighlight> # 命令: #: <syntaxhighlight lang="properties"> 127.0.0.1:6379> CONFIG set requirepass "runoob" OK </syntaxhighlight> * 因为 redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。 可以通过两种方式使用密码: # 启动时: #: <syntaxhighlight lang="properties"> redis-cli -h 127.0.0.1 -p 6379 -a 123456 </syntaxhighlight> # 连接时: #: <syntaxhighlight lang="properties"> AUTH 123456 </syntaxhighlight> === 绑定ip === 配置文件中: <syntaxhighlight lang="properties"> # bind 127.0.0.1 </syntaxhighlight> # 取消 ip 绑定注释(去掉 #), # 修改“127.0.0.1”为允许访问 redis 服务器的ip地址: === 禁用命令、重命名命令 === 配置文件中: <syntaxhighlight lang="properties"> rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k # 重命名FLUSHALL命令 rename-command FLUSHALL "" # 禁用FLUSHALL命令 rename-command FLUSHDB "" # 禁止FLUSHDB命令 rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 重命名CONFIG命令 rename-command CONFIG "" # 禁止CONFIG命令 </syntaxhighlight> * 对于禁用“FLUSHALL”命令,需要保证“appendonly.aof”文件没有 flushall 命令,否则服务器无法启动; === 修改默认端口 === 配置文件中: <syntaxhighlight lang="properties"> port 6379 </syntaxhighlight> * 修改 redis 的端口,这一点很重要,使用默认的端口很危险;
返回至“
Redis:常用命令
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息