Linux下redis源码编译安装

华子目录

  • `Redis`介绍
    • 什么是`Redis`
    • `Redis`能干什么
    • `Redis`的特点
    • `Redis`与`memcached`对比
  • `redis`源码编译安装
    • 下载源码包
    • 准备安装环境
    • 开始编译
    • 开始安装
  • 前台启动
  • 后台启动`redis`
  • 开启`systemctl`启动`redis`
  • 测试redis
  • 相关知识

Redis介绍

什么是Redis

  • 2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便开始对MySQL性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore SanfilippoRedis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis开发,直到今天。
  • Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博街旁网知乎,国外如GitHubStack OverflowFlickr暴雪Instagram,都是Redis用户
  • VMware公司从2010年开始赞助Redis开发Salvatore SanfilippoPieter Noordhuis也分别在3月和5月加入VMware全职开发Redis。【本部分内容取自《REDIS入门指南》
  • Redis(REmote Dctionary Server 远程字典服务器),是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key-value)分布式内存数据库基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一, 也被人们称为数据结构服务器。
  • Redis是一个开源的高性能键值对Key-Value数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
    • 字符串类型
    • 散列类型
    • 列表类型
    • 集合类型
    • 有序集合类型

学习参考网站:https://www.redis.net.cn/

Redis能干什么

  • 内存存储持久化redis支持异步内存中的数据写到硬盘上,同时不影响继续服务
  • 最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面
  • 模拟类似于HttpSession这种需要设定过期时间的功能(过期之后对数据的处理)
  • 发布、订阅消息系统
  • 定时器、计数器

Redis的特点

  • 性能极高Redis 的速度是 110000 次 /s的速度是 81000 次 /s 。
  • 丰富的数据类型Redis 支持二进制案例的 StringListHashSetZSet 数据类型操作。
  • 原子性Redis所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,是非原子性,通过 MULTIEXEC 指令包起来。
  • 数据持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • 其他特性Redis 还支持 publish/subscribe 通知,key过期等特性。

Redis 提供的API支持:C、C++、C#、Clojure、Java、JavaScript、Lua、PHP、Python、Ruby、Go、Scala、Perl等多种语言。

Redismemcached对比

  • 共同点
    • 无论是Memcached还是Redis底层都是使用C语言编写,都是基于key-value,存储的数据都是在内存中。
  • 不同点
    • Memcached支持的数据类型比较简单(String,Object);Redis支持的数据类型比较丰富
    • Memcached默认一个值的最大存储不能超过1MRedis一个值的最大存储1G
    • Memcached中存储的数据不能持久化,一旦断电数据丢失;Redis中存储的数据可以持久化。
    • Memcached多线程,支持并发访问Redis单线程不支持并发访问
    • Memcached自身不支持集群环境Redis3.0版本之后自身开始提供集群环境支持

redis源码编译安装

下载源码包

  • GitHub上,搜索redis,找到相应的仓库,下载对应的redis版本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 下载tar.gz的包,使用mobaxterm将这个包上传到Linuxroot家目录
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  redis-7.2.4.tar.gz
  • 使用tar命令解压到/usr/local/目录下
[root@server ~]# tar -zxvf redis-7.2.4.tar.gz   -C   /usr/local/[root@server ~]# cd /usr/local/
[root@server local]# ls
bin  etc  games  include  lib  lib64  libexec  redis-7.2.4  sbin  share  src
  • 修改redis-7.2.4名为redis
[root@server local]# mv redis-7.2.4 redis
[root@server local]# ls
bin  etc  games  include  lib  lib64  libexec  redis  sbin  share  src

准备安装环境

  • 由于 Redis 是基于 C语言编写的,因此首先需要安装 Redis 所需要的依赖环境:gcc、gcc-g++、make
[root@server ~]# yum install gcc gcc-g++ make -y
[root@server ~]# gcc --version
gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3)
Copyright © 2021 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。[root@server ~]# g++ --version
g++ (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3)
Copyright © 2021 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。[root@server ~]# make --version
GNU Make 4.3
为 x86_64-redhat-linux-gnu 编译
Copyright (C) 1988-2020 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

开始编译

  • 进入到/usr/local/redis目录下
