centos6 yum安装redis3.29,centos6 源码安装redis以及常用配置<h2>一、 <span style="font-family:宋体">检查</span>yum<span style="font-family:宋体">可以安装的版本</span></h2>
<h3>1.1<span style="font-family:宋体">查看当前系统可以安装的</span>redis<span style="font-family:宋体">版本</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<p><strong>[root@localhost ~]# yum list|grep redis</strong></p>
<p>[root@localhost ~]#</p>
<p> </p>
<p><span style="font-family:宋体">发现没有可以安装的</span>,<span style="font-family:宋体">如果有则忽略下面的步骤</span></p>
<h3>1.2<span style="font-family:宋体">安装</span>centos<span style="font-family:宋体">提供的</span>epel-release<span style="font-family:宋体">源</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# yum install epel-release</code></pre>
<p><img alt="1" class="img-thumbnail" src="/assist/images/blog/a4ba199bfd204d84bbdd4bac341c08aa.png" /></p>
<p><span style="font-family:宋体">安装好以后再次查看可以安装的</span>redis<span style="font-family:宋体">版本</span></p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# yum list|grep redis
php-nrk-Predis.noarch 0.8.6-1.el6 epel
php-pecl-redis.x86_64 2.2.8-1.el6 epel
php-redis.x86_64 2.2.2-5.git6f7087f.el6 epel
python-redis.noarch 2.0.0-1.el6 epel
redis.x86_64 2.4.10-1.el6 epel
uwsgi-logger-redis.x86_64 2.0.15-1.el6 epel
uwsgi-router-redis.x86_64 2.0.15-1.el6 epel
[root@localhost ~]#</code></pre>
<p><span style="font-family:宋体">现在有了可以安装的版本了。但是版本还是太低是</span>2.4<span style="font-family:宋体">的版本。</span></p>
<p><span style="font-family:宋体">结论</span>:CentOS6<span style="font-family:宋体">不能直接通过</span>yum<span style="font-family:宋体">安装</span>redis3.X<span style="font-family:宋体">版本。需要源码安装</span>,centos7<span style="font-family:宋体">则可以。具体安装方式可根据使用的系统版本来抉择。</span></p>
<p> </p>
<h2 style="margin-left:36.0pt">二、 <span style="font-family:宋体">获取</span>redis<span style="font-family:宋体">安装资源以及环境</span></h2>
<h3>2.1<span style="font-family:宋体">下载</span>redis<span style="font-family:宋体">的安装文件包</span></h3>
<p><span style="font-family:宋体">官网地址</span>: <a href="https://redis.io/download" rel="external nofollow" target="_blank">https://redis.io/download</a></p>
<p>Redis 3.2.9<span style="font-family:宋体">下载地址</span>: <a href="http://download.redis.io/releases/redis-3.2.9.tar.gz" rel="external nofollow" target="_blank">http://download.redis.io/releases/redis-3.2.9.tar.gz</a></p>
<p> </p>
<p><span style="font-family:宋体">直接下载命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz</code></pre>
<p><span style="font-family:宋体">下载完成后在当前目录会有</span>redis-3.2.9.tar.gz<span style="font-family:宋体">包</span></p>
<p><img alt="2" class="img-thumbnail" src="/assist/images/blog/72c50fea69174343b711b862b7c7a1d2.png" /></p>
<p> </p>
<h3>2.2<span style="font-family:宋体">检查</span>gcc<span style="font-family:宋体">环境</span></h3>
<p><span style="font-family:宋体">检查系统中是否有</span>gcc<span style="font-family:宋体">编译器</span>,<span style="font-family:宋体">因为源码安装需要使用</span>gcc<span style="font-family:宋体">编译</span></p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# rpm -qa|grep gcc
gcc-4.4.7-4.el6.x86_64
libgcc-4.4.7-4.el6.x86_64
[root@localhost ~]#</code></pre>
<p><span style="font-family:宋体">上面的命令执行结果标识系统已经安装有</span>gcc<span style="font-family:宋体">编译器</span>,<span style="font-family:宋体">如果没有则执行下面的命令</span>,<span style="font-family:宋体">有则忽略下面步骤</span></p>
<p><span style="font-family:宋体">安装</span>GCC<span style="font-family:宋体">命令</span></p>
<pre>
<code>[root@localhost ~]# yum install –y gcc</code></pre>
<p> </p>
<h2><span style="font-family:宋体">三、安装</span>redis</h2>
<h3>3.1<span style="font-family:宋体">创建</span>redis<span style="font-family:宋体">安装目录</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# mkdir -p /usr/local/redis-3.2.9
[root@localhost ~]#</code></pre>
<h3>3.2<span style="font-family:宋体">解压下载的</span>redis<span style="font-family:宋体">安装文件</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# tar -xzvf redis-3.2.9.tar.gz</code></pre>
<h3>3.3<span style="font-family:宋体">指定安装目录安装</span>redis</h3>
<p><span style="font-family:宋体">首先进入解压后的</span>redis<span style="font-family:宋体">目录</span></p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost ~]# cd redis-3.2.9
[root@localhost redis-3.2.9]#</code></pre>
<p><span style="font-family:宋体">指定目录安装</span>redis</p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost redis-3.2.9]#make PREFIX=/usr/local/redis-3.2.9 install</code></pre>
<p><img alt="3" class="img-thumbnail" src="/assist/images/blog/dc50ab10f63249c8ad7ae52bd5a5137d.png" /></p>
<h3>3.4<span style="font-family:宋体">创建一个软连接方便访问寻找</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">ln -s /usr/local/redis-3.2.9 /usr/local/redis</code></pre>
<p> </p>
<h2><span style="font-family:宋体">四、配置</span>redis</h2>
<h3>4.1<span style="font-family:宋体">添加配置文件到</span>/etc<span style="font-family:宋体">目录</span></h3>
<p><span style="font-family:宋体">默认的</span>redis<span style="font-family:宋体">配置文件还在刚才解压的文件目录中</span>,<span style="font-family:宋体">在</span>Linux<span style="font-family:宋体">系统使用中,通常把配置的文件放在</span>/etc<span style="font-family:宋体">目录下。算一个规范。</span></p>
<p> </p>
<p><span style="font-family:宋体">将源码目录下的</span>redis<span style="font-family:宋体">配置文件添加一份到</span>/etc<span style="font-family:宋体">目录下</span></p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java">[root@localhost redis-3.2.9]# pwd
/root/redis-3.2.9
[root@localhost redis-3.2.9]# ll redis.conf
-rw-rw-r--. 1 root root 46695 May 17 08:39 redis.conf
[root@localhost redis-3.2.9]# cp redis.conf /etc/redis.conf</code></pre>
<h3>4.2.<span style="font-family:宋体">修改</span>redis<span style="font-family:宋体">默认以后台进程方式启动</span></h3>
<p><span style="font-family:宋体">编辑</span>/etc/redis.conf<span style="font-family:宋体">配置</span>redis<span style="font-family:宋体">以后台方式启动</span></p>
<pre>
<code class="language-java">[root@localhost redis-3.2.9]# vi /etc/redis.conf</code></pre>
<p><img alt="4" class="img-thumbnail" src="/assist/images/blog/a9e3c8b8406a45f58c4eee2f385a35e4.png" /></p>
<p><span style="font-family:宋体">在文件中找到</span>daemonize<span style="font-family:宋体">配置</span>,<span style="font-family:宋体">默认是</span>no,<span style="font-family:宋体">修改成</span>yes</p>
<p><img alt="5" class="img-thumbnail" src="/assist/images/blog/f498bccd0e494038a896ce370945ced0.png" /></p>
<p><span style="color:#e74c3c"><strong><span style="font-family:宋体">提示</span>:</strong><em><span style="font-family:宋体">配置文件配置项后面不要有空格</span></em></span></p>
<p> </p>
<h3>4.3<span style="font-family:宋体">配置</span>redis<span style="font-family:宋体">允许远程访问</span></h3>
<p><span style="font-family:宋体">编辑</span>/etc/redis.conf<span style="font-family:宋体">配置</span>redis<span style="font-family:宋体">允许远程访问</span></p>
<pre>
<code class="language-java">[root@localhost redis-3.2.9]# vi /etc/redis.conf</code></pre>
<p><img alt="6" class="img-thumbnail" src="/assist/images/blog/5ac5d3d3ca214782b9a76513b1cde8fc.png" /></p>
<p><span style="font-family:宋体">将</span>bind 127.0.0.1<span style="font-family:宋体">注释掉即可随意访问,如果不注释则只能通过bind后面的ip进行访问。如:</span><br />
</p>
<pre>
<code>bind 127.0.0.1 192.168.1.3</code></pre>
<p><span style="color:#e74c3c"><strong>上面的配置标识只能本地或者访问自己的ip地址192.168.1.3进行访问</strong></span><br />
<br />
为了测试方便,注释掉即可。生产请bind自己主机的局域网IP地址<br />
<br />
<img alt="7" class="img-thumbnail" src="/assist/images/blog/3608e0016dc647e08bfa2c0fe5c4ac00.png" /></p>
<p><span style="font-family:宋体">但是远程访问还不能读写</span>,<span style="font-family:宋体">所以继续配置</span></p>
<p><span style="font-family:宋体">找到</span>protected-mode yes(<span style="color:#8e44ad"><strong>如果使用bind的方式则不需要修改</strong></span>)</p>
<p><img alt="8" class="img-thumbnail" src="/assist/images/blog/0d331967cc774469a18bfbc4e41afaf8.png" /></p>
<p><span style="font-family:宋体">修改为</span>protected-mode no</p>
<p><img alt="9" class="img-thumbnail" src="/assist/images/blog/50f6d50040ee4b29bf59e28ca86992f2.png" /></p>
<p> </p>
<h3>4.4<span style="font-family:宋体">配置</span>redis<span style="font-family:宋体">访问密码</span></h3>
<p><span style="font-family:宋体">编辑</span>/etc/redis.conf<span style="font-family:宋体">配置</span>redis<span style="font-family:宋体">设置访问密码</span></p>
<p><span style="font-family:宋体">找到配置文件中的</span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">requirepass</span></span></span><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">配置</span></span></span></p>
<p><img alt="10" class="img-thumbnail" src="/assist/images/blog/f1c0f305ea6f4d7b8ef3601467340781.png" /></p>
<p><span style="font-family:宋体">默认情况是注释的</span>,<span style="font-family:宋体">配置的</span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">requirepass </span></span></span><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">后面跟的</span></span></span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">foobared</span></span></span><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">就是密码</span></span></span></p>
<p><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">例如现在启用密码</span></span></span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">,</span></span></span><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">并且将密码设置为</span></span></span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">123456</span></span></span><span style="background-color:white"><span style="font-family:宋体"><span style="color:black">,则配置为</span></span></span><span style="background-color:white"><span style="font-family:Consolas"><span style="color:black">:</span></span></span></p>
<p><img alt="11" class="img-thumbnail" src="/assist/images/blog/c39435d76b21443f8043f387536d662e.png" /></p>
<p><span style="font-family:宋体">去掉</span>#<span style="font-family:宋体">并将后面的密码修改为</span>123456</p>
<p><span style="color:#e74c3c"><strong><span style="font-family:宋体">提示</span></strong><em>:</em><em><span style="font-family:宋体">配置前后不要留空格</span></em></span><br />
</p>
<span style="font-family:宋体">配置redis最大使用内存以及超出最大内存后的处理策略</span><br />
<p><strong>#maxmemory </strong><strong><bytes></strong></p>
<p>redis-cache所能使用的最大内存(bytes),默认为0,表示"无限制",最终由OS物理内存大小决定(如果物理内存不足,有可能会使用swap)。此值尽量不要超过机器的物理内存尺寸,从性能和实施的角度考虑,可以为物理内存3/4。此配置需要和"maxmemory-policy"配合使用,当redis中内存数据达到maxmemory时,触发"清除策略"。在"内存不足"时,任何write操作(比如set,lpush等)都会触发"清除策略"的执行。在实际环境中,建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/slave中"maxmemory""policy"配置一致。</p>
<p>当内存满了的时候,如果还接收到set 命令,redis 将先尝试剔除设置过expire 信息的key,而不管该key 的过期时间还没有到达。在删除时,</p>
<p>将按照过期时间进行删除,最早将要被过期的key 将最先被删除。如果带有expire 信息的key 都删光了,内存还不够用,那么将返回错误。这样,redis 将不再接收写请求,只接收get 请求。maxmemory 的设置比较适合于把redis 当作于类似memcached的缓存来使用。</p>
<p><strong># maxmemory-policy noeviction</strong></p>
<p>内存不足"时,数据清除策略,默认为"noeviction。</p>
<p><em>volatile-lru</em> ->对"过期集合"中的数据采取LRU(近期最少使用)算法.如果对key使用"expire"指令指定了过期时间,那么此key将会被添加到"过期集合"中。将已经过期/LRU的数据优先移除.如果"过期集合"中全部移除仍不能满足内存需求,将OOM.<br />
<em>allkeys-lru</em> ->对所有的数据,采用LRU算法<br />
<em>volatile-random</em> ->对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止. 如果如果"过期集合"中全部移除全部移除仍不能满足,将OOM<br />
<em>allkeys-random</em> ->对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止<br />
<em>volatile-ttl</em> ->对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据.<br />
<em>noeviction</em> ->不做任何干扰操作,直接返回OOM异常<br />
另外,如果数据的过期不会对"应用系统"带来异常,且系统中write操作比较密集,建议采取"allkeys-lru"<br />
<br />
<strong>举个栗子:</strong><br />
配置最大使用内存2GB,超出后对不常使用的缓存清理,快过期缓存清理的配置为:</p>
<pre>
<code>#设置默认内存大小3GB
maxmemory 3GB
#设置清楚策略allkeys-lru
maxmemory-policy allkeys-lru</code></pre>
<h3>4.5<span style="font-family:宋体">创建</span>redis<span style="font-family:宋体">用户</span></h3>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code class="language-java"># useradd -r -s /sbin/nologin -M redis</code></pre>
<p>4.6<span style="font-family:宋体">创建</span>redis<span style="font-family:宋体">启动弄脚本便于使用</span>service<span style="font-family:宋体">管理</span>redis</p>
<p><strong><span style="font-family:宋体">命令</span>:</strong></p>
<pre>
<code class="language-java">#vi /etc/init.d/redis</code></pre>
<p><span style="font-family:宋体">脚本内容</span>:<br />
</p>
<pre>
<code class="language-bash">#!/bin/bash
#chkconfig: 2345 55 25
#description: Starts,stops and restart the redis-server
#Ver:1.1
#Write by ND chengh(200808)
#usage: ./script_name -p [port] {start|stop|status|restart}
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check networking is up.
[ "$NETWORKING" = "no" ] && exit 0
RETVAL=0
REDIS_PORT=6379
PID=
if [ "$1" = "-p" ]; then
REDIS_PORT=$2
shift 2
fi
REDIS_DIR="/usr/local/redis"
REDIS_CONF_DIR="/etc"
REDIS="${REDIS_DIR}/bin/redis-server"
PROG=$(basename $REDIS)
CONF="${REDIS_CONF_DIR}/redis-${REDIS_PORT}.conf"
if [ ! -f $CONF ]; then
if [ -f "${REDIS_CONF_DIR}/redis.conf" ];then
CONF="${REDIS_CONF_DIR}/redis.conf"
else
echo -n $"$CONF not exist.";warning;echo
exit 1
fi
fi
PID_FILE=`grep "pidfile" ${CONF}|cut -d ' ' -f2`
PID_FILE=${PID_FILE:=/var/run/redis.pid}
LOCKFILE="/var/lock/subsys/redis-${REDIS_PORT}"
if [ ! -x $REDIS ]; then
echo -n $"$REDIS not exist.";warning;echo
exit 0
fi
start() {
echo -n $"Starting $PROG: "
$REDIS $CONF
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success;echo;touch $LOCKFILE
else
failure;echo
fi
return $RETVAL
}
stop() {
echo -n $"Stopping $PROG: "
if [ -f $PID_FILE ] ;then
read PID < "$PID_FILE"
else
failure;echo;
echo -n $"$PID_FILE not found.";failure;echo
return 1;
fi
if checkpid $PID; then
kill -TERM $PID >/dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ] ;then
success;echo
echo -n "Waiting for Redis to shutdown .."
while checkpid $PID;do
echo -n "."
sleep 1;
done
success;echo;rm -f $LOCKFILE
else
failure;echo
fi
else
echo -n $"Redis is dead and $PID_FILE exists.";failure;echo
RETVAL=7
fi
return $RETVAL
}
restart() {
stop
start
}
rhstatus() {
status -p ${PID_FILE} $PROG
}
hid_status() {
rhstatus >/dev/null 2>&1
}
case "$1" in
start)
hid_status && exit 0
start
;;
stop)
rhstatus || exit 0
stop
;;
restart)
restart
;;
status)
rhstatus
RETVAL=$?
;;
*)
echo $"Usage: $0 -p [port] {start|stop|status|restart}"
RETVAL=1
esac
exit $RETVAL
</code></pre>
<p><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">上面脚本中可根据具体</span></span></span><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">redis</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">安装位置配置</span></span></span><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">redis-server</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">的路径和</span></span></span><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">conf</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">的路径</span></span></span></p>
<p><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">redis</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">默认安装在</span></span></span></p>
<p><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">/usr/local/redis</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">目录下</span></span></span></p>
<p><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">Redis</span></span></span><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">配置文件存放在</span></span></span></p>
<p><span style="background-color:#fafafc"><span style="font-family:"Tahoma",sans-serif"><span style="color:#333333">/etc/redis.conf</span></span></span></p>
<p> </p>
<p><span style="background-color:#fafafc"><span style="font-family:宋体"><span style="color:#333333">修改脚本权限</span></span></span></p>
<pre>
<code class="language-java">#chmod 755 /etc/init.d/redis</code></pre>
<p> </p>
<p><span style="font-family:宋体">添加进</span>service<span style="font-family:宋体">管理</span></p>
<pre>
<code class="language-java">#chkconfig --add redis</code></pre>
<p> </p>
<p><span style="font-family:宋体">设置开机启动</span></p>
<pre>
<code class="language-java"># chkconfig redis on</code></pre>
<p>4.7<span style="font-family:宋体">启动</span>redis</p>
<pre>
<code class="language-java">[root@localhost redis-3.2.9]# service redis start
Starting redis-server: [ OK ]</code></pre>
<p><img alt="12" class="img-thumbnail" src="/assist/images/blog/3c9b6e9d57104e82a82649a844c5b1d8.png" /></p>
<p> </p>
<h2><span style="font-family:宋体">五、连接到</span>redis<span style="font-family:宋体">测试</span></h2>
<p><span style="font-family:宋体">连接命令</span>:</p>
<pre>
<code class="language-java">#/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379</code></pre>
<p> </p>
<p><span style="font-family:宋体">设置一个值</span>:</p>
<pre>
<code>127.0.0.1:6379> set testKey testValue</code></pre>
<p><img alt="13" class="img-thumbnail" src="/assist/images/blog/963b924d72964889b49019bfa0695e2d.png" /></p>
<p><span style="font-family:宋体">获取上面的设置值</span></p>
<p><span style="font-family:宋体">命令</span>:</p>
<pre>
<code>127.0.0.1:6379> get testKey</code></pre>
<p><img alt="14" class="img-thumbnail" src="/assist/images/blog/82deb7d506ea4673970ad757e8f5492c.png" /></p>
<p>删除上面的值<br />
命令</p>
<pre>
<code>del testKey</code></pre>
<p><br />
</p>