redis的官网对其定位如下:
redis是一个开源(BSD许可)内存数据存储,可用作数据库、高速缓存和消息队列代理。其支持字符串、哈希、
列表、集合、分类查询有序集合、位图、hyperloglogs等数据类型,内置复制、Lua脚本、LRU收回、事务以及
不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
为了了解其如何使用,甚至了解其运作机制,今天开始研究。
1、下载redis tar包
在Redis 官网(http://redis.io/)下载tar包文件,位置如下图:
下载完成后,因为是源码,拷贝到/usr/local/src目录下。
2、建立安装目录
# mkdir /usr/local/redis
3、执行安装
# cd /usr/local/src
# tar xzf redis-2.6.14.tar.gz
# ln -s redis-2.6.14 redis #建立一个链接
# cd redis
# make PREFIX=/usr/local/redis install #PREFIX是指将程序安装到指定目录
安装完成后,在安装目录(这里是/usr/local/redis)下会生成一个bin目录,包括以下文件:
redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-sentinel
其中:
redis-server:Redis服务器的daemon启动程序。
redis-cli:Redis命令行操作工具。也可以用telnet利用其支持的纯文本协议来操作。
redis-benchmark:Redis性能测试工具,测试Redis在当前的系统及配置下的读写性能。
redis-dump:用于修复出问题的dump.rdb文件。
redis-check-aof:用于修复出问题的AOF文件。
redis-rentinel:Redis的集群管理。
4、启动redis(当前利用的是redis默认配置)
cd /usr/local/redis/bin
./redis-server
显示启动成功,用检查进程命令查看一下:
ps –ef |grep redis
5、简单实验
打开redis命令行,向redis作个简单的数据写和读实验,验证是否正常。
进入redis目录:cd /usr/local/redis/bin
执行./redis-cli,进入redis命令行工具:
由于是新安装,用keys命令查看,可以看到redis中没有任何数据:
用set命令写入一个K/V对:
用get命令读刚才写入的键值:
以上说明redis已经正常运行,可以提供服务了。
6、配置Redis为Linux服务
为了在每次系统启动时,redis均自动启动,可以将redis配置为linux系统服务,Redis提供了一个脚本,位置在上面“执行安装”步骤中,在/usr/local/src/redis下生成的utils目录下,名字为redis_init_script,其内容如下:
将其拷贝到/etc/init.d目录下:
cp /usr/local/src/redis/utils/redis_init_script/etc/init.d
由于在此脚本中没有加入chkconfig所需参数,因此需要在此脚本中加入以下内容:
#chkconfig redis 2345 70 60
其中2345指的是Linux运行级别,7060 指的是启动、关闭顺序,数值越小越优先启动和关闭。
在脚本中,定义了Redis守护进程启动程序redis-server、 命令行程序redis-cli的全路径,由于脚本中这两个路径与我们实际不同,需要修改为实际目录即:
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
另外脚本中指定了启动时的配置文件,路径为CONF="/etc/redis/${REDISPORT}.conf"
其中${REDISPORT}是获取REDIDPORT变量的值,在此文件中定义为6379,因此先需要在/etc目录下建立redis目录,在将redis自带的配置问拷贝到这里。
cd /etc/redis
cp /usr/local/src/redis/redis.conf6379.conf
在上述配置完成后,可以用命令service redis start 启动服务了。
但是在使用service redis stop 时会提示找不到pid文件,无法关闭服务的信息,是何原因呢?主要是以下两个因素:
(1)redis默认情况下不作为linux守护进程(daemon)执行,由于linux只有程序在以守护进程执行时才能生成pid文件。
(2)既使以守护进程方式运行,redis的默认pid名称为redis.pid,而非上面脚本中定义的redis_端口号.pid,所有在上面的脚本中执行stop时,也找不到pid文件。
解决方式为修改启动时所用的配置文件,即/etc/redis/6379.conf,具体如下:
即:将daemonize 后面的no 改成yes
将pidfile 后面的/var/run/redis.pid 改为redis_6379.pid
其实在上面的脚本中也指定了pid文件名称,但是不知为何没发生作用,待研究。