[root@server ~]# cd /usr/local/redis/
[root@server redis]# ls
00-RELEASENOTES     COPYING   MANIFESTO   runtest-cluster    sentinel.conf  utils
BUGS                deps      README.md   runtest-moduleapi  src
CODE_OF_CONDUCT.md  INSTALL   redis.conf  runtest-sentinel   tests
CONTRIBUTING.md     Makefile  runtest     SECURITY.md        TLS.md
  • 输入make开始编译
[root@server redis]# make
#然后需要等待一段时间

开始安装

  • 编译成功之后,输入make install进行安装
[root@server redis]# make install
  • 如果没有出错,就会安装成功默认安装路径是在 /usr/local/bin 目录下。
  • 此时我们查看环境变量,发现:环境变量中有/usr/local/bin这个路径,说明我们可以在任意路径下执行redis命令
[root@server redis]# echo $PATH   #查看环境变量
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
  • 我们切换到/usr/local/bin目录下,查看
[root@server bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
redis-server:它是redis的服务端启动脚本
redis-cli:它是redis提供的客户端启动脚本
redis-sentinel:它是redis提供的哨兵启动脚本
redis-benchmark:性能测试工具,可以在自己电脑上运行来查看性能
redis-check-aof:修复有问题的AOF文件
redis-check-rdb:用于检查RDB(Redis Database)持久化文件的完整性。

前台启动

[root@server bin]# cd
[root@server ~]# redis-server
38105:C 16 May 2024 12:25:09.379 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. 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.
38105:C 16 May 2024 12:25:09.379 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
38105:C 16 May 2024 12:25:09.379 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=38105, just started
38105:C 16 May 2024 12:25:09.379 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
38105:M 16 May 2024 12:25:09.380 * Increased maximum number of open files to 10032 (it was originally set to 1024).
38105:M 16 May 2024 12:25:09.380 * monotonic clock: POSIX clock_gettime_.__.-``__ ''-.__.-``    `.  `_.  ''-._           Redis 7.2.4 (00000000/0) 64 bit.-`` .-```.  ```\/    _.,_ ''-._(    '      ,       .-`  | `,    )     Running in standalone mode|`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379  #服务端端口号|    `-._   `._    /     _.-'    |     PID: 38105  #服务端进程号`-._    `-._  `-./  _.-'    _.-'|`-._`-._    `-.__.-'    _.-'_.-'||    `-._`-._        _.-'_.-'    |           https://redis.io`-._    `-._`-.__.-'_.-'    _.-'|`-._`-._    `-.__.-'    _.-'_.-'||    `-._`-._        _.-'_.-'    |`-._    `-._`-.__.-'_.-'    _.-'`-._    `-.__.-'    _.-'`-._        _.-'`-.__.-'38105:M 16 May 2024 12:25:09.386 * Server initialized
38105:M 16 May 2024 12:25:09.387 * Ready to accept connections tcp
  • 注意:这里直接执行redis-server启动的Redis服务,是在前台直接运行的(效果如上图),也就是说,执行完该命令后,如果关闭当前会话,则Redis服务也随即关闭,因此这种方式不推荐使用。正常情况下,启动Redis服务需要从后台启动。
  • 此时我们另起一个会话
[root@server ~]# ps -ef | grep redis   #查看redis端口和进程
UID          PID    PPID  C STIME TTY          TIME CMD
root       38105    2782  0 12:25 pts/1    00:00:00 redis-server *:6379
root       38166   38135  0 12:29 pts/0    00:00:00 grep --color=auto redis[root@server ~]# ps -aux | grep redis  #查看redis端口和进程
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       38105  0.3  0.5 268212 10896 pts/1    Sl+  12:25   0:01 redis-server *:6379
root       38180  0.0  0.1 221680  2220 pts/0    S+   12:32   0:00 grep --color=auto redis
  • 关闭redis服务
#通过redis-cli命令关闭
[root@server ~]# redis-cli shutdown   关闭`redis`服务
[root@server ~]# ps -ef | grep redis
root       38190   38135  0 12:34 pts/0    00:00:00 grep --color=auto redis#通过kill杀死redis进程关闭redis服务
[root@server ~]# ps -ef | grep redis
root       38191    2782  0 12:36 pts/1    00:00:00 redis-server *:6379
root       38198   38135  0 12:38 pts/0    00:00:00 grep --color=auto redis
[root@server ~]# kill -9 38191
[root@server ~]# ps -ef | grep redis
root       38200   38135  0 12:38 pts/0    00:00:00 grep --color=auto redis

后台启动redis

  • redis的安装目录中,有一个 redis.conf 文件,我们把这个文件复制到/etc/目录下
[root@server ~]# cp /usr/local/redis/redis.conf  /etc/
[root@server ~]# find / -name redis.conf
/etc/redis.conf
/usr/local/redis/redis.conf
  • 修改/etc/redis.conf文件,把daemonize值设置为yes
[root@server ~]# vim /etc/redis.conf
daemonize yes

在这里插入图片描述

  • 保存退出后,执行如下命令来后台启动服务
[root@server ~]# redis-server /etc/redis.conf
38241:C 16 May 2024 12:45:16.005 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. 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.
[root@server ~]# ps -ef | grep redis
root       38242       1  0 12:45 ?        00:00:00 redis-server 127.0.0.1:6379
root       38249   38135  0 12:45 pts/0    00:00:00 grep --color=auto redis
[root@server ~]#
  • 此时我们发现,已经成功后台启动了

开启systemctl启动redis

  • redis没有开机启动功能,我们需要编写脚本来实现这个功能。我们在 /etc/systemd/system 目录下新建 redis.service 文件。
  • 我们在/usr/lib/systemd/system/etc/systemd/system新建redis.service都可以
[root@server ~]# cd /usr/lib/systemd/system
[root@server system]# vim redis.service
[Unit]
#服务描述
Description=Redis Server Manager
#服务类别
After=network.target[Service]
#后台运行的形式
Type=forking
#服务命令
ExecStart=/usr/local/bin/redis-server  /etc/redis.conf
#给服务分配独立的临时空间
PrivateTmp=true[Install]
#运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
WantedBy=multi-user.target
  • 重新加载文件
[root@server ~]# systemctl daemon-reload
[root@server ~]# systemctl status redis  #已经可以成功使用systemctl
○ redis.service - Redis Server ManagerLoaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)Active: inactive (dead)

测试redis

[root@server ~]# systemctl start redis
[root@server ~]# systemctl status redis
● redis.service - Redis Server ManagerLoaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)Active: active (running) since Thu 2024-05-16 12:59:56 CST; 9s agoProcess: 38341 ExecStart=/usr/local/bin/redis-server /etc/redis.conf (code=exited, status=0/SU>Main PID: 38342 (redis-server)Tasks: 5 (limit: 11985)Memory: 6.7MCPU: 36msCGroup: /system.slice/redis.service└─38342 "/usr/local/bin/redis-server 127.0.0.1:6379"516 12:59:56 server systemd[1]: Starting Redis Server Manager...
516 12:59:56 server redis-server[38341]: 38341:C 16 May 2024 12:59:56.817 # WARNING Memory over>
516 12:59:56 server systemd[1]: Started Redis Server Manager.
[root@server ~]# redis-cli    #客户端连接服务端,默认使用6379端口
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
[root@server ~]#
[root@server ~]# redis-cli -p 6379  #连接时指定端口
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
  • 使用systemctl关闭redis服务
[root@server ~]# systemctl stop redis
[root@server ~]# systemctl status redis
○ redis.service - Redis Server ManagerLoaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)Active: inactive (dead)516 12:59:56 server systemd[1]: Starting Redis Server Manager...
516 12:59:56 server redis-server[38341]: 38341:C 16 May 2024 12:59:56.817 # WARNING Memory over>
516 12:59:56 server systemd[1]: Started Redis Server Manager.
516 13:04:05 server systemd[1]: Stopping Redis Server Manager...
516 13:04:05 server systemd[1]: redis.service: Deactivated successfully.
516 13:04:05 server systemd[1]: Stopped Redis Server Manager.
[root@server ~]# ps -ef | grep redis
root       38373   38135  0 13:04 pts/0    00:00:00 grep --color=auto redis

