Redis 源码安装和入门介绍

news2024/9/21 18:54:22

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.coloradmin.cn/o/1666389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗图像处理2023年CVPR:Label-Free Liver Tumor Segmentation-无标签肝肿瘤分割

目录 一、摘要 二、介绍 三、相关工作 四、网络框架 1.位置选择 2.纹理处理 3.形状生成 4.后处理 5.参数设计 五、实验 1.数据集: 2.评价指标: 3.实现: 4.结果: 六、结论 一、摘要 通过在CT扫描中使用合成肿瘤&am…

秋招算法刷题10(栈和队列)

0509 232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop…

【计算机网络】计算机网络概述、计算机网络性能指标 习题1

0 1. 计算机网络可被理解为( )。 A.执行计算机数据处理的软件模块 B. 由自治的计算机互连起来的集合体 C.多个处理器通过共享内存实现的紧耦合系统 D. 用于共同完成一项任务的分布式系统 0 2.计算机网络最基本的功能是( )。 A.数据通信 B. 资源共享 C. 分布式处理 D. 信息综合…

关于一致性,你该知道的事儿(上)

关于一致性&#xff0c;你该知道的事儿&#xff08;上&#xff09; 前言一、缓存一致性二、内存模型一致性三、事务一致性四、分布式事务一致性4.1 分布式系统的一些挑战4.2 关于副本的一些概念4.3 分布式事务之共识问题4. 3.1 PC(two-phase commit, 2PC)4.3.2 Raft 三、后记参…

[240512] x-cmd 发布 v0.3.6: (se,wkp,ddgo...)x( kimi,gemini,gpt...)

目录 x-cmd 发布 v0.3.6新增了 jina 模块新增了 ddgo 模块新增了 se 模块wkp 模块新增了 writer 模块cosmo 模块 x-cmd 发布 v0.3.6 本次版本的最新引入的功能都是目的为了进一步探索 LLM 的使用。 本版本的改进分为两类&#xff1a;资讯类模块&#xff08;Wikipedia&#xf…

现代制造之Solidworks三维建模篇

现代制造 有现代技术支撑的制造业&#xff0c;即无论是制造还是服务行业&#xff0c;添了现代两个字不过是因为有了现代科学技术的支撑&#xff0c;如发达的通信方式&#xff0c;不断发展的互联网&#xff0c;信息化程度加强了&#xff0c;因此可以为这两个行业增加了不少优势…

【matlab基础知识代码】(十八)无约束最优化问题

min下面的x称为优化向量或者是决策变量 匿名函数法 >> f(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); x0[0; 0]; [x,b,c,d]fminsearch(f,x0), x 0.6111 -0.3056 b -0.6414 c 1 d 包含以下字段的 struct: iterations: 72 funcCount: 137 algor…

【JavaEE 初阶(五)】文件操作和IO

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多文件操作 目录 1.前言2.认识文件3.文件操作3.1File 属性3.2构造方法3.3File类方法 4.文件内容操作4.1R…

python内置类memoryview()详解

memoryview() Python 的一个内置class&#xff0c;可直接使用。它返回给定参数的“内存视图”对象。内存视图对象是一个对支持缓冲区协议&#xff08;如 bytes 或 bytearray&#xff09;的数据的“窗口”或“视图”&#xff0c;它允许你在不复制数据的情况下操作内存中的数据。…

【机器学习】 技术栈和开发环境搭建

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 博客目录 技术栈编程语言库框架编辑器项目IDE …

数据分析需要注意哪些法律法规

数据分析 前言一、数据处理过程二、数据收集阶段的法律规则数据收集应具备合法、正当、透明原则数据收集应坚持最小必要原则数据收集应遵守知情-同意规则数据收集应遵守目的明确性要求 三、数据储存的法律规则四、数据使用与处理的阶段的法律规则数据安全保护义务按照数据分级分…

Linux:文件IO

Linux&#xff1a;文件IO C语言 文件IOfopen Linux 文件IOopen接口close接口write接口read接口 内存文件管理struct filestruct files_struct文件描述符 fd 缓冲区 C语言 文件IO 在正式讲解Linux中是如何对文件进行IO前&#xff0c;我们先简单回顾以下C语言中&#xff0c;是如…

【牛客】SQL206 获取每个部门中当前员工薪水最高的相关信息

1、描述 有一个员工表dept_emp简况如下&#xff1a; 有一个薪水表salaries简况如下&#xff1a; 获取每个部门中当前员工薪水最高的相关信息&#xff0c;给出dept_no, emp_no以及其对应的salary&#xff0c;按照部门编号dept_no升序排列&#xff0c;以上例子输出如下: 2、题目…

项目1:STM32+DHT11+FreeRTOS+emwin+LCD

第一部分&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;************ 【屏幕显示DHT11数据】 面向对象的思想编写硬件驱动程序&#xff0c;DHT11采集环境中的温湿度数据。使用FreeRTOS提供的任务间通信、同步、互斥&#xff0c;将DHT…

【Linux】AlmaLinux 9.4版本发布

AlmaLinux 9.4 正式版发布&#xff0c;该版本基于 Redhat Enterprise 9.4&#xff0c;内核版本号&#xff1a; 5.14.0-427.13.1.el9_4.x86_64 相对于Rocky Linux&#xff0c; AlmaLinux更加的稳定&#xff0c;生产环境建议使用AlmaLinux来替代CentOS 7.x AlmaLinux 9.4版本系统…

MIPI DPHY HS传输模式SoT和EoT的传输值

目录 1. 高速传输模式的传输序列 2. SoT传输序列 3. EoT传输序列 1. 高速传输模式的传输序列 Mipi DPHY的高速数据传输&#xff08;HST&#xff1a;High Speed Transmission&#xff09;以突发&#xff08;Burst&#xff09;方式发生。 为了帮助接收机同步&#xff1a; (1) …

Python-VBA函数之旅-str函数

目录 一、str函数的常见应用场景 二、str函数使用注意事项 三、如何用好str函数&#xff1f; 1、str函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://myelsa1024.blog.csdn.net/ 一、str函数的常…

Redis-配置文件详解

Redis配置文件详解 units单位 配置大小单位&#xff0c;开头定义基本度量单位&#xff0c;只支持bytes&#xff0c;大小写不敏感。 INCLUDES Redis只有一个配置文件&#xff0c;如果多个人进行开发维护&#xff0c;那么就需要多个这样的配置文件&#xff0c;这时候多个配置 文…

指针(5)加油吧

指针&#xff08;5&#xff09; 拿冒泡排序来举例&#xff1a; 1 .qsort void qsort (void* base,//base指向待排序数组的首元素的指针size_t num,//base指向数组中元素的个数size_t size,//base指向的数组中的一个元素的大小&#xff0c;单位是字节int(*cmp)(const void*,co…

前端工程化,前端监控,工作流,部署,性能

开发规范 创建项目的时候&#xff0c;配置下 ESlint&#xff0c;stylelint&#xff0c; prettier&#xff0c; commitlint 等; ESLint 主要功能&#xff1a; ESLint 是一个静态代码检查工具&#xff0c;用于在 JavaScript 代码中识别和报告模式。它的目标是提供一个插件化的 …