您的位置:首页 > 数据库 > Redis

Redis系列 - Redis安装 并 配置到Linux系统服务

2017-05-16 16:18 405 查看

一、Redis简介

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。( From - 维基百科)

Redis和Memcached类似,但很大程度改进了Memcached的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。

Redis数据都是缓存在计算机内存中,并且会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

可以用做数据库、缓存和消息中间件。现在Twitter、GitHub和Weibo等知名公司都在使用Redis。

主要特点:

Redis数据库完全在内存中,使用磁盘仅用于持久性:

Redis通常将全部的数据存储在内存中。2.4版本后可配置为使用虚拟内存,一部分数据集存储在硬盘上,但这个特性废弃了。

目前通过两种方式实现持久化:

a. 使用快照,一种半持久耐用模式。不时的将数据集以异步方式从内存以RDB格式写入硬盘;

b. 1.1版本开始使用更安全的AOF格式替代,一种只能追加的日志类型。将数据集的修改操作记录,能够在后台对只可追加的记录作修改来避免无限增长的日志。

key-value键值对存储,并拥有一套较为丰富的数据模型:

Redis和MySQL等数据库一样,都是原子性的操作,支持事务。

它的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型不仅限于字符串,还支持如下抽象数据类型:

字符串列表

无序不重复的字符串集合

有序不重复的字符串集合

键、值都为字符串的哈希表

如:5种常见的数据类型:字符串(String)、散列/哈希(Hash)、列表(List)、集合(Set)、有序集合(Sort Set)。

Redis支持主从同步,可以将数据复制到任意数量的从服务器:

Redis支持主从同步,数据可以从主服务器上向任意的从服务器上同步,而从服务器又可以是关联其他从服务器的主服务器。

Redis的主从同步机制可以确保redis的master(主)和slave(辅)之间的数据同步。

由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

优势:

高性能,快速处理:

Redis的处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

当数据依赖不再需要Redis这种基于内存的性质时,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。写与读操作速度没有明显差别。

支持丰富的数据类型:

可参考特点中的第2点

原子性操作:

保证了两个客户端同时访问的Redis服务器将获得更新后的值,避免脏读。

多功能的实用工具:

可以应用在缓存、消息队列、数据库等模块,还可以构建高性能的、可拓展的Web应用程序的解决方案。

二、安装及测试

说明: 安装Redis最新稳定版本 redis-3.2.8

下载 - 解压 - 编译 :

下载安装到 **/usr** 目录下(将下载文件保存在 /usr/redis-download 文件夹下,将需安装的Redis文件放在 /usr/redis 文件下)

第一步:下载:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz[/code] 

第二步:解压:

tar xzf redis-3.2.8.tar.gz


tar -xzf的意思是解压并解包一个文件,这个文件应该是经tar打包后按gzip格式压缩的。

对于tar命令,x表示解包(不是解压缩),v表示显示详细过程,f表示使用文件(紧跟它的一定是空格加文件名),z表示先解压gzip格式的压缩文件(现在这个选项已经不是必须的了)。

第三步:编译:

#将redis-3.2.8 更名为 redis
mv redis-3.2.8 redis
#进入redis安装目录
cd redis
#编译
make


服务启动 - 测试 :

二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

第一步:启动服务:

# 进入redis的src目录下执行下面命令,后台启动redis服务
./redis-server &


第二步:测试:

./redis-cli
#下面为测试: 定义一个test字符串,赋值为"redis",之后获取输出
[root@aitest05 src]# ./redis-cli
127.0.0.1:6379> set test redis
OK
127.0.0.1:6379> get test
"redis"


上面说明Redis已经安装成功,也可以查看下运行状态:

ps -ef | grep redis


三、配置到系统服务及测试

在我们需要启动redis服务时,每次都要进入到安装目录,操作繁琐,可以将redis做成一个服务,我们直接启动。

配置步骤:

第一步:将redis安装包下的utils/redis_init_script文件复制到/etc/init.d下,同时改名为redis:

cp redis_init_script /etc/init.d/redis


第二步:对新复制的redis文件进行编辑:

在 #!/bin/sh 下一行 添加”# chkconfig: 2345 80 90”;

在 EXECCONF 后边加一个 & ,表示让redis作为后台服务启动,否则该服务会独占输入屏;

检查对应目录(/usr/local/bin/)下是否存在 redis-server 和 redis-cli 文件,如果没有则将Redis安装目录下的对应文件复制过去;

检查 CONF=”/etc/redis/${REDISPORT}.conf” 。 将redis安装目录下的配置文件拷贝到/etc/redis/下,如文件没有就新建。

mkdir redis

#6379 Redis默认端口

cp redis.conf /etc/redis/6379.conf


**编辑后的完整的redis文件:**

#!/bin/sh
#
# chkconfig: 2345 80 90
# 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服务注册:

将/etc/rc.d/init.d/redis脚本添加到服务:

#chkconfig --add redis-server
#设置为开机自启动服务器
chkconfig redis on
#查看redis的系统自动启动选项配置
chkconfig --list redis


第四步:Redis服务启动测试:

service redis start


第五步:Redis服务关闭:

service redis stop


注意问题:

**问题一:** 我第一次执行 “service redis stop” 关闭Redis服务时,报如下问题

[root@aidev05 init.d]# service redis stop
/var/run/redis_6379.pid does not exist, process is not running


说明在run下没有这个文件,我们进入到/var/run下发现没有redis相关的 *.pid 文件。
解决这个问题,可以修改Redis的配置文件redis.cof:

将daemonize 守护线程属性改为yes

pidfile的路径改为 pidfile /var/run/redis.pid

#daemonize no  默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes
daemonize yes
#当 redis 在后台运行的时候,Redis 默认会把 pid 文件放在 /var/run/redis.pid ,可以配置到其他地址。
#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口
pidfile /var/run/redis.pid
指定 redis 运行的端口,默认是 6379
port 6379


将/etc/init.d文件下的redis中的 PIDFILE 的值改为和上面 redis配置文件的一致:

PIDFILE=/var/run/redis.pid


这样再去测试用 service redis start/stop就可以正确使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息