古老的榕树

在 Ubuntu 上搭建单机版 Redis

发表 2018-01-14 00:33 阅读(1930)

为什么用到 Redis?

最近开发一个类似抢拍的拍卖 App;有个环节是需要秒刷新的,而且多少个商品同时需求秒请求订单数据,这时想想长期以往 MySQL 肯定应付不了, 所以采用了内存数据库的方案,当然就先到 Redis 了;其实 memcached 也是比较好的选择,但后期的数据结构需保留一定的灵活性,所以选择了 Redis。终端请求的数据,生命周期也很短,只要商品产生了新的订单数据后,老的数据直接存放到 MySQL,最后把它直接删掉。


对 Redis 有什么要求

因为若干个项目需要连接 Redis,所以必须开放 Redis 外网访问权限,再设置个足够强的密码;另外 Ubuntu 正常或意外系统重启后,能自动启动 Redis。


Redis 搭建步骤

到 Redis 官网[下载页](https://redis.io/download "下载页")直接下载最新的版本, [点击下载](http://download.redis.io/releases/redis-4.0.2.tar.gz "Redis 4.0.2") Redis 4.0.2 单独包 ,安装文件是 tar.gz 格式的,然后把文件放在 /usr/local/ 路径下。

也可以使用快捷方式在系统终端下载:

```bash
cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
```

**解压编译安装**
```bash
tar xzf redis-4.0.2.tar.gz
cd redis-4.0.2
make
```

等待片刻,Redis 就编译安装完成了,注意这时 Redis 和系统还是没有什么关联的,它就像绿色免安装包一样,以文件形式存在,需要我们手动启动、关闭,很不方便。


**启动 Redis**
```
src/redis-server
```

这时你会看到系统终端上显示 Redis 在6379端口启动成功,这时如果按下 ctrl+c 会终止 Redis 的正在使用的进程,自然 Redis 会自动关闭,这时需要一个进程守护,才不会退出。可以这样守护进程启动:
```
nohup src/redis-server&
```

Redis 还提供一个客户端,以便测试和联调使用,启动方法:
```bash
src/redis-cli
```

在客户端里,可以做任何数据库操作,如:
```bash
redis> set foo bar
OK
redis> get foo
"bar"
redis> shutdown save
```

**开放 Redis 外网访问**
默认配置文件,只能本地服务器使用,外部服务器是连接不上的,这时我们需要修改他的配置文件,让外网也能访问到它,这个分解为几步,先注释掉 Redis 内网 Ip 绑定,然后置一个密码,最后使它采用后台进程服务方式运行,这些都是在配置文件里可以完成的。

配置文件在刚才解压缩的根路径下:
```bash
/usr/local/redis-4.0.2/redis.conf
```

我们把默认配置文件拷贝一份,命名为 6379.conf
```bash
cp /usr/local/redis-4.0.2/redis.conf /usr/local/redis-4.0.2/6379.conf
```

打开新建的配置文件修改:
```bash
nano /usr/local/redis-4.0.2/6379.conf
```

把 bind 选项注释为
```
#bind 127.0.0.1
```

把 protected-mode 设置为 no
```
protected-mode no
```

搜索 masterauth 选项,在底下增加一行,设置远程密码:
```bash
requirepass 123456
```
我们暂且把密码定为 123456 吧。

把 daemonize 设置为 yes,这个很重要,是采用后台进程服务方式运行的关键。
```
daemonize yes
```

这四项都配置好了,我们保存配置文件,在客户端 src/redis-cli 上关闭 Redis,并在系统终端重新启动。
```
redis> shutdown save
```

系统终端启动 Redis
```
src/redis-server
```

这时 Redis 就是后台进程服务方式启动了,我们 ctrl+c 并不会自动关闭它。


**开机启动 Redis**
一半的工作已经做完了,最后就是设置 Ubuntu 开机自动启动 Redis 了。

进入到系统的启动目录
```
cd /etc/init.d
nano redis
```

把以下脚本粘贴到 redis 文件中:

#!/bin/sh
# chkconfig: 2345 10 90  
# description: Start and Stop redis
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDISPORT=6379
EXEC=/usr/local/redis-4.0.2/src/redis-server
CLIEXEC=/usr/local/redis-4.0.2/src/redis-cli 

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis-4.0.2/${REDISPORT}.conf"
AUTHPWD=123456

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 "Try save and stopping ..."
                $CLIEXEC -p $REDISPORT -a $AUTHPWD shutdown save
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac



保存脚本文件 redis

然后执行
```
sed -i 's/\r$//' redis
```

然后设置权限
```
chmod +x redis
```

最后设置开机启动 redis 脚本
```
sysv-rc-conf redis on
```

这时,Ubuntu 正常或意外重启后,Redis 会跟着自动启动了。

(附加)取消开机启动
```
sysv-rc-conf redis off
```

(附加)查看开机启动
```
sysv-rc-conf --list|grep redis
```

/etc/init.d/redis 启动脚本,会因自己的安装 Redis 的目录不同而有所区别,另外需要注意的是,上面也需要到 Redis 的远程密码。

这些设置都好了,你发现你可以通过系统快捷方式启动、停止、重启 Redis 了
```
service redis start
service redis stop
service redis restart
```

为了验证可行性,你可以在 PC 上安装一个 RedisDesktopManager 客户端,通过外部 ip 连接都 Redis 来测试。


Donate

如果文章对您有帮助,可在支付宝上扫描二维码捐助作者!

0 条网友评论

哇~~~ 竟然还没有评论!

称呼*
邮箱*
内容*
验证码*
验证码 看不清换张