如果是zip格式,先
[root@localhost ~]# yum -y install zip unzip
[root@localhost ~]# unzip *.zip
1、安装,去官网下载源码 https://redis.io/download或者https://github.com/antirez/redis/tree/3.2.12
tar xzf redis-3.2.12.tar.gz
chmod -R 777 redis-3.2.12 #linux一键获取文件夹下所有文件(尤其是.sh文件)权限,-R是递归的意思
cd redis-3.2.12
make
(1)chmod这个步骤很重要,否则/redis/redis-3.2.12/deps/jemalloc会因为没有权限而编译失败
(2)make默认使用jemalloc的内存分配器。
(3)最后可以不需要执行命令make install,免得redis新版本出来不好管理。
(4)如果编译报错:
In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
#include <jemalloc/jemalloc.h>
^
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/home/redis-3.2.12/src'
make: *** [all] Error 2
那么请手动进入jemalloc的文件夹,进行make
# cd deps/jemalloc/
# make
(5)如果编译报错:
debug.o: In function `debugCommand':
/home/redis-3.2.12/src/debug.c:535: undefined reference to `je_mallctl'
/home/redis-3.2.12/src/debug.c:537: undefined reference to `je_mallctl'
/home/redis-3.2.12/src/debug.c:529: undefined reference to `je_malloc_stats_print'
zmalloc.o: In function `zmalloc':
/home/redis-3.2.12/src/zmalloc.c:125: undefined reference to `je_malloc'
/home/redis-3.2.12/src/zmalloc.c:129: undefined reference to `je_malloc_usable_size'
那么,把make命令调整为:make CFLAGS="-march=x86-64"
(6)编译完成后,用户直接在源码文件夹路径下启动redis服务器即可。
2、笔者的redis路径是/root/Downloads/redis/redis-3.2.12/
拷贝配置文件/root/Downloads/redis/redis-3.2.12/redis.conf
到以下路径:
/root/Downloads/redis/redis-3.2.12/src
在终端执行命令,启动redis服务器
[root@localhost src]# ./redis-server redis.conf
如果命令不带配置参数文件,则使用默认的参数。Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 ,第136行
daemonize yes
查看运行状态
[root@localhost src]# ps -ef | grep redis
启动客户端并退出
[root@localhost src]# ./redis-cli
127.0.0.1:6379> quit
3、授权远程客户端连接
redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf
打开/root/Downloads/redis/redis-3.2.12/src/redis.conf文件,第69行,在NETWORK部分有说明
################################## NETWORK #####################################
# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1
解决办法:注释掉bind 127.0.0.1可以使所有的ip访问redis,或者把127.0.0.1修改成0.0.0.0
若是想指定多个ip访问,但并不是全部的ip访问,可以bind
注意
下面还有个说明,第88行
# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
# "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode yes
在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错,如下
(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
修改办法:protected-mode no
4、本地客户端访问
./redis-cli
5、外部客户端想访问进来,还需要考虑防火墙的问题。
CentOS7默认的防火墙是firewall,关掉它
关闭firewall防火墙:sudo systemctl stop firewalld.service
关闭firewall开机启动:sudo systemctl disable firewalld.service
firewall-cmd --state #查看状态
################### 学习资料 redis.conf ############################
在Redis的使用过程,除了知道对Redis五种数据类型的操作方法之外,最主要额就是对redis.conf进行配置了,下面整理出redis.conf中常见的一些配置介绍。
参数说明
redis.conf 配置项说明如下:
1: Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 ,第136行
daemonize no
2: 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid
3: 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
port 6379
4: 绑定的主机地址
bind 127.0.0.1
5: 当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
6: 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
7: 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
8: 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
databases 16
9: 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
10: 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes