一、概述

1.1原理

redis自启动的工作原理是怎么样的呢?Linux系统启动后,会有一个程序去特定目录下面扫描文件,然后执行这些文件,这些文件可称之为脚本。所以,你可以把你的工作写成一个脚本,放到指定路径下(etc/init.d)。所以,你要做的,就是把执行启动redis实例的工作编写成脚本,让Linux系统去给你执行即可。

1.2简述

配置自启动,大概需要三个步骤

1. 编辑实例对应的配置文件,同一台机器上,可以有启动多个redis实例,所以对应着多个配置文件。同时每个实例有自己的工作路径,如果共用工作路径,那么配置文件很多项目项要配置成不同,以免冲突,所以建议方法可以设置不同的工作路径。

2.编辑一个自启动脚本,然后把脚本复制到etc/init.d目录下。因为Linux系统启动后,会有一个程序自动去扫描这个路径下的文件,然后执行它们。

3.执行命令生效、测试。

二、编辑redis配置文件

2.1配置文件命名

在redis目录下有一个redis.conf文件,复制一份,建议按端口名命名,如6379.conf,规则是,首先,需要与第三章中的脚本里面的配置一致,其次,不同实例对应不同的配置文件,不能搞混了,然后用vi对文件进行编辑。

2.2编辑配置文件

以下把需要注意的项加以说明

首先把redis配置成值守进程,这样redis运行后将在后台运行,如下:
daemonize yes

当以值守进程模式运行的时候,redis sever把自己的pid写入到缺省文件“/var/run/redis.pid”下,这里,你需要自定义文件名,几个redis实例,不能弄成一样,Linux系统是通过这个文件来判断一个进程是否运行与关闭,如下:
pidfile /var/run/redis_6379.pid
 
Redis实例用于接收客户端连接的TCP监听端口默认是6379,如果配置成0,将不会开启TCP监听服务。在此可自定义端口,此端口与后续的脚本配置的相关项需要一致。
port 6379
 
Redis server缺省情况下是接收所有本服务器所有网卡的请求,但是也可以通过指定IP来绑定网卡,可以绑定多个,用空格隔开,如下:
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1
 
存放快照文件的文件名,默认是dump.rdb,可以自定义文件名,扩展名你就别动它了。如果你需要启动多个redis实例,同时多个实例又共用同一个工作路径,那么此文件名必须不一样。
dbfilename dump.rdb

以上(第4节)只是设置的文件名,而非路径,通过命令dir可以指定路径,文件将按指定路径与指定的文件名存储。同时AOF(Append Only File)也是参照此路径的。多实例可以共用此路径,如果共用工作路径,那其他配置需要配置成不同,以防冲突,所以建议设置成不同工作路径,这样就避免了这些问题。

dir ./
指定输入日志信息的文件,如果为空,将从标准输出窗口输出,同时又设置了守护进程模式的话,将会把日志记录到/dev/null。它只是文件名,不包含路径。
logfile ""

三、处理脚本

3.1复制脚本

redis/utils目录下有一个redis_init_script文件,把它复制一份到etc/init.d路径下,建议把文件名改成与redis实例端口相关,如6379端口的这个脚本名,在etc/init.d路径下改成6379redisd。

3.2编辑脚本

对2.1节复制到/etc/init.d路径下的脚本进行编辑,如下:

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database

REDISIP=localhost
REDISPORT=31001
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 -h $REDISIP -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

下面对以上脚本进行说明

REDISPORT=6379

这应该只是定义的一个变量,现在装用到它,建议redis实例用什么端口,这个地方就配置什么端口,如果一个服务器多实例的话,这必须配置成不一样。

EXEC=/usr/local/bin/redis-server

你的redis-server的路径,如果你redis源码编译后执行过make install并成功后,redis-server在/usr/local/bin/路径下将会有redis-server的链接,或者,以后配置需要直接配置成你redis-server所在的真实的路径。

CLIEXEC=/usr/local/bin/redis-cli

