CentOS 7编译安装Redis

安装编译相关依赖

  • CentOS/Fedora yum install gcc gcc-c++ cmake tcl

下载Redis源码包

curl -o redis-4.0.10.tar.gz http://download.redis.io/releases/redis-4.0.10.tar.gz

解压Redis源码包

tar -xzvf redis-4.0.10.tar.gz

编译

具体过程:

1# 进入解压目录, 默认在当前目录 2cd redis-4.0.10 3 4# 执行make 5make 6 7# 安装, 指定目录 8make PREFIX=/usr/local/redis install

Redis配置

1# 将配置文件放在/usr/local/redis/etc/下面, 放在/etc/redis/下也可以 2mkdir /usr/local/redis/etc/ 3 4# 将解压目录中的redis.conf拷贝到/usr/local/redis/etc/下面 5cp redis.conf /usr/local/redis/etc/ 6 7# 进入redis的执行文件目录 8cd /usr/local/redis/bin/ 9 10# 将redis-benchmark, redis-cli, redis-server复制到/usr/bin 11cp redis-benchmark redis-cli redis-server /usr/bin/

调整内存分配使用方式, 并使其生效:

1# 此参数可用的值为0,1,2 2# 0.表示当用户空间请求更多的内存时,内核尝试估算出可用的内存 3# 1.表示内核允许超量使用内存直到内存用完为止 4# 2.表示整个内存地址空间不能超过swap+(vm.overcommit_ratio)%RAM5 6echo "vm.overcommit_memory=1" >> /etc/sysctl.conf 7sysctl -p

修改Redis配置和Redis加固

Redis配置

编辑配置文件vim /usr/local/redis/etc/redis.conf, 将其中的对应内容修改为:

1# redis以守护进程的方式运行, no表示不以守护进程的方式运行(会占用一个终端) 2daemonize yes 3 4# 密码 5requirepass password 6 7# 绑定ip 8# bind 127.0.0.1 9 10# 端口 11port 7480 12 13# 数据目录 14dir /data/redis 15 16# 客户端闲置多长时间后断开连接,默认为0关闭此功能 17timeout 300 18 19# 设置redis日志级别,默认级别:notice 20loglevel verbose 21 22# 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:"" 23# 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了 24logfile stdout

Redis加固

  • 绑定127.0.0.1 如果只是本地通信, 就确保监听在本地, 修改配置文件的bind 127.0.0.1

  • 设置防火墙 如果需要其他机器访问,或者设置了slave模式,那就记得加上相应的防火墙设置,命令如下: iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT

  • 认证 添加密码, 修改配置文件requirepass asdlkashdkj123123

  • 低权限账户 创建一个redis用户, 使用这个用户执行redis-server

    useradd -M -s /sbin/nologin redis setsid sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf'

Redis启动脚本

  • CentOS 6service服务

    cp /root/redis-4.0.10/utils/redis_init_script /etc/rc.d/init.d/redis

在文件的开头#!的下一行添加vim /etc/rc.d/init.d/redis:

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

如果添加了密码, 请添加-a password$CLIEXEC -a password -p $REDISPORT shutdown中.

再在stop;;后添加:

1restart) 2 $0 stop 3 $0 start 4 ;; 5status) 6 PID=$(cat $PIDFILE) 7 if [ ! -x /proc/${PID} ] 8 then 9 echo 'Redis is not running' 10 else 11 echo "Redis is running ($PID)" 12 fi 13 ;;

例如:

