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-server
、redis-client
等文件会生成到/usr/local/redis/bin/
目录下。 但/usr/local/redis/bin/
并不在系统默认$PATH
环境变量中,这就导致无法执行运行redis的命令,还需要把该路径加到环境变量,反而更麻烦并且也不简洁。
入门介绍
目录结构
/usr/local/redis/
目录下的包含了redis的全部源码,以下为目录结构的简单说明
目录/文件 | 说明 |
---|---|
deps | Hiredis 模块(轻量级访问redis的客户端),linenoise模块(命令行编辑辅助,能实现自动补全) ,字典的定义实现,sds的定义实现,redis封装的malloc,Lua等 |
src | 核心源码,大多功能都在这块实现,其中Redis自行实现了网络框架在这个目录中(ae_开头的文件),Redis并未使用libevent作为网络模块 |
tests | 测试模块,用来测试Redis的代码,大多测试用例和脚本都在这里面 |
utils | Redis的工具实现 |
redis.conf | Redis官方源码默认提供的配置文件 |
Makefile | Redis C语言编译使用的Makefile,当然你也可以使用Cmake进行管理,当然Cmake支持的不是很好 |
配置文件
在目录/usr/local/redis
下有一个redis.conf
的配置文件。这里列举下比较重要的配置项
配置项名称 | 配置项值范围 | 说明 |
---|---|---|
daemonize | yes、no | yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行 |
port | 指定 Redis 监听端口,默认端口为 6379 | |
bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。 | |
protected-mode | yes 、no | 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。 |
timeout | 300 | 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能 |
loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
databases | 16 | 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到 |
rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。 |
dbfilename | dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
dir | 指定本地数据库存放目录 | |
requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭 | |
maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。 |
maxmemory | XXX | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。 |
通常情况下我们都需要把redis
当成服务在后台运行,因此这里通常需要改动几个配置项:
daemonize
设置为yes
:redis
默认在控制台上运行,一旦中断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