如何在linux平台上安装redis(附自动安装脚本)

1.Redis的简单介绍

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这被称为“半持久化模式”);也可以把每一次数据变化都写到一个append onlyfile(aof)里面(“这称为全持久化模式”)。

 

 

 

 

 

 

2.Redis的生产经验教训

1.要进行Master-slave主从同步配置,在出现服务故障时候切换。

2.在master禁用数据持久化,只需在slave上配置数据持久化。

3.物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉,这个情况是灾难!

4.当Redis物理内存使用超过内存总容量的3/5时就会出现比较危险了,就开始用swap内存了。

5.档达到最大内存时候,会清空带有过期时间的key,即使key未到过期时间。

6.redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题。

2.Redis部署环境搭建

①安装redis编译所需的相关依赖包

Ubuntu 和 Debain系列操作系统

apt-get  -y install gcc make  tcl

Redhat和CentOS 系列操作系统

yum -yinstall gcc  make  automake  tcl

②下载redis源码安装包

sudo su-        #统一切换到root家目录

mkdir -p/home/tools #统一把下载的redis安装包放到/home/tools目录

wgethttp://download.redis.io/redis-stable.tar.gz

③解压安装redis安装包

tar zxvf  /home/tools/redis-stable.tar.gz

cdredis-stable/

make&& make  PREFIX=/usr/local/redis  install

#可以将相关命令文件安装到指定的path路径下,比如/usr/local/redis

redis-benchmark#性能测试工具,测试Redis在您的系统及您的配置下的读写性

redis-check-aof#更新日志检查

redis-check-dump#用于本地数据库检查

redis-cli#命令行操作工具

redis-server#Redis服务器的daemon启动程序

④ 配置redis相关目录以及文件

mkdir -p/usr/local/redis/{etc,run,data,log}

mkdir -p /usr/local/redis/data/6379

cd/home/tools/redis-stable

\cp/home/tools/redis-stable/redis.conf /usr/local/redis/etc/redis.conf

\cp/usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis_6379.conf

sed -i‘37s/daemonize no/daemonize yes/‘ /usr/local/redis/etc/redis_6379.conf

sed -i‘41s#/var/run/redis.pid#/usr/local/redis/run/redis_6379.pid#‘/usr/local/redis/etc/redis_6379.conf

sed -i‘187s#dir ./#dir /usr/local/redis/data/6379#‘/usr/local/redis/etc/redis_6379.conf

sed -i‘103s#logfile ""#logfile /usr/local/redis/log/redis_6379.log#‘/usr/local/redis/etc/redis_6379.conf

⑤ 添加redis内存优化参数

echo"vm.overcommit_memory = 1" >> /etc/sysctl.conf

# /proc/sys/vm/overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2 表示内核允许分配超过所有物理内存和交换空间总和的内存。
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。
所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。

sysctl -p #立刻生效

⑥ 自定义配置redis启动关闭脚本

vim/etc/init.d/redis

添加如下脚本

################################################################################

#!/bin/sh

PATH="/usr/local/redis/bin:$PATH"

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

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

PIDFILE="/usr/local/redis/run/redis_6379.pid"

CONF="/usr/local/redis/etc/redis_6379.conf"

REDISPORT="6379"

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"Usage: $0 {start|stop}" >&2

exit 1

;;

esac

###########################################################################

⑦赋与权限,启动redis服务,加载数据,测试redis

chmod +x/etc/init.d/redis && /etc/init.d/redis start   #启动redis

/usr/local/redis/bin/redis-cli   # 进入redis命令行

