Ubuntu 16.04 Redis 编译安装及设置详解

昨天把 rucaptcha 升级到 v1.1.1 时发现多一个配置:self.cache_store = :mem_cache_store 所以打算在系统中添加入 redis_store 作为缓存载体。一直以来在 Rails 项目中引入 redis 都是在官方文档引导下逐个步骤安装 redis-server 并添加相关 gem ,所以索性把这个过程自己总结写下来,后面如果在其他服务器,其他项目需要重复这个过程时再次翻阅这篇文章就是了。
在本篇文章中我们将会详细介绍在 Ubuntu 16.04 上编译安装和常规设置,及在 Rails 项目中的设置。

简介

Redis 是一种以其灵活性、高性能以及多语言支持著称的内存级键值对存储。

准备工作

基于最新的 Ubuntu 服务器系统文档版本,在安装过程中通过 sudo 权限,使用非 root 用户进行系统管理员权限操作。查阅 Initial Server Setup with Ubuntu 16.04
接下来就是需要安装编译环境及编译结果测试依赖工具。为了在机器上安装最新稳定版本的 redis ,我们需要从源码编译安装,所以需要编译安装环境 build-essential 。为了测试编译产生的二进制文件,同时需要安装 tcl 包。

sudo apt-get update
sudo apt-get install build-essential tcl

下载、编译、安装 Redis

因为我们从源码中编译之后不想保存源码,所以把源码下载到 /tmp 目录下就好了。

cd /tmp
curl -O http://download.redis.io/redis-stable.tar.gz
tar xzvf redis-stable.tar.gz
cd redis-stable

接着就是编译和安装

make

编译二进制文件之后,为确保编译步骤都执行成功,我们可以运行测试用例,运行测试用户需要等待几分钟(这一步是可选的,非必做步骤)

make test

编译完成之后,在 /tmp/redis-stable/src 目录下会出现六个可执行文件,分别为:

  • redis-server is the Redis Server itself.
  • redis-sentinel is the Redis Sentinel executable (monitoring and failover).
  • redis-cli is the command line interface utility to talk with Redis.
  • redis-benchmark is used to check Redis performances.
  • redis-check-aof and redis-check-dump are useful in the rare event of corrupted data files.

通常会把redis-serverredis-cli 这两个可执行文件拷贝到 /usr/local/bin/ 目录下(这里假设 /usr/local/bin 目录在环境变量中)

sudo cp src/redis-server /usr/local/bin/
sudo cp src/redis-cli /usr/local/bin/

或者不通过拷贝的方式,我们也可以执行下面的命令达到一样的效果。

sudo make install

Redis 配置

sudo mkdir /etc/redis
sudo cp /tmp/redis-stable/redis.conf /etc/redis

然后编辑配置文件,需要改的指令如下

supervised systemd  # 因为 Ubuntu 使用 systemd 作为系统启动初始化系统
dir /var/lib/redis  # 保存持久化数据文件目录,下文会设计到这个文件目录的讨论

新建 Redis 服务进程系统启动文件

sudo vi /etc/systemd/system/redis.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

新建 redis 用户,用户组及持久化文件目录

为了保障安全性 redis 服务进程系统启动文件指定 redis 用户及用户组而不是 root 用户。

sudo adduser --system --group --no-create-home redis
sudo mkdir /var/lib/redis
sudo chown redis:redis /var/lib/redis  //更改文件目录拥有者属性
sudo chmod 770 /var/lib/redis   // 更改文件目录读写模式,只允许 redis 用户及超级管理员

redis 服务启动及测试

sudo systemctl start redis  //Start up the systemd service
sudo systemctl status redis //Check that the service had no errors

为了测试 redis 服务的实例是否正常启动,可使用 redis-cli连接 redis-server

trusblock@i-m6rhh3ub:/etc/redis$ redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> set test "It's working!"
OK
127.0.0.1:6379> get test
"It's working!"
127.0.0.1:6379> exit
trusblock@i-m6rhh3ub:/etc/redis$ sudo systemctl restart redis
trusblock@i-m6rhh3ub:/etc/redis$ redis-cli
127.0.0.1:6379> get test
"It's working!"
127.0.0.1:6379> exit

当所有的测试都成功之后,我们可以设置 redis-server 服务开机启动

sudo systemctl enable redis

Rails 项目中引入 Redis 设置

  1. gem
    gem 'redis'
    gem 'redis-namespace'
    gem 'redis-rails'
    gem 'redis-rack-cache'  #Rails 5 API 没有 Rack::Cache middleware,可不需要引入这个 gem
    
  2. configure

    # config/application.rb
    config.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes }
    
    # config/initializers/redis.rb
    $redis = Redis::Namespace.new("site_point", :redis => Redis.new)
    
  3. test 在 Rails c 命令行中测试
    $redis.set("test_key", "Hello World!")
    $redis.get("test_key")
    

推荐阅读

0 条评论
您想说点什么吗?