在 Ubuntu 上搭建单机版 Redis
为什么用到 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 来测试。
哇~~~ 竟然还没有评论!