ln -s/usr/local/redis/bin/* /usr/bin  # 添加软连接

加载数据

查看所有key

5. Redis的安全

警告:因为redis速度相当快,所以在一台比较好的服务器之下,一个外部的用户可以在一秒钟进行上万次的密码尝试,这意味着你需要制定非常强大的密码来防止暴力破解。

1)编辑配置文件/usr/local/redis/etc/redis_6379.conf

找到”requirepass”这一行,默认是注释掉的,去掉注释,自定义相关密码。

2)修改之后,记得重启redis服务,然后再次连接redis,发现没有密码的话,无法进行任何操作

3)使用密码以非交互式的方式连接,发现又可以进行查询和修改了

 

 

 

 

 

 

 

 

6.数据的保存和备份

因为Redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘,可以执行如下命令:

 

 

 

 

 

7.Redis相关配置参数详解

daemonizeyes #是否作为守护进程运行

pidfile /usr/local/redis/run/redis_6379.pid#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid

port 6379#默认监听端口

#bind127.0.0.1 #绑定主机IP,默认值为不绑定,即0.0.0.0

timeout 0#客户端闲置多少秒后,断开连接,默认为0,即不断开

loglevelverbose #日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning

logfile/opt/redis/log/redis_6379.log #指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志

databases16 #可用数据库数,默认值为16,默认数据库为0

################################SNAPSHOTTING #################################

save 900 1#保存数据到disk的策略,当有一条Keys数据被改变是,900秒刷新到disk一次

save 30010 #当有10条Keys数据被改变时,300秒刷新到disk一次

save 6010000 #当有1w条keys数据被改变时,60秒刷新到disk一次

rdbcompressionyes #当dump .rdb数据库的时候是否压缩数据对象

dbfilenamedump.rdb #本地数据库文件名,默认值为dump.rdb

dir/opt/redis/data/6379 #本地数据库存放路径

#################################REPLICATION #################################

# slaveof<masterip> <masterport> #当本机为从服务时,设置主服务的IP及端口

#masterauth <master-password> #当本机为从服务时,设置主服务的连接密码

#requirepass foobared #连接密码

slave-serve-stale-datayes

slave-priority100

###################################LIMITS ####################################

#maxclients 128 #最大客户端连接数,默认不限制

#maxmemory <bytes> #最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍到达最大内存设置,将无法再进行写入操作

##############################APPEND ONLY MODE ###############################

appendonlyno #是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no

#appendfilename appendonly.aof #更新日志文件名,默认值为appendonly.aof

#appendfsync always #更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)

appendfsynceverysec

#appendfsync no

no-appendfsync-on-rewriteno

auto-aof-rewrite-percentage100

auto-aof-rewrite-min-size64mb

##################################SLOW LOG ###################################

slowlog-log-slower-than10000

slowlog-max-len128

################################VIRTUAL MEMORY ###############################

vm-enabledno #是否开启VM功能,默认值为no

vm-swap-file/tmp/redis.swap #虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-max-memory0 #将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

vm-page-size32

vm-pages134217728

vm-max-threads4

###############################ADVANCED CONFIG ###############################

hash-max-zipmap-entries64

hash-max-zipmap-value512

list-max-ziplist-entries512

list-max-ziplist-value64

set-max-intset-entries512

zset-max-ziplist-entries128

zset-max-ziplist-value64

activerehashingyes #是否重置Hash表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8.Redis自动化安装脚本

以上的操作步骤完全可以用下面这个自动化安装脚本代替。

可以直接运行此脚本来实现自动安装redis,兼融centosubuntu系列。

##############################################

#!/bin/bash
#version choose
OS=`sed -n ‘1p‘ /etc/issue|awk ‘{print $1}‘`
if [ $OS = "Ubuntu" ];then
apt-get  -y install gcc make  tcl
else
yum -y install gcc  make  automake  tcl
fi

#Install redis
if [ ! -d /home/tools/ ];then
mkdir -p /home/tools
else
rm -rf /home/tools && mkdir -p /home/tools
fi

cd /home/tools
wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
if [ $? -eq 0 ];then
cd redis-stable/ && make && make  PREFIX=/usr/local/redis  install
fi

#Config redis
mkdir -p /usr/local/redis/{etc,run,data,log}
mkdir -p /usr/local/redis/data/6379
cd /home/tools/redis-stable
\cp /home/tools/redis-stable/redis.conf  /usr/local/redis/etc/redis.conf
\cp /usr/local/redis/etc/redis.conf  /usr/local/redis/etc/redis_6379.conf
sed -i ‘37s/daemonize no/daemonize yes/‘ /usr/local/redis/etc/redis_6379.conf
sed -i ‘41s#/var/run/redis.pid#/usr/local/redis/run/redis_6379.pid#‘ /usr/local/redis/etc/redis_6379.conf
sed -i ‘187s#dir ./#dir /usr/local/redis/data/6379#‘ /usr/local/redis/etc/redis_6379.conf
sed -i ‘103s#logfile ""#logfile /usr/local/redis/log/redis_6379.log#‘ /usr/local/redis/etc/redis_6379.conf

#Adding memory optimization parameters
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf 
sysctl -p

#Config start/stop script
cat > /etc/init.d/redis <<EOF
#!/bin/sh

PATH="/usr/local/redis/bin:\$PATH"
EXEC="/usr/local/redis/bin/redis-server"
CLIEXEC="/usr/local/redis/bin/redis-cli"
PIDFILE="/usr/local/redis/run/redis_6379.pid"
CONF="/usr/local/redis/etc/redis_6379.conf"
REDISPORT="6379"

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 "Usage: \$0 {start|stop}" >&2
        exit 1
        ;;
esac
EOF

#Setup redis
chmod +x /etc/init.d/redis && /etc/init.d/redis start

ln -s /usr/local/redis/bin/*/usr/bin