1#!/bin/sh 2# 3# chkconfig: 2345 90 10 4# description: Redis is a persistent key-value database 5# Simple Redis init.d script conceived to work on Linux systems 6# as it does use of the /proc filesystem. 7 8### BEGIN INIT INFO 9# Provides: redis_7480 10# Default-Start: 2 3 4 5 11# Default-Stop: 0 1 6 12# Short-Description: Redis data structure server 13# Description: Redis data structure server. See https://redis.io 14### END INIT INFO 15 16REDISPORT=7480 17EXEC=/usr/local/redis/bin/redis-server 18CLIEXEC=/usr/local/redis/bin/redis-cli 19 20PIDFILE=/var/run/redis_${REDISPORT}.pid 21CONF="/usr/local/redis/etc/redis.conf" 22 23case "$1" in 24 start) 25 if [ -f $PIDFILE ] 26 then 27 echo "$PIDFILE exists, Process is already running or crashed" 28 else 29 echo "Starting Redis server..." 30 $EXEC $CONF 31 printf "Redis \033[1;32;32mStarted...\033[0m\n" 32 fi 33 ;; 34 stop) 35 if [ ! -f $PIDFILE ] 36 then 37 echo "$PIDFILE does not exist, Process is not running" 38 else 39 PID=$(cat $PIDFILE) 40 echo "Stopping ..." 41 $CLIEXEC -a password -p $REDISPORT shutdown >> /dev/null 2>&1 42 while [ -x /proc/${PID} ] 43 do 44 echo "Waiting for Redis to shutdown ..." 45 sleep 1 46 done 47 printf "Redis \033[1;32;32mStopped...\033[0m\n" 48 fi 49 ;; 50 restart) 51 $0 stop 52 $0 start 53 ;; 54 status) 55 if [ ! -f $PIDFILE ] 56 then 57 echo "$PIDFILE does not exist, Process is not running" 58 exit 6379 59 fi 60 PID=$(cat $PIDFILE) 61 if [ ! -x /proc/${PID} ] 62 then 63 printf "Redis is \033[1;31;31mnot running\033[0m\n" 64 else 65 printf "Redis is \033[1;32;32mrunning\033[0m ($PID)\n" 66 fi 67 ;; 68 *) 69 echo "Please use start or stop as first argument" 70 ;; 71esac 72 73 74# 如果没报错的话,说明成功,可以用 75chkconfig --add redis 76 77# 启动redis服务器 78service redis start 79# 开机自启 80chkconfig redis on 81# 查看是否启动成功 82ps -ef | grep redis
  • CentOS 7systemd服务

/usr/lib/systemd/system目录下创建redis.service文件, 权限为root.root 755, 输入以下内容, 将ExecStart后面的执行路径修改为自己的路径:

1[Unit] 2Description=Redis persistent key-value database 3After=network.target 4 5[Service] 6ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --daemonize yes 7ExecStop=/usr/local/redis/bin/redis-cli -a password -p 6379 shutdown 8User=redis 9Group=redis 10RuntimeDirectory=redis 11RuntimeDirectoryMode=0755 12 13[Install] 14WantedBy=multi-user.target

然后创建/usr/libexec/redis-shutdown文件, 输入以下内容, 记得将REDIS_CLICONFIG_FILE修改为自己的路径:

1#!/bin/bash 2# 3# Wrapper to close properly redis and sentinel 4test x"$REDIS_DEBUG" != x && set -x 5 6REDIS_CLI=/usr/local/redis/bin/redis-cli 7 8# Retrieve service name 9SERVICE_NAME="$1" 10if [ -z "$SERVICE_NAME" ]; then 11 SERVICE_NAME=redis 12fi 13 14# Get the proper config file based on service name 15CONFIG_FILE="/usr/local/redis/etc/$SERVICE_NAME.conf" 16 17# Use awk to retrieve host, port from config file 18HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1` 19PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1` 20PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1` 21SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1` 22 23# Just in case, use default host, port 24HOST=${HOST:-127.0.0.1} 25if [ "$SERVICE_NAME" = redis ]; then 26 PORT=${PORT:-6379} 27else 28 PORT=${PORT:-26739} 29fi 30 31# Setup additional parameters 32# e.g password-protected redis instances 33[ -z "$PASS" ] || ADDITIONAL_PARAMS="-a $PASS" 34 35# shutdown the service properly 36if [ -e "$SOCK" ] ; then 37 $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown 38else 39 $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown 40fi

修改/usr/libexec/redis-shutdown权限, chmod 755 /usr/libexec/redis-shutdown

重新载入systemd, 扫描新的或有变动的service, systemctl daemon-reload

开机自启, systemctl enable redis

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )