Redis 源码安装和入门介绍

Linux下的redis源码安装

redis介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets),带有范围查询的 有序集合(sorted sets) , bitmaps, hyperloglogs 和 地理空间(geospatial) 索引。 Redis 内置了 复制(replication), LUA脚本(Lua scripting), LRU驱动事件(LRU eviction), 事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel) 和自动 分区(Cluster)提供高可用性(high availability)
摘自:https://redis.com.cn/

下载源码

redis github: https://github.com/redis/redis
redis源码包:http://download.redis.io/releases/

注1:推荐从redis源码包下载,本篇以redis-7.2.4版本安装为例
注2:为保护redis配置文件不能被用户随便修改,同时避免创建太多用户,选中在root用户下安装

在这里插入图片描述

安装说明

# 下载软件包,解压并移动目标位置
[root@Ali ~]# wget http://download.redis.io/releases/redis-7.2.4.tar.gz
[root@Ali ~]# tar -xzvf redis-7.2.4.tar.gz
[root@Ali ~]# mv redis-7.2.4  /usr/local/redis# 安装依赖
[root@QingYun redis]# sudo yum install build-essential
[root@QingYun redis]# sudo yum install gcc-c++
[root@QingYun redis]# sudo yum install tcl# 编译安装redis
[root@Ali ~]# cd /usr/local/redis/
[root@Ali redis]# make
[root@Ali redis]# make install# 查看redis版本
[root@Ali redis]# redis-server --version
Redis server v=7.2.4 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=610222ebf82018c4# 检查安装正确性(注:可选操作,耗时比较久,生产环境下建议还是要执行的)
[root@Ali redis]# make test

注: 不建议使用‘PREFIX参数指定执行文件的安装位置
原因:假设 使用PREFIX=/usr/local/redis,则编译生产的redis-serverredis-client 等文件会生成到/usr/local/redis/bin/目录下。 但/usr/local/redis/bin/并不在系统默认$PATH环境变量中,这就导致无法执行运行redis的命令,还需要把该路径加到环境变量,反而更麻烦并且也不简洁。

入门介绍

目录结构

/usr/local/redis/目录下的包含了redis的全部源码,以下为目录结构的简单说明

目录/文件说明
depsHiredis 模块(轻量级访问redis的客户端),linenoise模块(命令行编辑辅助,能实现自动补全) ,字典的定义实现,sds的定义实现,redis封装的malloc,Lua等
src核心源码,大多功能都在这块实现,其中Redis自行实现了网络框架在这个目录中(ae_开头的文件),Redis并未使用libevent作为网络模块
tests测试模块,用来测试Redis的代码,大多测试用例和脚本都在这里面
utilsRedis的工具实现
redis.confRedis官方源码默认提供的配置文件
MakefileRedis C语言编译使用的Makefile,当然你也可以使用Cmake进行管理,当然Cmake支持的不是很好

配置文件

在目录/usr/local/redis下有一个redis.conf的配置文件。这里列举下比较重要的配置项

配置项名称配置项值范围说明
daemonizeyes、noyes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行
port指定 Redis 监听端口,默认端口为 6379
bind绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-modeyes 、no保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。
timeout300当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
logleveldebug、verbose、notice、warning日志级别,默认为 notice
databases16设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompressionyes、no指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilenamedump.rdb指定本地数据库文件名,默认值为 dump.rdb
dir指定本地数据库存放目录
requirepass设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭
maxclients0设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
maxmemoryXXX 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。

通常情况下我们都需要把redis当成服务在后台运行,因此这里通常需要改动几个配置项:

  • daemonize设置为yesredis默认在控制台上运行,一旦中断redis-server命令(Ctrl + C)或者退出控制台redis服务会自动关闭。建议改成 yes 启用守护运行方式。
  • protected-mode设置为no,同时也将bind注释:关闭保护模式和允许所有客户端链接,这样redis才能对外提供服务。
  • logfile设置为 log/redis_run.log:使用守护方式运行后,redis默认不会记录日志,建议配置开启日志

启动服务

# 查看redis使用说明
[root@Ali redis]# redis-server --help# 启动redis服务(必须在root用户下)
[root@Ali redis]# redis-server redis.conf 
[root@Ali redis]# cat log/redis_run.log 
25171:C 11 May 2024 00:12:02.692 # 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.
25172:C 11 May 2024 00:12:02.693 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25172:C 11 May 2024 00:12:02.693 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=25172, just started
25172:C 11 May 2024 00:12:02.693 * Configuration loaded
25172:M 11 May 2024 00:12:02.694 * monotonic clock: POSIX clock_gettime
25172:M 11 May 2024 00:12:02.694 * Running mode=standalone, port=6379.
25172:M 11 May 2024 00:12:02.694 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
25172:M 11 May 2024 00:12:02.695 * Server initialized
25172:M 11 May 2024 00:12:02.695 * Loading RDB produced by version 7.2.4
25172:M 11 May 2024 00:12:02.695 * RDB age 17 seconds
25172:M 11 May 2024 00:12:02.695 * RDB memory usage when created 0.87 Mb
25172:M 11 May 2024 00:12:02.695 * Done loading RDB, keys loaded: 1, keys expired: 0.
25172:M 11 May 2024 00:12:02.695 * DB loaded from disk: 0.000 seconds
25172:M 11 May 2024 00:12:02.695 * Ready to accept connections tcp# 查看redis服务(方式1)
[root@Ali redis]# ps -aux | grep redis
root     25172  0.0  0.1 239328  3420 ?        Ssl  00:12   0:00 redis-server 127.0.0.1:6379
root     25183  0.0  0.0 112816   984 pts/2    S+   00:12   0:00 grep --color=auto redis
# 查看redis服务(方式2) 
[root@Ali redis]# netstat -tunple | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      0          12747989   25172/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      0          12747990   25172/redis-server  
[root@Ali redis]# # 使用redis服务(可以在非root用户下使用)
[wengjh@Ali redis]$ redis-cli 
127.0.0.1:6379> get hostname
(nil)
127.0.0.1:6379> set hostname "aliyun"
OK
127.0.0.1:6379> get hostname
"aliyun"# 插入redis 配置
[wengjianhong@Ali redis]$ redis-cli 
127.0.0.1:6379> CONFIG GET daemonize
1) "daemonize"
2) "yes"
127.0.0.1:6379> CONFIG GET logfile
1) "logfile"
2) "log/redis_run.log"
127.0.0.1:6379> CONFIG GET *# 关闭redis服务
127.0.0.1:6379> SHUTDOWN
not connected> 

其他命令

Redis的命令有很多,网上也有很多好的教程,这里没有打算也没有必要一一介绍。以下是几个比较好用的网站

Redis教程:

  • https://redis.io/docs/latest/
  • https://redis.com.cn/tutorial.html

Redis命令参考:

  • http://doc.redisfans.com/
  • https://redis.io/docs/latest/commands/
  • https://redis.com.cn/commands.html

在这里插入图片描述

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

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

相关文章

Leetcode - 周赛397

目录 一,3146. 两个字符串的排列差 二,3147. 从魔法师身上吸取的最大能量 三,3148. 矩阵中的最大得分 四,3149. 找出分数最低的排列 一,3146. 两个字符串的排列差 本题就是求同一个字符在两个字符串中的下标之差的…

Nacos+GateWay 搭建微服务架构

文章目录 1.当前项目架构分析1.请求多个模块的方式1.请求renren-fast模块开发环境生产环境 2.请求sunliving-commodity模块1.使用环境变量资源路径的方式2.开发环境 dev.env.js3.生产环境 prod.env.js 3.文件上传请求 sunliving-service模块1.请求后端接口(开发环境…

基于网络爬虫技术的网络新闻分析(二)

目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势,其市场价值不仅体现在竞赛本身,还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目,包括竞速赛、技巧赛、航拍赛等。每个项目…

ADS使用记录之使用RFPro进行版图联合仿真-加入集总元器件

ADS使用记录之使用RFPro进行版图联合仿真-加入集总元器件 ADS使用记录之使用RFPro进行版图联合仿真中已经简单介绍了使用RFPro对版图就行仿真的方法。但是,如果版图中含有一些非微带的结构,比如说电感、电容、晶体管呢,在此举例解释一下。 …

Java--初识类和对象

前言 本篇讲解Java类和对象的入门版本。 学习目的: 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题,作者决定分多次发布。 面向对象的引入 J…

英飞凌SiC模块为小米电动车提供动力

至2027年之际,SiC功率模块与裸片产品将荣耀登场,助力小米电动汽车新品SU7璀璨问世。英飞凌,这家业界翘楚,将倾其所能,为小米SU7 Max提供两颗HybridPACK Drive G2 CoolSiC 1200 V模块,如同给电动汽车的心脏注…

Linux进程控制——Linux进程程序替换

前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么! 本篇主要内容: 替换原理 替换函数 实现简易shell 我们所创…

2024年最新软件测试面试题必问的1000题!

我了解的测试理论和方法包括以下几个方面: 黑盒测试与白盒测试: 黑盒测试:基于对软件系统外部行为进行测试,独立于内部代码实现细节。黑盒测试关注输入与输出之间的关系以及软件功能是否符合预期。白盒测试:基于对软件…

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明:此刻你我都在努力~ 加油陌生人~ 个人主页: Gu Gu Study ​​ 专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努…

外卖系统拦截器实现(Interceptor)

SpringMVC的拦截器主要是用于拦截控制器方法的执行; 概念:是一种动态拦截方法调用的机制,类似于过滤器。在Spring中动态拦截控制器中方法的执行。 作用:在指定的控制器中调用前后执行预先设定的代码,完成功能增强。 应…

如何查看SNMP设备的OID

什么是OID和MIB OID OID 代表对象标识符。 OID 唯一地标识 MIB 层次结构中的托管对象。 这可以被描述为一棵树,其级别由不同的组织分配。MIB MIB(管理信息基)提供数字化OID到可读文本的映射。 使用MIB Browser扫描OID 我的设备是一台UPS SN…