redis-cli所在的路径,由redis-server一样,如果你redis源码编译后执行过make install并成功后,redis-cli在/usr/local/bin/路径下将会有redis-cli的链接,或者,以后配置需要直接配置成你redis-cli所在的真实的路径。这样,在linux下可直接敲redis-cli命令,而不用指定路径了,可以把它当成平常的命令来执行。

PIDFILE=/var/run/redis_${REDISPORT}.pid

这个是pid文件路径,当redis实例设置成值守模式(daemonize)后,启动后会生成一个pid文件,在哪里生成,文件名是什么,需要在redis的config文件里配置。所以当你一个服务器中有多个redis实例时,这个文件名需要不一样,不然会带来麻烦。所以此配置项要与redis的配置文件里面配置项一致,关于redis配置文件里面的相关想,参见后续章节。

 

CONF="/usr/local/src/redis/${REDISPORT}.conf"

指定redis实例的配置文件的路径,同服务器不同的redis实例需要不同的配置文件,这个需要注意,不能弄成一样的,不然启动会有成功的。

脚本的后续部分,可以不用管它,不需要修改。

添加项:

# chkconfig:   2345 90 10

# description:  Redis is a persistent key-value database

在脚本的开头第四行,即“# as it does use of the /proc filesystem.”的一行插入以上两段代码,不然,后面执行命令的时候,会提示权限问题。

四、启动生效

#设置为开机自启动服务器(redisd为/etc/init.d/目录下刚才自己建立的脚本名称,下同)

chkconfig redisd on

#打开服务,用于测试服务是否有效

service redisd start

#关闭服务

service redisd stop

#重启系统,测试是否生效

reboot

系统重启后,检查redis实例是否如预期启动

redis-cli –h 你设置的IP –p 你设置的端口

redis自启动配置详解的更多相关文章

  1. redis.conf 配置详解

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb = ...

  2. redis.conf 配置详解 (转)

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)## 1k => 1000 bytes# 1kb => ...

  3. Redis错误配置详解

    在使用Redis做缓存时,应用往往能得到非常高的性能.然而,如果配置不当,你将遇到很多令人头疼的问题,比如复制缓冲区限制.复制超时等. Redis提供了许多提高和维护高效内存数据库使用的工具.在无需额 ...

  4. redis的配置详解

    redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice" Redis 的配置 ...

  5. redis.conf配置详解(转)

    # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb =&g ...

  6. 【Redis学习之二】Redis:redis.conf 配置详解

    参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程  daemonize no2. 当Redis以守护进程方式运行 ...

  7. redis.conf 配置 详解 中文 2.8

        # redis version 2.8.19   # 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1m ...

  8. redis.conf配置详解

    http://www.2cto.com/database/201307/225113.html

  9. redis配置详解

    ##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...

随机推荐

  1. [bzoj2301]Problem b莫比乌斯反演+分块优化

    题意: $\sum\limits_{\begin{array}{*{20}{c}}{a < = x < = b}\\{c < = y < = d}\end{array}} {\ ...

  2. 自己在项目中写的一个Jquery插件和Jquery tab 功能

    后台查询结果 PDFSearchResult实体类: [DataContract(Name = "PDFSearchResult")] public class PDFSearch ...

  3. CentOS6下用yum升级系统内核版本至最新

    首先当你决定升级内核时,要想清楚为什么升级内核,因为升级内核会带来很多麻烦.所以这种事情能避免就避免 导入 Public Key rpm --import https://www.elrepo.org ...

  4. int **指针问题

    转自:http://blog.csdn.net/u012501459/article/details/45395571 在打印二维数组时遇到了问题,二维数组可以这样定义int matrix[ROWS] ...

  5. How to use unity CreateExternalTexture on Android?

    http://stackoverflow.com/questions/33324753/how-to-use-unity-createexternaltexture-on-android Can so ...

  6. hdu2795(线段树单点更新&区间最值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要 ...

  7. django 模版 语法与使用

    目录 django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...

  8. 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将  num1[0], num2[0 ...

  9. OSU!

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ ,f= ...

  10. BZOJ 1433 && Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法

    刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会) 把人看做左部点,床看作右部点 建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校) 1.在校的 不走的人 自己 ...