Linux 下如何安装 Redis?
Redis
是一款高性能的key-value
数据库,本文主要记录如何在Linux
系统上进行安装,以及为Python
开发安装对应的redis
模块。
# 实验环境
Linux
版本Ubuntu 18.04 LTS && NeoKylin 3.2
1Python
版本Python 2.7.15rc1 && Python 2.6.6
1Redis
版本redis-5.0.4
1redis-py
版本redis-3.2.1 && redis-2.10.6
1
# 下载
下载地址:http://redis.io/download
,下载最新稳定版本源码。
本文使用的版本为 redis-5.0.4
。
# 安装
# Ubuntu
解压缩
首先要解压
Redis
压缩包。进入压缩包下载的路径,执行:tar xzf redis-5.0.4.tar.gz
1使用
GCC
编译源码cd redis-5.0.4 make
1
2安装
Redis
make install
1验证
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
1
2
3
4
至此,Redis
安装完成。
# CentOs
编译安装
make $$ make install
1此时报错
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
1
2
3
4
5安装 gcc
yum install gcc -y
1重新 make
make
1此时报错
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
1
2
3
4
5
6在构建
Redis
时选择非默认内存分配器是通过设置MALLOC
环境变量完成的, 默认情况下 Redis 是使用malloc
为libc
编译和链接的。 而libc
并不是Linux
上默认的分配器,默认的是jemalloc
, 因为jemalloc
被证明比libc
有更少的碎片问题(fragmentation problems
)。 但是如果你没有jemalloc
而只有libc
当然make
出错。 所以有两种解决办法:方法一(不推荐)
make MALLOC=libc
1
- 方法二
cd deps/ make hiredis jemalloc linenoise lua geohash-int
1
2原因参见: 浅谈 redis 采用不同内存分配器 tcmalloc 和 jemalloc (opens new window)
对于
tcmalloc
,jemalloc
和libc
对应的三个内存分配器。其性能和碎片率如何呢? 下面是一个简单测试结果,使用Redis
自带的redis-benchmark
写入等量数据进行测试,数据摘自采用不同分配器时Redis info
信息。 我们可以看到,采用tcmalloc
时碎片率是最低的,为1.01
,jemalloc
为1.02
,而libc
的分配器碎片率为1.31
,编译安装
make $$ make install
1验证
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
2
3
4
至此,Redis
安装完成。
# 配置
通过配置文件,设置Redis
服务开机自启动。
设置自启动配置文件
切换目录
cd utils/
1复制脚本文件
cp redis_init_script /etc/init.d/redisd ## ①
1将
redis_init_script
文件重新命名为redisd
,作为系统启动服务名(以d
结尾表示是自启动服务,约定俗成)。修改配置
vi /etc/init.d/redisd
1修改
redisd
文件,注意要在文件头部加上两句注释来设定该服务的运行级别#!/bin/sh # chkconfig: 2345 90 10
1
2
设置
Redis
控制脚本的配置文件切换目录
cd - cd ..
1
2在
redis
安装目录下,找到redis.conf
文件ls
1如下
00-RELEASENOTES INSTALL runtest tests BUGS Makefile runtest-cluster utils CONTRIBUTING MANIFESTO runtest-sentinel COPYING README.md sentinel.conf deps redis.conf src
1
2
3
4
5复制配置文件并重命名
cp redis.conf /etc/redis/6379.conf ## ②
1编辑
Redis
配置文件设置
daemonize
为yes
,使服务可以后台运行:# nu:136 daemonize yes
1
2设置
log
文件路径:# nu:171 logfile /var/log/redis/redis-server.log
1
2设置持久化文件存放路径:
# nu:263 dir /var/lib/redis
1
2
保存退出,并创建相应的目录结构:
mkdir /var/log/redis touch /var/log/redis/redis-server.log mkdir /var/lib/redis
1
2
3
设置开机自启
# Ubuntu
# 赋权 chmod +x /etc/init.d/redisd # 更新系统启动项 update-rc.d redisd defaults
1
2
3
4# CentOS
[root@master init.d]# chmod +x ./redisd [root@master init.d]# chkconfig redisd on
1
2
# 附:常用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
2
3
4
5
6
- 关闭服务:
[root@master init.d]# service redisd stop
Stopping ...
Redis stopped
[root@master init.d]# ps aux|grep redis|grep -v grep
2
3
4
5
- 重启服务:
service redisd restart
2
- 在控制台中登录
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"
2
3
4
5
6
7
8
9
# 安装提供Python
支持
# pip 安装
pip install redis
# 源码安装
去https://pypi.org/project/redis/
下载源码,Ubuntu
上使用最新版本redis 3.2.1
解压
tar -xzvf redis-3.2.1.tar.gz
1切换目录
cd redis-3.2.1
1安装
python setup.py install
1验证
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
1
2
3
4
5
6
7
8
9
10
11
小插曲
关于 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
2
3
4
5
安装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
2
3
4
5
6
7
8
9
去官网查看,发现最新版版本支持为:
Meta
……
Tags: Redis, key-value store
Requires: Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
2
3
4
5
以及
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
)成功,步骤同上,不再赘述。
读者可以从 这里 (opens new window) 获取历史版本:https://pypi.org/project/redis/#history
# 参考链接
- Redis Quick Start (opens new window)
- Ubuntu 安装 Redis 并设置为开机自启动服务 (opens new window)
- Python 操作 Redis 数据库 (opens new window)
①:内容见 redisd ②:内容见 6379.conf