linux 系统之Redis 源码编译指南

Redis 简介:

1、Redis介绍

Redis (Remote Dictionary Server)在 2009 年发布,开发者 Salvatore Sanfilippo 是意大利开发者,他本想为自己的公司开发一个用于替换 MySQL 的产品 Redis,但是没有想到他把 Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司有知乎网、新浪微博、GitHub等。
 Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database), 是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcache,但相比 memcache,redis 还提供了易扩展、高性能、具备数据持久性等功能。

2、Redis持久化方式

Redis 虽然是一个内存级别的缓存程序,即 redis 是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,Redis 支持两种不同方式的数据持久化保存机制,分别是 RDB 和 AOF。

2.1、RDB模式

实现过程:
  Redis从主进程先生成一个子进程,使用写时复制机制,子进程将内存的数据保存为一个临时文件,比如 dump.rdb.temp,当数据保存完成之后再将上一次保存的RDB文件替换掉,然后关闭子进程。
 优点:
  RDB快照保存了某个时间点的数据,可以通过脚本执行 bgsave(非阻塞)或者 save(阻塞)命令自定义时间点北备份,可以保留多个备份,当出现问题可以恢复到不同时间点的版本;
  可以最大化IO的性能,因为父进程在保存RDB文件的时候唯一要做的是生成一个子进程,然后的操作都会由这个子进程操作,父进程无需任何的 IO 操作;
  RDB 在大量数据比如几个 G 的数据,恢复的速度比 AOF 的快。
 缺点:
  不能时时的保存数据,会丢失自上一次执行备份到当前时间中的内存数据;
  数据量非常大时,从父进程生成子进程的时候需要一点时间。

2.2、AOF模式

按照操作顺序依次将操作添加到指定的日志文件当中。
 实现过程:
  AOF与RDB一样使用了写时复制机制,AOF默认为每秒钟 fsync一次,即将执行的命令保存到AOF文件当中。 (fsync是同步内存中redis所有已经修改的文件到存储设备)
 优点:
  数据安全性相对较高;AOF使用的fsync策略,默认是appendfsync everysec,即每秒执行一次,这样即使Redis服务器发生故障的话顶多也就丢失 1 秒钟之内的数据;也可以设置不同的 fsync策略,或者设置每次执行命令的时候执行fsync,fsync会在后台执行线程,所以主线程可以继续处理用户的正常请求而不受到写入AOF文件的IO影响;
 缺点:即使有些操作是重复的也会全部记录,同时生成的文件大小要大于RDB格式的文件。

3、 redis 编译安装

redis 版本: 下载地址

在这里插入图片描述

3.1、redis 编译安装

[root@localhost data]# tar -xvf redis-5.0.3.tar.gz
[root@localhost redis-5.0.3]# yum install -y gcc gcc-c++ jemalloc
[root@localhost redis-5.0.3]# make PREFIX=/usr/local/redis install

在这里插入图片描述

3.2 、创建配置文件目录与其它相关目录,并将源码包中的配置文件复制到配置文件目录中

[root@localhost redis-5.0.3]# mkdir -v /usr/local/redis/{etc,log,data,run}

在这里插入图片描述

[root@localhost redis-5.0.3]# cp redis.conf /usr/local/redis/etc/

在这里插入图片描述

3.3、启动redis

在这里插入图片描述

[root@localhost redis-5.0.3]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 
64732:C 14 Apr 2021 11:39:28.890 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
64732:C 14 Apr 2021 11:39:28.890 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=64732, just started
64732:C 14 Apr 2021 11:39:28.890 # Configuration loaded
64732:M 14 Apr 2021 11:39:28.891 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 64732
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

64732:M 14 Apr 2021 11:39:28.894 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
64732:M 14 Apr 2021 11:39:28.894 # Server initialized
64732:M 14 Apr 2021 11:39:28.894 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
64732:M 14 Apr 2021 11:39:28.894 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
64732:M 14 Apr 2021 11:39:28.894 * Ready to accept connections

在这里插入图片描述

3.4解决告警信息

#启动后会发现有三个WARNING信息,yum安装的启动也存在
#下面来先解决这三台WARNING提示

[root@localhost etc]# vim /etc/sysctl.conf

net.core.somaxconn = 512     #解决第一个WARNING提示    
vm.overcommit_memory = 1	   #解决第二个WARNING提示
[root@localhost etc]# sysctl -p

在这里插入图片描述

#解决第三个WARNING提示
[root@localhost etc]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
#以上配置重启主机后会丢失,永久生效的方式
#写入 /etc/rc.local 文件中,并给 /etc/rc.local 加执行权限

[root@centos7 redis-4.0.14]# vim /etc/rc.local 
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost etc]# chmod +x /etc/rc.local

重新启动
启动前:
在这里插入图片描述
启动后:
Redis port :6379
在这里插入图片描述
在这里插入图片描述

3.4、创建软链接

[root@localhost etc]# ln -sv /usr/local/redis/bin/redis-* /usr/bin/

在这里插入图片描述

[root@localhost etc]# vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
#ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=root    
Group=root
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

#上述配置中,建议新建普通用户运行,将User和Group修改一下

[root@localhost system]# useradd -r -s /sbin/nologin redis
[root@localhost system]# chown -R redis:redis /usr/local/redis/

3.5、验证redis启动:

[root@localhost ~]# systemctl start redis
[root@localhost ~]# /usr/local/redis/bin/redis-cli

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值