##########################################################

 

 

时间: 2024-10-11 05:26:08

如何在linux平台上安装redis(附自动安装脚本)的相关文章

PHP开发环境的配置(Linux平台上安装Apache和PHP)

PHP开发环境的配置(Linux平台上安装Apache和php): 下载Apache (httpd-2.4.12.tar.gz).下载PHP(php-5.6.9.tar.gz).下载与PHP安装相关的libxml2(libxml2-2.7.8.tar.gz).下载与Apache安装相关的三个文件:apr(apr-1.5.2.tar.gz).apr-util(apr-util-1.5.4.tar.gz).pcre (pcre-8.10.zip) (1)安装Apache:在安装apache之前必须先

如何在Linux系统上安装字体

如何在Linux系统上安装字体 最后更新 2015年12月11日 分类 Linux 101 最新文章 标签 font linux 字体 一般电脑用户使用的字体大部分属于TrueType字体,TrueType字体文件的扩展名是.ttf,ttf就是TrueType Font的首字母缩写.这篇教程将向读者介绍如何在Linux系统上安装TrueType字体.本文先介绍通用的安装方式,不管你用的是哪个Linux发行版,都可以用这种方法来安装.然后介绍Debian系和Redhat系发行版安装字体的一些捷径或

Linux平台上的多种软件安装方式与更友好的包管理软件介绍

一.Linux平台上软件安装卸载的四种方式 1.源码包安装.卸载 优点:性能最好,稳定 缺点:安装稍微复杂,容易出错 一般软件的源码包都进行了压缩,压缩的格式分为gz和bz(或bz2)两种格式. 源码包的格式:***.tar.gz(或bz,bz2). 如下图所示,是PHP的源码包: 源码包(以PHP的安装包为例)的安装.卸载的方法如下: 1)安装: 第一步:解压安装包 gz后缀用:tar -zxvf php-5.5.14.tar.gz bz(或bz2)后缀用:tar -jxvf php-5.5.

如何在Linux服务器上开启安全的SNMP代理

服务器监控工具可以帮助我们从任何一个地方实时了解服务器的性能和功能.监控宝服务器监控套装,可以实时CPU使用率.内存使用率.平均负载.磁盘I/O.网络流量.磁盘使用率等,能够同时为你带来短期效益和长期效益. 监控宝目前提供的服务器监控项目包括: 1. CPU使用率,监控CPU的使用率比例,包括用户态(User).内核态(System).I/O等待(IOWait).空闲(Idle)等 2. CPU负载,监控Linux服务器的平均负载(load average),包括最近1分钟.5分钟.15分钟等 

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

使用Samba服务器由win平台向linux平台上传文件

1.配置yum [[email protected] /]# cd /etc/yum.repos.d/ [[email protected] yum.repos.d]# vi yum.repo --修改光盘挂载位置,enabled设置为启动 配置yum参考链接:yum配置举例 2.构建samba服务器 [[email protected] /]# yum install -y samba-* --使用yum安装samba服务器 [[email protected] /]# service smb

windows平台是上的sublime编辑远程linux平台上的文件

sublime是个跨平台的强大的代码编辑工具,不多说. 想使用sublime完成linux平台下django站点的代码编辑工作以提高效率(原来使用linux下的vim效率较低,适合编辑一些小脚本). 下载linux平台下的Sublime_Text_2.0.2_x64.tar.bz2(http://www.sublimetext.com/) 解压使用: tar -xjvf Sublime_Text_2.0.2_x64.tar.bz2 cd Sublime\ Text\ 2/ 执行 ./sublim

如何在linux主机上运行/调试 arm/mips架构的binary

如何在linux主机上运行/调试 arm/mips架构的binary 原文链接[email protected]0.0.0.55 本文中用于展示的binary分别来自Jarvis OJ上pwn的add,typo两道题 写这篇教程的主要目的是因为最近想搞其他系统架构的pwn,因此第一步就是搭建环境了,网上搜索了一波,发现很多教程都是需要树莓派,芯片等硬件,然后自己编译gdb,后来实践的过程中发现可以很简单地使用qemu实现运行和调试异架构binary,因此在这里分享一下我的方法. 主机信息: 以一

如何在android平台上使用js直接调用Java方法[转]

转载自:http://www.cocos.com/docs/html5/v3/reflection/zh.html #如何在android平台上使用js直接调用Java方法 在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parame