(二十五)Redis 扩展模块 -- RediSearch 的安装方法
·
摘要
- 本文介绍 Redis 扩展模块 – RediSearch 的安装方法
- 本文基于
redis-7.4.7,springboot-3.5.8 - 操作系统:
Amazon Linux 2023(内核 6.1),Rocky Linux release 9.4 (Blue Onyx) - Redis官网:https://redis.io/
- Redis 命令文档:https://redis.io/docs/latest/commands/
RediSearch 简介
- RediSearch 是 Redis 官方推出的
全文搜索与二级索引模块,用于在 Redis 之上提供类似搜索引擎的能力,解决“只能按 key 查、无法高效按字段查询”的问题。它是 Redis Stack 的核心组件之一,常用于搜索、过滤、排序和聚合场景。仅支持对 Hash 和 RedisJSON 类型进行索引。 - 该模块以
Redis Module方式加载,可无缝集成到现有 Redis 实例中。 - Redis8+,RediSearch 已经内置在 Redis 中,可以在安装redis同时安装全部 Stack 模块。
- RediSearch 通过
索引结构+查询语言,提供:- 全文搜索(Text Search)
- 二级索引(按字段查询)
- 多条件过滤 / 排序
- 聚合分析(GROUP BY、COUNT、SUM 等)
- 性能与设计特点
- 索引在内存中,查询延迟低(毫秒级)
- 写入时同步更新索引(写入成本略高)
- 适合 读多写少 / 查询复杂 的业务
- 非事务型搜索引擎(不替代 ES,而是互补)
- 与原生 Redis 的对比
| 维度 | Redis 原生 | RediSearch |
|---|---|---|
| 查询方式 | key 精确 | 多字段查询 |
| 全文搜索 | 不支持 | 支持 |
| 范围查询 | 有限 | 强 |
| 聚合统计 | 基本没有 | 类 SQL |
| 性能 | 极快 | 近实时,内存换性能 |
RediSearch vs Elasticsearch
| 对比点 | RediSearch | Elasticsearch |
|---|---|---|
| 部署复杂度 | 低 | 高 |
| 延迟 | 极低 | 较高 |
| 数据规模 | 中小规模 | 超大规模 |
| 实时性 | 强 | 近实时 |
| 场景 | 业务内搜索 | 搜索平台 |
安装 RediSearch
-
最简单的方式就是从Redis Cloud的
Download Center中进行下载,其提供了所有Redis模块编译后的.so文件,可以优先进行尝试,但是并不保证一定兼容,所以最稳妥的方式是通过源码自己编译。
-
源码编译
安装时需要科学上网,主要是安装依赖时需要从海外网下载,如果要部署在国内服务器,可能会连接失败。
可以在海外的相同配置的服务器上进行编译,之后将编译好的redisearch.so上传到国内服务器即可。
- 安装依赖
sudo dnf install -y \
gcc \
gcc-c++ \
make \
cmake \
autoconf \
automake \
libtool \
pkgconfig \
openssl-devel \
libstdc++ \
libstdc++-devel
- RediSearch 最新版本 依赖 CMake 3.25+,dnf源中的版本较低,所以这里需要手动安装
CMAKE_VERSION=3.25.1
cd /usr/local/src
wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz
tar -xf cmake-${CMAKE_VERSION}.tar.gz
cd cmake-${CMAKE_VERSION}
./bootstrap --prefix=/usr/local
make -j$(nproc)
sudo make install
# 验证版本 /usr/local/bin/cmake
/usr/local/bin/cmake --version
- 编译RediSearch
mkdir -p /usr/local/soft/modules/
cd /usr/local/soft/modules
# clone 代码,这里 --recursive 是为了拉取子模块
git clone --recursive https://github.com/RediSearch/RediSearch.git
cd RediSearch
# 推荐切换到稳定的release版本
git checkout v2.10.25
# 更新子模块,非必须,如果上面 clone 时没有加上 --recursive ,这个步骤就不能省略
git submodule update --init --recursive
# 创建 build_dir 目录,编译失败要先删除该目录在重新创建
mkdir build_dir && cd build_dir
# 生成 Makefile
/usr/local/bin/cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++
# 编译 RediSearch
make -j$(nproc)
# 编译过程会报错,同样在 Rocky9 上也会遇到这个问题
[100%] Linking CXX shared library redisearch.so
/usr/bin/ld: cannot find -lstdc++: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/redisearch.dir/build.make:557: redisearch.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:2958: CMakeFiles/redisearch.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
- 编译错误原因分析
RediSearch 2.10.x 在链接 redisearch.so 时 强制 使用 -static-libstdc++,而 libstdc++.a 静态文件不存在,导致编译失败
- 解决方法是安装静态库
sudo dnf install -y libstdc++-static
# 验证静态文件是否存在
ls /usr/lib/gcc/x86_64-amazon-linux/*/libstdc++.a
# 输出
/usr/lib/gcc/x86_64-amazon-linux/11/libstdc++.a
- 安装后重新编译RediSearch
cd /usr/local/soft/modules
# 删除 build_dir 目录
rm -rf build_dir
# 创建 build_dir 目录,编译失败要先删除该目录再重新创建
mkdir build_dir && cd build_dir
# 生成 Makefile
/usr/local/bin/cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++
# 编译 RediSearch,如果没有错误,则说明编译成功,输出: build_dir/redisearch.so
make -j$(nproc)
Redis 启用模块
- 将生成的
redisearch.so拷贝到 redis 的 modules 目录下(非必须),目录不存在则创建
# 注意 .so 文件需要包含可执行权限
cp build_dir/redisearch.so /usr/local/soft/redis-7.4.7/modules/redisearch.so
- 本文采用
loadmodule加载模块
# 将 redisearch.so 添加到 redis.conf 中,需要重启 redis
loadmodule /usr/local/soft/redis-7.4.7/modules/redisearch.so
# 启动redis
redis-server redis.conf
# 登录测试
redis-cli --user admin --pass 123456
# 查看模块
127.0.0.1:6379> MODULE LIST
# 输出
1) 1) "name"
2) "ReJSON"
3) "ver"
4) (integer) 20816
5) "path"
6) "/usr/local/soft/redis-7.4.7/modules/rejson.so"
7) "args"
8) (empty array)
2) 1) "name"
2) "bf"
3) "ver"
4) (integer) 20817
5) "path"
6) "/usr/local/soft/redis-7.4.7/modules/redisbloom.so"
7) "args"
8) (empty array)
3) 1) "name"
2) "search"
3) "ver"
4) (integer) 21025
5) "path"
6) "/usr/local/soft/redis-7.4.7/modules/redisearch.so"
7) "args"
8) (empty array)
Rocky9 编译安装 RediSearch
系统版本:
Rocky Linux release 9.4 (Blue Onyx)
- 安装依赖
sudo dnf install -y \
gcc \
gcc-c++ \
make \
cmake \
autoconf \
automake \
libtool \
pkgconfig \
openssl-devel \
libstdc++ \
libstdc++-devel
- 启用 CRB
在 Rocky Linux 9 中,
libstdc++-static不在默认仓库里,它位于 CRB(CodeReady Builder)仓库,默认是 关闭的,所以我们需要先启用它
# 如果你系统里没有 config-manager,需要先先装
sudo dnf install -y dnf-plugins-core
# 启用 CRB
sudo dnf config-manager --set-enabled crb
# 刷新缓存
sudo dnf makecache
- 安装静态库,解决
/usr/bin/ld: cannot find -lstdc++: No such file or directory的问题
sudo dnf install -y libstdc++-static
# 验证静态文件是否存在
ls /usr/lib/gcc/x86_64-redhat-linux/*/libstdc++.a
- 编译RediSearch
mkdir -p /usr/local/soft/modules/
cd /usr/local/soft/modules
# clone 代码,这里 --recursive 是为了拉取子模块
git clone --recursive https://github.com/RediSearch/RediSearch.git
cd RediSearch
# 推荐切换到稳定的release版本
git checkout v2.10.25
# 更新子模块,非必须,如果上面 clone 时没有加上 --recursive ,这个步骤就不能省略
git submodule update --init --recursive
# 创建 build_dir 目录,编译失败要先删除该目录再重新创建
mkdir build_dir && cd build_dir
# 生成 Makefile
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++
# 编译 RediSearch,如果没有错误,则说明编译成功,输出: build_dir/redisearch.so
make -j$(nproc)
更多推荐




所有评论(0)