1. 启动和停止Redis
Redis可执行文件及说明
文件名 | 说明 |
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | AOF文件修复工具 |
redis-check-rdb | RDB文件检查工具 |
redis-sentinel | Sentinel服务器 |
启动Redis有直接启动和通过初始化脚本启动两种方式,分别适用于开发环境和生产环境。
直接启动
直接执行redis-server即可启动Redis,十分简单。
redis-server
Redis服务器默认适用6379号端口,通过–port参数可以自定义端口号;
redis-server --port 6390
停止Redis
考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。
正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:
redis-cli SHUTDOWN
当Redis接收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。
Redis命令行客户端
通过参数-h和-p可以分别自定义IP地址和端口号:
redis-cli -h 127.0.0.1 -p 6379
通过PING命令来测试客户端与Redis的连接是否正常
redis-cli PING
不附带参数执行redis-cli,进入交互模式,可以自由输入命令。
ichi@ubuntu:~$ redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> ECHO HI
"HI"
127.0.0.1:6379>
命令返回值
①状态回复
状态回复是最简单的一种回复,状态回复直接显示状态信息。
> PING
"PONG"
②错误回复
当出现命令不存在或命令格式有错误等情况时,Redis会返回错误回复。
> ajdaslkdas
"ERR unknown command `ajdaslkdas`, with args beginning with: "
③整数回复
Redis虽然没有整数类型,但是提供了一些用于整数操作的命令。
如递增键值的INCR命令会以整数形式返回递增后的键值。
整数回复以(integer)开头,并在后面跟上整数数据
> INCR foo
(integer) 1
④字符串回复
字符串回复是最常见的回复类型,当请求一个字符串类型键的键值或一个其他类型键中的某个元素时,就会得到一个字符串回复。
字符串回复以双引号包裹:
> GET foo
"1"
⑤多行字符串回复
多行字符串回复同样很常见,如当请求一个非字符串类型键的元素列表时,就会收到多行字符串回复。
多行字符串回复中的每行字符串都以一个序号开头。
> KEYS *
1) "foo"
配置
Redsi支持通过配置文件来设置选项。
启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给redis-server,如:
redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项会覆盖配置文件中相应的参数,就像这样:
redis-server /path/to/redis.conf --loglevel warning
Redis提供了一个配置文件的模板文件redis.conf,位于源代码目录的根目录下。
除此之外,还可以在Redis运行时通过CONFIG SET命令在不重新启动Redis的情况下动态修改部分Redis配置,就像这样:
> CONFIG SET loglevel warning
"OK"
同样,在执行的时候也可以使用CONFIG GET命令获得Redis当前的配置情况,如:
> CONFIG GET loglevel
1) "loglevel"
2) "warning"
多数据库
Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。
这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都以一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一数字。
客户端与Redis建立连接后会自动连接0号数据库,不过可以随时使用SELECT命令更换数据库,如选择1号数据库:
> SELECT 1
"OK"
[db1] > GET FOO
(nil)
然而,这些以数字命名的数据库又与我们理解的数据库有所区别。
首先,Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。
其次,Redis不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么不能访问任何数据库。
最后也是最重要的一点是,多个数据库之间并不是完全隔离的,例如FLUSHALL命令可以清空一个Redis实例中的所有数据库中的数据。