Linux 下如何安装 Redis?

文章目录

Redis是一款高性能的key-value数据库,本文主要记录如何在Linux系统上进行安装,以及为Python开发安装对应的redis模块。

实验环境

  • Linux版本

    Ubuntu 18.04 LTS && NeoKylin 3.2
  • Python版本

    Python 2.7.15rc1 && Python 2.6.6
  • Redis版本

    redis-5.0.4
  • redis-py版本

    redis-3.2.1 && redis-2.10.6

下载

下载地址:http://redis.io/download,下载最新稳定版本源码。

本文使用的版本为 redis-5.0.4

安装

Ubuntu

  1. 解压缩

    首先要解压Redis压缩包。进入压缩包下载的路径,执行:

    tar xzf redis-5.0.4.tar.gz
  2. 使用GCC编译源码

    cd redis-5.0.4
    make
  3. 安装Redis

    make install
  4. 验证

    root@local:~/temp# redis-server -v
    Redis server v=5.0.4 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=3dcf53963ddc396a
    root@local:~/temp# whereis redis-server
    redis-server: /usr/local/bin/redis-server

至此,Redis安装完成。

CentOs

  1. 编译安装

    make $$ make install

    此时报错

    CC adlist.o
    /bin/sh: cc: command not found
    make[1]: *** [adlist.o] Error 127
    make[1]: Leaving directory `/root/temp/redis-5.0.4/src'
    make: *** [all] Error 2
  2. 安装 gcc

    yum install gcc -y
  1. 重新 make

    make

    此时报错

    In file included from adlist.c:34:
    zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
    zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
    make[1]: *** [adlist.o] Error 1
    make[1]: Leaving directory `/root/temp/redis-5.0.4/src'
    make: *** [all] Error 2

    在构建Redis时选择非默认内存分配器是通过设置MALLOC环境变量完成的, 默认情况下 Redis 是使用malloclibc编译和链接的。
    libc并不是Linux上默认的分配器,默认的是 jemalloc, 因为 jemalloc 被证明比libc有更少的碎片问题(fragmentation problems)。
    但是如果你没有jemalloc 而只有libc 当然 make 出错。 所以有两种解决办法:

    • 方法一(不推荐)

      make MALLOC=libc
---
- 方法二

cd deps/
make hiredis jemalloc linenoise lua geohash-int
原因参见: [浅谈 redis 采用不同内存分配器 tcmalloc 和 jemalloc](http://www.jb51.net/article/100575.htm) >对于`tcmalloc`,`jemalloc`和`libc`对应的三个内存分配器。其性能和碎片率如何呢? >下面是一个简单测试结果,使用`Redis`自带的`redis-benchmark`写入等量数据进行测试,数据摘自采用不同分配器时`Redis info`信息。 >我们可以看到,采用`tcmalloc`时碎片率是最低的,为`1.01`,`jemalloc`为`1.02`,而`libc`的分配器碎片率为`1.31`,
  1. 编译安装

    make $$ make install
  2. 验证

    redis-server -v
    Redis server v=5.0.4 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=b139020f90f1d493
    whereis redis-server
    redis-server: /usr/local/bin/redis-server

至此,Redis安装完成。

配置

通过配置文件,设置Redis服务开机自启动。

  1. 设置自启动配置文件

    1. 切换目录

      cd utils/
2. 复制脚本文件

    
cp redis_init_script /etc/init.d/redisd		## ①
将`redis_init_script`文件重新命名为`redisd`,作为系统启动服务名(以`d`结尾表示是自启动服务,约定俗成)。 4. 修改配置
vi /etc/init.d/redisd
修改`redisd`文件,注意要在文件头部加上两句注释来设定该服务的运行级别
#!/bin/sh
# chkconfig: 2345 90 10
  1. 设置Redis控制脚本的配置文件

    1. 切换目录

      cd -
      cd ..
2. 在`redis`安装目录下,找到`redis.conf`文件

    
ls
如下
00-RELEASENOTES  INSTALL     runtest           tests
BUGS Makefile runtest-cluster utils
CONTRIBUTING MANIFESTO runtest-sentinel
COPYING README.md sentinel.conf
deps redis.conf src
3. 复制配置文件并重命名
cp redis.conf /etc/redis/6379.conf    ## ②
4. 编辑`Redis`配置文件 1. 设置`daemonize`为`yes`,使服务可以后台运行:
# nu:136
daemonize yes
2. 设置`log`文件路径:
# nu:171
logfile /var/log/redis/redis-server.log
3. 设置持久化文件存放路径:
# nu:263
dir /var/lib/redis
5. 保存退出,并创建相应的目录结构:
mkdir /var/log/redis
touch /var/log/redis/redis-server.log
mkdir /var/lib/redis
  1. 设置开机自启

    Ubuntu

    # 赋权
    chmod +x /etc/init.d/redisd
    # 更新系统启动项
    update-rc.d redisd defaults
#### CentOS

[root@master init.d]# chmod +x ./redisd
[root@master init.d]# chkconfig redisd on

附:常用redis管理命令

  • 启动Redis服务:
service redisd start
[root@master init.d]# service redisd start
Starting Redis server...
# 验证
[root@master init.d]# ps aux|grep redis|grep -v grep
root 6728 0.1 0.4 55572 9820 ? Ssl 11:03 0:00 /usr/local/bin/redis-server 127.0.0.1:6379
  • 关闭服务:
[root@master init.d]# service redisd stop
Stopping ...
Redis stopped
[root@master init.d]# ps aux|grep redis|grep -v grep
  • 重启服务:
service redisd restart
  • 在控制台中登录redis客户端:
[root@master init.d]# redis-cli
# 测试redis连通性
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"

安装提供Python支持

pip 安装

pip install redis

源码安装

https://pypi.org/project/redis/下载源码,Ubuntu上使用最新版本redis 3.2.1

  1. 解压

    tar -xzvf redis-3.2.1.tar.gz
  2. 切换目录

    cd redis-3.2.1
  3. 安装

    python setup.py install
  4. 验证

    root@local:~/temp/redis-3.2.1# python
    Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
    [GCC 7.3.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import redis
    >>> import redis
    >>>
    >>> r = redis.Redis(host='localhost', port=6379, db=0)
    >>> ret = r.get('hello')
    >>> print ret
    world

小插曲

关于 redis-py 的 Python 低版本支持

CentOS上安装redis-3.2.1的时候由于python版本较低(2.6.6)出现以下问题

[root@master redis-3.2.1]# python setup.py install
Traceback (most recent call last):
File "setup.py", line 4, in <module>
from setuptools import setup
ImportError: No module named setuptools

安装setuptools-0.6c9之后执行python setup.py install报错:

Traceback (most recent call last):
File "setup.py", line 7, in <module>
from redis import __version__
File "/root/temp/pyredis-3.2.1/redis/__init__.py", line 1, in <module>
from redis.client import Redis, StrictRedis
File "/root/temp/pyredis-3.2.1/redis/client.py", line 3046
return {decode(encode(k)): v for k, v in iteritems(data)}
^
SyntaxError: invalid syntax

去官网查看,发现最新版版本支持为:

Meta
……
Tags: Redis, key-value store

Requires: Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*

以及

Python Version Support
redis-py 3.0 now supports Python 2.7 and Python 3.4+. Python 2.6 and 3.3 support has been dropped.

最后安装较低版本(redis-2.10.6)成功,步骤同上,不再赘述。

读者可以从 这里 获取历史版本:https://pypi.org/project/redis/#history

参考链接

①:内容见 redisd
②:内容见 6379.conf