• centos7 源码安装redis


    安装3.x

    [root@node1 ~]# yum install wget gcc-c++ make
    [root@node1 ~]# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
    [root@node1 ~]# tar -zxvf redis-3.2.8.tar.gz 
    [root@node1 ~]# mv redis-3.2.8 /usr/local/redis
    [root@node1 ~]# cd /usr/local/redis/
    [root@node1 redis]# make
    [root@node1 redis]# make install

    出错截图:

     安装4.0.x 

    [root@node4 redis]# yum install wget gcc-c++ make
    [root@node4 ~]# wget http://download.redis.io/releases/redis-4.0.0.tar.gz
    [root@node4 ~]# tar zxvf redis-4.0.0.tar.gz 
    [root@node4 ~]# mv redis-4.0.0 /usr/local/redis
    [root@node4 ~]# cd /usr/local/redis/
    [root@node4 redis]# yum install epel-release
    [root@node4 redis]# yum install jemalloc-devel
    [root@node4 redis]# ls deps/
    hiredis  jemalloc  linenoise  lua  Makefile  README.md  update-jemalloc.sh
    [root@node4 redis]# cd deps/
    [root@node4 deps]# make hiredis lua jemalloc linenoise
    [root@node4 deps]# cd ..
    [root@node4 redis]# make
    [root@node4 redis]# make install

     出错截图:

     

     

    服务器启动

    redis-server

    客户端启动

    # redis-cli
    127.0.0.1:6379> ping
    PONG

    开机启动

    在源码包的utils目录下存在 install_server.sh 脚本,执行即可

    假设安装目录为: /usr/local/redis/

    [root@node1 ~]# cd /usr/local/redis/utils/
    # 安装开机启动服务
    [root@node1 utils]# ./install_server.sh 
    # 查看状态
    [root@node1 utils]# systemctl status redis_6379
    [root@node1 utils]# systemctl start redis_6379
    # 查看是否开机自启动
    [root@node1 utils]# systemctl is-enabled redis_6379

    个人觉得redis_6379看着不舒服,于是对原配置文件稍作修改。

    除了端口号后 安装效果如下:

    [root@node4 utils]# ./install_server.sh
    Welcome to the redis service installer
    This script will help you easily set up a running redis server
    
    Please select the redis port for this instance: [6379] 
    Selecting default: 6379
    Please select the redis config file name [/etc/redis/redis.conf] 
    Selected default - /etc/redis/redis.conf
    Please select the redis log file name [/var/log/redis.log] 
    Selected default - /var/log/redis.log
    Please select the data directory for this instance [/var/lib/redis/] 
    Selected default - /var/lib/redis/
    Please select the redis executable path [/usr/local/bin/redis-server] 
    Selected config:
    Port           : 6379
    Config file    : /etc/redis/redis.conf
    Log file       : /var/log/redis.log
    Data dir       : /var/lib/redis/
    Executable     : /usr/local/bin/redis-server
    Cli Executable : /usr/local/bin/redis-cli
    Is this ok? Then press ENTER to go on or Ctrl-C to abort.
    Copied /tmp/6379.conf => /etc/init.d/redis
    Installing service...
    Successfully added to chkconfig!
    Successfully added to runlevels 345!
    Starting Redis server...
    Installation successful!
    View Code

    修改后的配置文件如下:

    #!/bin/sh
    
    # Copyright 2011 Dvir Volk <dvirsk at gmail dot com>. All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions are met:
    #
    #   1. Redistributions of source code must retain the above copyright notice,
    #   this list of conditions and the following disclaimer.
    #
    #   2. Redistributions in binary form must reproduce the above copyright
    #   notice, this list of conditions and the following disclaimer in the
    #   documentation and/or other materials provided with the distribution.
    #
    # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
    # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
    # EVENT SHALL Dvir Volk OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
    # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    #
    ################################################################################
    #
    # Service installer for redis server, runs interactively by default.
    #
    # To run this script non-interactively (for automation/provisioning purposes),
    # feed the variables into the script. Any missing variables will be prompted!
    # Tip: Environment variables also support command substitution (see REDIS_EXECUTABLE)
    #
    # Example:
    #
    # sudo REDIS_PORT=1234 
    #          REDIS_CONFIG_FILE=/etc/redis/1234.conf 
    #          REDIS_LOG_FILE=/var/log/redis_1234.log 
    #          REDIS_DATA_DIR=/var/lib/redis/1234 
    #          REDIS_EXECUTABLE=`command -v redis-server` ./utils/install_server.sh
    #
    # This generates a redis config file and an /etc/init.d script, and installs them.
    #
    # /! This script should be run as root
    #
    ################################################################################
    
    die () {
        echo "ERROR: $1. Aborting!"
        exit 1
    }
    
    
    #Absolute path to this script
    SCRIPT=$(readlink -f $0)
    #Absolute path this script is in
    SCRIPTPATH=$(dirname $SCRIPT)
    
    #Initial defaults
    _REDIS_PORT=6379
    _MANUAL_EXECUTION=false
    
    echo "Welcome to the redis service installer"
    echo "This script will help you easily set up a running redis server"
    echo
    
    #check for root user
    if [ "$(id -u)" -ne 0 ] ; then
        echo "You must run this script as root. Sorry!"
        exit 1
    fi
    
    if ! echo $REDIS_PORT | egrep -q '^[0-9]+$' ; then
        _MANUAL_EXECUTION=true
        #Read the redis port
        read  -p "Please select the redis port for this instance: [$_REDIS_PORT] " REDIS_PORT
        if ! echo $REDIS_PORT | egrep -q '^[0-9]+$' ; then
            echo "Selecting default: $_REDIS_PORT"
            REDIS_PORT=$_REDIS_PORT
        fi
    fi
    
    if [ -z "$REDIS_CONFIG_FILE" ] ; then
        _MANUAL_EXECUTION=true
        #read the redis config file
        _REDIS_CONFIG_FILE="/etc/redis/redis.conf"
        read -p "Please select the redis config file name [$_REDIS_CONFIG_FILE] " REDIS_CONFIG_FILE
        if [ -z "$REDIS_CONFIG_FILE" ] ; then
            REDIS_CONFIG_FILE=$_REDIS_CONFIG_FILE
            echo "Selected default - $REDIS_CONFIG_FILE"
        fi
    fi
    
    if [ -z "$REDIS_LOG_FILE" ] ; then
        _MANUAL_EXECUTION=true
        #read the redis log file path
        _REDIS_LOG_FILE="/var/log/redis.log"
        read -p "Please select the redis log file name [$_REDIS_LOG_FILE] " REDIS_LOG_FILE
        if [ -z "$REDIS_LOG_FILE" ] ; then
            REDIS_LOG_FILE=$_REDIS_LOG_FILE
            echo "Selected default - $REDIS_LOG_FILE"
        fi
    fi
    
    if [ -z "$REDIS_DATA_DIR" ] ; then
        _MANUAL_EXECUTION=true
        #get the redis data directory
        _REDIS_DATA_DIR="/var/lib/redis/"
        read -p "Please select the data directory for this instance [$_REDIS_DATA_DIR] " REDIS_DATA_DIR
        if [ -z "$REDIS_DATA_DIR" ] ; then
            REDIS_DATA_DIR=$_REDIS_DATA_DIR
            echo "Selected default - $REDIS_DATA_DIR"
        fi
    fi
    
    if [ ! -x "$REDIS_EXECUTABLE" ] ; then
        _MANUAL_EXECUTION=true
        #get the redis executable path
        _REDIS_EXECUTABLE=`command -v redis-server`
        read -p "Please select the redis executable path [$_REDIS_EXECUTABLE] " REDIS_EXECUTABLE
        if [ ! -x "$REDIS_EXECUTABLE" ] ; then
            REDIS_EXECUTABLE=$_REDIS_EXECUTABLE
    
            if [ ! -x "$REDIS_EXECUTABLE" ] ; then
                echo "Mmmmm...  it seems like you don't have a redis executable. Did you run make install yet?"
                exit 1
            fi
        fi
    fi
    
    #check the default for redis cli
    CLI_EXEC=`command -v redis-cli`
    if [ -z "$CLI_EXEC" ] ; then
        CLI_EXEC=`dirname $REDIS_EXECUTABLE`"/redis-cli"
    fi
    
    echo "Selected config:"
    
    echo "Port           : $REDIS_PORT"
    echo "Config file    : $REDIS_CONFIG_FILE"
    echo "Log file       : $REDIS_LOG_FILE"
    echo "Data dir       : $REDIS_DATA_DIR"
    echo "Executable     : $REDIS_EXECUTABLE"
    echo "Cli Executable : $CLI_EXEC"
    
    if $_MANUAL_EXECUTION == true ; then
        read -p "Is this ok? Then press ENTER to go on or Ctrl-C to abort." _UNUSED_
    fi
    
    mkdir -p `dirname "$REDIS_CONFIG_FILE"` || die "Could not create redis config directory"
    mkdir -p `dirname "$REDIS_LOG_FILE"` || die "Could not create redis log dir"
    mkdir -p "$REDIS_DATA_DIR" || die "Could not create redis data directory"
    
    #render the templates
    TMP_FILE="/tmp/${REDIS_PORT}.conf"
    DEFAULT_CONFIG="${SCRIPTPATH}/../redis.conf"
    INIT_TPL_FILE="${SCRIPTPATH}/redis_init_script.tpl"
    INIT_SCRIPT_DEST="/etc/init.d/redis"
    PIDFILE="/var/run/redis.pid"
    
    if [ ! -f "$DEFAULT_CONFIG" ]; then
        echo "Mmmmm... the default config is missing. Did you switch to the utils directory?"
        exit 1
    fi
    
    #Generate config file from the default config file as template
    #changing only the stuff we're controlling from this script
    echo "## Generated by install_server.sh ##" > $TMP_FILE
    
    read -r SED_EXPR <<-EOF
    s#^port .+#port ${REDIS_PORT}#; 
    s#^logfile .+#logfile ${REDIS_LOG_FILE}#; 
    s#^dir .+#dir ${REDIS_DATA_DIR}#; 
    s#^pidfile .+#pidfile ${PIDFILE}#; 
    s#^daemonize no#daemonize yes#;
    EOF
    sed "$SED_EXPR" $DEFAULT_CONFIG >> $TMP_FILE
    
    #cat $TPL_FILE | while read line; do eval "echo "$line"" >> $TMP_FILE; done
    cp $TMP_FILE $REDIS_CONFIG_FILE || die "Could not write redis config file $REDIS_CONFIG_FILE"
    
    #Generate sample script from template file
    rm -f $TMP_FILE
    
    #we hard code the configs here to avoid issues with templates containing env vars
    #kinda lame but works!
    REDIS_INIT_HEADER=
    "#!/bin/sh
    
    #Configurations injected by install_server below....
    
    
    EXEC=$REDIS_EXECUTABLE
    
    CLIEXEC=$CLI_EXEC
    
    PIDFILE="$PIDFILE"
    
    CONF="$REDIS_CONFIG_FILE"
    
    
    REDISPORT="$REDIS_PORT"
    
    
    ###############
    
    "
    
    REDIS_CHKCONFIG_INFO=
    "# REDHAT chkconfig header
    
    
    # chkconfig: - 58 74
    
    # description: redis is the redis daemon.
    
    ### BEGIN INIT INFO
    
    # Provides: redis_6379
    
    # Required-Start: $network $local_fs $remote_fs
    
    # Required-Stop: $network $local_fs $remote_fs
    
    # Default-Start: 2 3 4 5
    
    # Default-Stop: 0 1 6
    
    # Should-Start: $syslog $named
    
    # Should-Stop: $syslog $named
    
    # Short-Description: start and stop redis
    
    # Description: Redis daemon
    
    ### END INIT INFO
    
    "
    
    if command -v chkconfig >/dev/null; then
        #if we're a box with chkconfig on it we want to include info for chkconfig
        echo "$REDIS_INIT_HEADER" "$REDIS_CHKCONFIG_INFO" > $TMP_FILE && cat $INIT_TPL_FILE >> $TMP_FILE || die "Could not write init script to $TMP_FILE"
    else
        #combine the header and the template (which is actually a static footer)
        echo "$REDIS_INIT_HEADER" > $TMP_FILE && cat $INIT_TPL_FILE >> $TMP_FILE || die "Could not write init script to $TMP_FILE"
    fi
    
    ###
    # Generate sample script from template file
    # - No need to check which system we are on. The init info are comments and
    #   do not interfere with update_rc.d systems. Additionally:
    #     Ubuntu/debian by default does not come with chkconfig, but does issue a
    #     warning if init info is not available.
    
    cat > ${TMP_FILE} <<EOT
    #!/bin/sh
    #Configurations injected by install_server below....
    
    EXEC=$REDIS_EXECUTABLE
    CLIEXEC=$CLI_EXEC
    PIDFILE=$PIDFILE
    CONF="$REDIS_CONFIG_FILE"
    REDISPORT="$REDIS_PORT"
    ###############
    # SysV Init Information
    # chkconfig: - 58 74
    # description: redis is the redis daemon.
    ### BEGIN INIT INFO
    # Provides: redis
    # Required-Start: $network $local_fs $remote_fs
    # Required-Stop: $network $local_fs $remote_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Should-Start: $syslog $named
    # Should-Stop: $syslog $named
    # Short-Description: start and stop redis
    # Description: Redis daemon
    ### END INIT INFO
    
    EOT
    cat ${INIT_TPL_FILE} >> ${TMP_FILE}
    
    #copy to /etc/init.d
    cp $TMP_FILE $INIT_SCRIPT_DEST && 
        chmod +x $INIT_SCRIPT_DEST || die "Could not copy redis init script to  $INIT_SCRIPT_DEST"
    echo "Copied $TMP_FILE => $INIT_SCRIPT_DEST"
    
    #Install the service
    echo "Installing service..."
    if command -v chkconfig >/dev/null 2>&1; then
        # we're chkconfig, so lets add to chkconfig and put in runlevel 345
        chkconfig --add redis && echo "Successfully added to chkconfig!"
        chkconfig --level 345 redis on && echo "Successfully added to runlevels 345!"
    elif command -v update-rc.d >/dev/null 2>&1; then
        #if we're not a chkconfig box assume we're able to use update-rc.d
        update-rc.d redis defaults && echo "Success!"
    else
        echo "No supported init tool found."
    fi
    
    /etc/init.d/redis start || die "Failed starting service..."
    
    #tada
    echo "Installation successful!"
    exit 0
    install_server.sh

    参考:

    https://redis.io/topics/quickstart

  • 相关阅读:
    Nginx 缓存解决方案
    Chrome去水印、自由复制的解决方法
    简单介绍正向代理和反向代理
    Lambda表达式
    项目集成hystrix-dashboard
    hystrix 添加turbine
    GsonUtil 工具类
    idea 去除import * 变成具体引入文件
    eureka 创建服务消费者
    eureka 创建注册服务提供方
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/9646675.html
Copyright © 2020-2023  润新知