一、启动和停止Redis
1、Redis可执行文件说明:
redis-server:Redis服务器
redis-cli:Redis命令行客户端
redis-benchmark:Redis性能测试工具
redis-check-aof:AOF文件修复工具
redis-check-dump:RDB文件检查工具
如果在编译后执行了make install命令,这些程序会被复制到/usr/local/bin或者是/usr/local/redis/bin目录内。
1.1、启动Redis启动Redis有直接启动和通过初始化脚本启动两种方式,分别适用于开发环境和生产环境。
1.直接启动
直接运行redis-server即可启动redis,在/usr/local/redis/bin目录下执行./redis-server ./redis.conf,如果不加./redis.conf则不能后台启动redis,如果退出主界面,redis也自动停止。也可以通过加—port 参数自定义端口号。
2.通过初始化脚本启动Redis
可以使用初始化脚本使Redis随系统自动启动。在Redis的源码目录的utils文件夹中有一个名为redis_init_script的初始化脚本文件,内容如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
我们需要配置Redis的运行方式和持久化文件、日志文件的存储位置等:
(1)配置初始化脚本。首先将初始化脚本复制到/etc/init.d目录下,文件名为redis_端口号,这个端口号是需要Redis监听的端口号,客户端将通过这个端口连接Redis。然后修改脚本第6行的REDISPORT变量的值为相同的端口号。
(2)需要建立/etc/redis目录存放Redis的配置文件,/var/redis/端口号存放Redis的持久化文件。
(3)修改配置文件。将Redis的配置文件redis.conf复制到etc/redis目录中,以端口号命名(比如6379.conf),然后将
daemonize设置为yes:使Redis以守护进程模式运行
pidfile设置为/var/run/redis_端口号.pid:设置Redis的PID文件位置
port设置Redis监听的端口号
dir设置为/var/redis/端口号:设置持久化文件存放的位置
现在就可以使用/etc/init.d/redis_6379 start命令来启动Redis了,结果报了一个错“/var/run/redis_6379.pidexists, process is already running or crashed”
只是因为之前使用其他方式启动Redis生成了pid文件,直接删除这个文件再次尝试启动,又报了一个错:“/etc/init.d/redis_6379:行20: /usr/local/bin/redis-server: 没有那个文件或目录”,查看redis_6379这个redis初始化脚本文件,发现EXEC=/usr/local/bin/redis-server和CLIEXEC=/usr/local/bin/redis-cli,而实际的redis-server和redis-cli都是在/usr/local/redis/bin目录下的,所以修改这两个路径如下:
然后再次尝试启动Redis服务器,成功:
执行如下命令使redis随系统自动启动:
systemctl enableredis
1.2停止Redis
强行终止Redis进程可能会导致数据丢失,正确终止Redis的方式应该是向Redis发送SHUTDOWN命令,方法是:redis-cli SHUTDOWN
Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。
使用kill Redis进程的PID的方式也可以正常结束Redis,效果和发送SHUTDOWN命令相同。
1.3Redis命令行客户端
1.3.1发送命令
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到PONG。如:
1.3.2命令回复
1.整数回复会以(integer)开头,并在后面跟着整数数据,比如返回当前数据库中键的数量的命令DBSIZE或是递增键值的INCR命令:

2.字符串回复以双引号包裹,当请求的键不存在时会返回(nil):
1.4Redis配置
可以在启动Redis时跟上配置文件的路径来启用配置文件中的配置:
/etc/init.d/redis_6379start /etc/redis/6379.conf
这样就避免了在启动时跟上一长串的配置命令
通过参数传递同名的配置选项会覆盖配置文件中相应的参数,就像下面这样:
/etc/init.d/redis_6379start /etc/redis/6379.conf --loglevel warning
在Redis运行时,可以通过CONFIG SET命令在不重启Redis的情况下动态修改部分Redis配置:
CONFIG SETloglevel warning
并不是所有配置都可以通过CONFIG SET命令修改。可以通过CONFIG GET命令获取配置信息:
CONFIG GET loglevel
1.5多数据库
Redis是一个字典结构的存储服务器,一个Redis实例可以包含多个存储数据的字典,客户端可以指定将数据存储在哪个字典中,这就像关系数据库中可以创建多个数据库一样,每个字典就相当于一个独立的数据库。
每个字典对外都是以一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改支持的数据库个数。客户端与Redis建立连接后会默认选择0号数据库,可以使用SELECT命令更换数据库,比如选择1号数据库
Redis不支持自定义数据库名字,我们必须自己记录哪些数据库存放了哪些数据,Redis也不支持为每个数据库单独设置访问密码,所以要么可以访问所有数据库,要么所有的都不可以访问。而且每个数据库不是完全隔离的,比如FLUSHALL命令可以清空Redis服务器上所有数据库的数据。所以Redis的数据库概念更像是命名空间,而不适合存储不同应用程序的数据,比如可以使用0号数据库存储某个应用生产环境的数据,使用1号数据库存储测试环境的数据,但不适合使用0号数据库存储A应用的数据而使用1号数据库存储B应用的数据。不同的应用应该使用不同的Redis实例存储数据。一个空Redis实例所占空间很小,所以不用担心多个Redis实例会占用很多内存空间。