在Centos7下源码安装配置Redis
来源:互联网 发布:深入浅出python豆瓣 编辑:程序博客网 时间:2024/05/19 04:28
1.安装前准备开发环境
安装编译源码所需的工具和库:yum install gcc gcc-c++ ncurses-devel perl
安装cmake:yum -y install make gcc gcc-c++ ncurses-devel
安装ssl功能需要openssl库:yum -y install openssl-devel
安装压缩包:yum -y install zlib zlib-devel
JDK:jdk-8u92-linux-x64.rpm
Redis:jdk-8u92-linux-x64.rp
系统信息:
CentOS Linux release 7.2.1511 (Core)
Kernel: Linux 3.10.0-327.el7.x86_64
2.Redis安装过程
2.1解压Redis文件
进入到redis文件目录下,输入tar –zxvf redis-3.2.1.tar.gz解压文件。
编译成功。目录在在redis-3.2.1目录下输入make进行编译。
2.2编译安装文件
输入cd /usr/local目录下,输入mkdir redis创建文件夹。
输入cd /var/ftp/pub/redis-3.2.1目录下,输入输入make&&makeinstall进行编译安装。
输入whereis redis查看安装文件的路径。
输入cd /usr/local/redis/bin进入到目录下,查看文件。
Redis-benchmark
Redis-check-aof
Redis-check-rdb
Redis-cli
Redis-sentinel –>redis-server
Redis-server
2.3拷贝文件
进入到redis-3.2.1解压的目录下,输入
cp /var/ftp/pub/redis-3.2.1/redis.conf/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest-cluster/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest-sentinel/usr/local/redis/bin
cp /var/ftp/pub/redis-3.2.1/runtest/usr/local/redis/bin
cd /usr/local/redis/bin
将文件到问道/usr/local/redis/bin目录下。
2.4运行Redis
2.5测试Redis
新打开一个窗口,进入到cd /usr/local/redis/bin目录下,输入./redis-cli,运行客户端,进行测试:
127.0.0.1:6379> set username andrew
OK
127.0.0.1:6379> set password 123456
OK
127.0.0.1:6379> get username
"andrew"
127.0.0.1:6379> get password
"123456"
127.0.0.1:6379>
如果想退出客户端,输入exit。
3.将Redis的端口添加到Firewall
在Firewall中添加6379端口,firewall-cmd –permanent –add-port=6379/tcp,然后在输入firewall-cmd–reload,
重载成功过后,在输入firewall-cmd –list-all,可显示添加的6379端口。
4.设置自定义开机系统服务
CentOS 7 使用systemd替换了SysV。Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,
而且够在进程启动过程中更有效地引导加载服务。
systemd的特性有:
支持并行化任务
同时采用socket式与D-Bus总线式激活服务;
按需启动守护进程(daemon);
利用 Linux 的 cgroups 监视进程;
支持快照和系统恢复;
维护挂载点和自动挂载点;
各服务间基于依赖关系进行精密控制。
检视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务。详见man 1 systemctl。
输入vim /usr/lib/systemd/system/redis.service进入文件编辑。
将以下内容拷贝到nginx.service文件中,然后保存。
[Unit]
Description=Redis daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server/usr/local/redis/bin/redis.conf
ExecReload=/usr/local/redis/bin/redis-server-s reload
ExecStop=/usr/local/redis/bin/redis-server-s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
如果需要更详细的配置,请参考:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
使用单元
一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。详情参阅 man 5 systemd.unit。
使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如 sshd.service)。但是有些单元可以在systemctl中使用简写方式。
如果无扩展名,systemctl 默认把扩展名当作 .service。例如 netcfg 和 netcfg.service 是等价的。
挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount。
设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device。
注: 有一些单元的名称包含一个 @ 标记, (e.g. name@string.service): 这意味着它是模板单元name@.service 的一个实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个参数传给模板单元,模板单元会使用这个传入的参数代替模板中的 %I 指示符。在实例化之前,systemd 会先检查 name@string.suffix 文件是否存在(如果存在,应该就是直接使用这个文件,而不是模板实例化了)。大多数情况下,包换 @ 标记都意味着这个文件是模板。如果一个模板单元没有实例化就调用,该调用会返回失败,因为模板单元中的 %I 指示符没有被替换。
例如:systemctl start <单元>
编写单元文件
systemd单元文件的语法来源于 XDG桌面入口配置文件.desktop文件,最初的源头则是MicrosoftWindows的.ini文件。单元文件可以从两个地方加载,优先级从低到高分别是:
/usr/lib/systemd/system/: 软件包安装的单元
/etc/systemd/system/: 系统管理员安装的单元
注意: 当systemd运行在用户模式下时,使用的加载路径是完全不同的。
处理依赖关系
使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元A要求单元B在A启动之前运行。在此情况下,向单元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依赖关系是可选的,可添加 Wants=B 和 After=B。请注意 Wants= 和 Requires= 并不意味着 After=,即如果 After= 选项没有制定,这两个单元将被并行启动。
依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。
服务类型
编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。
Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName出现在DBus系统总线上时,systemd认为服务就绪。
Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。
type的更多解释可以参考systemd.service(5)。
4.2设置开机服务
输入systemctl start redis启动redis服务
在输入systemctl enable redis设置redis服务为开机启动服务
最后输入systemctl status redis查看redis的运行状态。
4.2停止开机服务
输入systemctl disable redis停止开机启动redis服务
输入systemctlstop redis停止redis服务
输入systemctl status redis查看redis的运行状态。
5.在客户端上运行Redis
#redis-cli -h 127.0.0.1 -p 6379
localhost:6379>
localhost:6379> PING
PONG
localhost:6379> set databaseName redis
OK
localhost:6379> keys *
1) "databaseName"
#redis-cli -h 127.0.0.1 -p 6379 -a"mypass"
以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
6.附录
6.1Redis.conf配置项详解
#是否作为守护进程运行
daemonize yes
#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
pidfile redis.pid
#绑定主机IP,默认值为127.0.0.1
#bind 127.0.0.1
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开连接,默认为300(秒)
timeout 300
#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
loglevel verbose
#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志
logfile stdout
#可用数据库数,默认值为16,默认数据库为0
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#本地数据库存放路径,默认值为 ./
dir /usr/local/redis/var/
########### Replication#####################
#Redis的复制配置
# slaveof <masterip><masterport> 当本机为从服务时,设置主服务的IP及端口
# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码
#连接密码
# requirepass foobared
#最大客户端连接数,默认不限制
# maxclients 128
#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。
# maxmemory <bytes>
#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendonly no
#更新日志文件名,默认值为appendonly.aof
#appendfilename
#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能,默认值为no
vm-enabled no
# vm-enabled yes
#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file logs/redis.swap
#将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
注意:Redis官方文档对VM的使用提出了一些建议:
当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.
2. 调整系统内核参数
如果内存情况比较紧张的话,需要设定内核参数:
echo 1 > /proc/sys/vm/overcommit_memory
这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)
四. 运行 Redis
1. 运行服务
/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis.conf
即可在后台启动redis服务,确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如:
/usr/local/redis/bin/redis-cli set foo bar
OK
/usr/local/redis/bin/redis-cli get foo
bar
2. 关闭服务
redis-cli shutdown
如果端口变化可以指定端口:
redis-cli -p 6380 shutdown
3. 保存/备份
数据备份可以通过定期备份该文件实现。
因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:
redis-cli save 或者 redis-cli-p 6380 save(指定端口)
注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。
执行redis-benchmark命令时也会将内存数据写入硬盘。
4. 同步机制
redis实现的同步机制相对简单,缺少同步机制常见的checkpoint和校验机制。
在运行时,如果master -> slave同步请求转发被丢弃, slave将无法恢复该请求的相关信息,直到slave重启时从master全量加载数据时才能修复。因此,建议使用redis尽量利用其 key/value和value支持多种类型的特性,存储一些相对不重要的数据。
- 在Centos7下源码安装配置Redis
- Centos7在安装配置redis
- CentOS7下Redis安装与配置
- Redis在Centos7下的集群安装
- CentOS7安装配置redis
- CentOS7下安装Redis
- CentOS7下安装Redis
- CentOS7源码安装Redis及配置系统服务
- 在Centos7下源代码安装配置Nginx
- Redis 在Centos7下配置开机自启动
- Redis 在Centos7下配置开机自启动
- linux centos7 下安装配置redis 自动后台启动
- redis在centos7下的安装以及自启动
- Redis+CentOS7.0安装配置
- centos7 yum安装配置redis
- CentOS7 安装配置Redis数据库
- centos7安装redis 配置集群
- Linux CentOS7 安装 配置 Redis
- 使用webpack 使用Echarts3简单入门
- c#客户端Json转dataTable
- eclipse jni (C/C++)代码提示
- Python & PyCharm & Django 搭建web开发环境
- 使用FFmpeg实现的转码器
- 在Centos7下源码安装配置Redis
- Android加载大图Bitmap发生OOM(Out Of Memmory Error)解决方案
- Android 一起来封装一个简单易用的Adapter
- JavaScript变量、作用域、内存、垃圾回收
- 播放音频文件
- Android源码编译(2)----建立编译环境
- 剑指offer——查找一个字符串中第一次出现一次的字符(哈希直接定址法)
- LIB和DLL的区别与使用
- T-SQL 学习笔记