相关知识

  • redis默认的端口号是 6379默认16 个数据库,类似数组下标从0开始,初始默认使用0号数据库。
  • 可以使用 select <dbid> 命令来切换数据库。例如切换到 2号数据库select 2
  • redis中,可以使用 dbsize 命令来查看当前数据库的 key 的数量,也可以使用 flushdb 命令来清空当前数据库所有数据,还可以使用 flushall 命令来删除所有数据库中的数据。
  • Redis单线程+多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707273.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xlrd.biffh.XLRDError: Excel xlsx file; not supported报错原因

xlrd库读取xlsx文件时报错 xlrd.biffh.XLRDError: Excel xlsx file; not supported报错原因&#xff1a; xlrd版本为2.1版本&#xff0c;需要读取xlsx文件需要安装xlrd低一些版本1.2.0版本&#xff0c;重新安装重试即可 更换xlrd版本 重新运行

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉&#xff0c;不管是在实际的开发工作当中会用的&#xff0c;还是在面试官面试你的时候会问到&#xff1a;你之前的项目是按照什么分层的&#xff0c;分哪几层&#xff0c;数仓分层有什么好处&#xff0c;举个栗子说说。 简而言之&#xff0c;…

element-ui dialog form 弹框表单组件封装

在使用 element-ui 进行后端管理系统开发时&#xff0c;在封装弹框表单时&#xff0c;遇到两个问题&#xff0c;这里进行简单记录&#xff1a; 1、问题一&#xff1a;点击关闭按钮及遮罩层关闭弹框时&#xff0c;页面报错&#xff0c;如下&#xff1a; 子组件封装&#xff1a;…

上海初中生古诗文大会倒计时4个月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;备考要趁早&#xff0c;因为知识点还是相对比较多的。这些知识点对于初中语文的学习也是很有帮助的。 今天我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是…

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代&#xff0c;创业似乎成为了越来越多人的梦想。然而&#xff0c;传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程&#xff0c;让许多普通人望而却步。然而&#xff0c;现在有一种轻资产短视频带货项目正在悄然兴起&#xff0c;它以其低…

【CSND博客纪念】“创作纪念日:从灵感迸发到小有成就——我的CSND博客创作之旅”

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Verilog 实现 i2c 协议

在时钟&#xff08;SCL&#xff09;为高电平的时候&#xff0c;数据总线&#xff08;SDA&#xff09;必须保持稳定&#xff0c;所以数据总线&#xff08;SDA&#xff09;在时钟&#xff08;SCL&#xff09;为低电平的时候才能改变。 在时钟&#xff08;SCL&#xff09;为高电平…

【c语言】TIMI哥听课笔记

计算机的组成 主储存器&#xff1a;内存条&#xff0c;硬盘 CPU内部&#xff1a;运算器&#xff0c;控制器&#xff0c;寄存器 进制转化&#xff1a;二转八拆三&#xff0c;二转十六拆四 基本数据类型 常量&#xff1a;整型常量&#xff08;十进制&#xff0c;0x十六&#x…

【Altium】AD-检查原理图中元器件未连接的Passive Pin

1、 文档目标 如何让原理图编译时找出元器件上未连接的Passive Pin 2、 问题场景 当引脚属性&#xff08;Pin type&#xff09;为passive时&#xff0c;原理图编译的默认规则是不会去检查它们是否有连接的。在实际设计过程中&#xff0c;经常会有导线虚连&#xff0c;漏连的事…

24长三角B题1-5问完整代码+15页保姆级思路已更新

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

添加屏幕照片太大了怎么缩小?改变图片大小这几个方法够了

现在我们经常使用手机、平板电脑和相机拍摄照片&#xff0c;然而&#xff0c;有时候我们可能会遇到一个常见的问题就是照片的尺寸太大&#xff0c;难以在特定场合或平台上使用&#xff0c;其实不用担心&#xff0c;本教程将向大家介绍几个如何简单地调整图片大小的方法&#xf…

06_机器学习算法_朴素贝叶斯

1. 朴素贝叶斯的介绍与应用 1.1 朴素贝叶斯的介绍 朴素贝叶斯算法(Naive Bayes, NB)是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类方法。由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数学基础,以及稳定的分类效率。NB模型所需估计的…