当前位置: 首页 > java >正文

freeswitch使用hiredis的limit功能

概述

freeswitch是一款简单好用的VOIP开源软交换平台。

之前写过一篇关于limit的文章“freeswwitch通过limit限制cps”,主要是介绍了limit的hash后端模式限制cps。

本文档主要介绍limit的hiredis后端模式。

hash后端模式和hiredis的后端模式,二者的功能是一致的,主要区别在于hash更快,hiredis更持久更容易集群化。

环境

CentOS 7.9

freeswitch 1.10.7

模块支持

要使用limit的hiredis模式,首先要启动mod_hiredis模块。

编译安装mod_hiredis模块需要先安装hiredis依赖库。

git clone https://github.com/redis/hiredis.git

cd hiredis

make

make install

cp -f /usr/local/lib/libhiredis.so /usr/lib64/libhiredis.so

cp -f /usr/local/lib/pkgconfig/hiredis.pc /usr/lib64/pkgconfig/hiredis.pc

在freeswitch源码根目录下执行配置命令,重新生成mod_hiredis目录下的makefile。

cd freeswitch-1.10.7

./bootstrap.sh -j

./configure

cd src/mod/applications/mod_hiredis/

make

make install

查看/usr/local/freeswitch/mod目录下的mod_hiredis模块。

-rwxr-xr-x. 1 root root 111184 Apr 11 09:37 mod_hiredis.so

-rwxr-xr-x. 1 root root 1320 Apr 11 09:37 mod_hiredis.la

配置

配置modules.conf.xml文件。

<load module="mod_hiredis"/>

配置hiredis.conf.xml文件。

<configuration name="hiredis.conf" description="mod_hiredis">

<profiles>

<profile name="default">

<connections>

<connection name="primary">

<param name="hostname" value="10.55.55.136"/>

<param name="port" value="7777"/>

<param name="timeout_ms" value="500"/>

</connection>

</connections>

<params>

<param name="ignore-connect-fail" value="true"/>

</params>

</profile>

</profiles>

</configuration>

启动fs,查看mod_hiredis模块正常启动。

配置dialplan,增加limit。

<action application="limit" data="hiredis default CAP:all 8192 !EXCHANGE_ROUTING_ERROR" />

<action application="limit" data="hiredis default CAP:SIPP:${appid}:${sippNum} 8192 !EXCHANGE_ROUTING_ERROR"/>

测试

fs命令测试。

freeswitch@as137> limit_usage hiredis default test1

2025-04-22 17:38:51.159794 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]

2025-04-22 17:38:51.159794 [INFO] hiredis_profile.c:86 hiredis: recycled from pool[10.55.55.136, 7777]

2025-04-22 17:38:51.159794 [DEBUG] hiredis_profile.c:206 hiredis: get test1

1

2025-04-22 17:38:51.159794 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]

发起呼叫测试。

EXECUTE sofia/external/10011@10.55.55.138 limit(hiredis default CAP:all 8192 !EXCHANGE_ROUTING_ERROR)

2025-04-22 17:47:54.879729 [DEBUG] switch_limit.c:126 incr called: default_CAP:all max:8192, interval:0

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]

2025-04-22 17:47:54.879729 [INFO] hiredis_profile.c:86 hiredis: recycled from pool[10.55.55.136, 7777]

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:206 hiredis: incr CAP:all

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]

EXECUTE sofia/external/10011@10.55.55.138 limit(hiredis default CAP:SIPP:e5c60abcefd840be8dff4f9a94cb46ec:10011 8192 !EXCHANGE_ROUTING_ERROR)

2025-04-22 17:47:54.879729 [DEBUG] switch_limit.c:126 incr called: default_CAP:SIPP:e5c60abcefd840be8dff4f9a94cb46ec:10011 max:8192, interval:0

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]

2025-04-22 17:47:54.879729 [INFO] hiredis_profile.c:86 hiredis: recycled from pool[10.55.55.136, 7777]

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:206 hiredis: incr CAP:SIPP:e5c60abcefd840be8dff4f9a94cb46ec:10011

2025-04-22 17:47:54.879729 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [INFO] hiredis_profile.c:86 hiredis: recycled from pool[10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:206 hiredis: decr CAP:SIPP:e5c60abcefd840be8dff4f9a94cb46ec:10011

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:61 hiredis: waiting for [10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [INFO] hiredis_profile.c:86 hiredis: recycled from pool[10.55.55.136, 7777]

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:206 hiredis: decr CAP:all

2025-04-22 17:48:04.819741 [DEBUG] hiredis_profile.c:52 hiredis: release back to pool [10.55.55.136, 7777]

总结

limit的hiredis模式受限于hiredis只能连接单体redis,但是最近测试了redis代理(predixy)可以直接转发到redis cluster。大大扩展了hiredis的能力边界。

性能和稳定性需要进一步的压测。

空空如常

求真得真

http://www.xdnf.cn/news/13921.html

相关文章:

  • <8>-MySQL复合查询
  • java发送excel附件的邮件
  • 计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)
  • 【白雪讲堂】当前GEO是否能追溯数据源?
  • 6.13 note | 二分查找
  • 基于大模型预测单纯性孔源性视网膜脱离的技术方案
  • 轻量级密码算法PRESENT的C语言实现(无第三方库)
  • 基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
  • C语言多进程TCP服务器与客户端
  • 【论文阅读笔记】CVPR2025 | 2D高斯溅射的几何-光照解耦:Ref-GS实现开放世界级真实渲染
  • Java 实现 Excel 转化为 PDF
  • OceanBase (DBA)一面面经
  • DMC-E 系列总线控制卡----雷赛板卡介绍(六)
  • 使用 ollama 在 mac 本地部署一个 qwen3:8b 模型
  • 26考研 | 王道 | 计算机组成原理 | 六、总线
  • 传统企业数字化转型:以定制开发开源 AI 智能名片 S2B2C 商城小程序源码为核心的销售环节突破
  • Python爬虫实战:研究gearman相关技术
  • 计算机视觉与深度学习 | 低照度图像增强算法综述(开源链接,原理,公式,代码)
  • Spring Boot常用依赖大全:从入门到精通
  • Ecc option开启后报错解决(植入实际程序后)
  • 【递归、搜索与回溯】FloodFill算法(二)
  • 泰国零售巨头 CJ Express 借助 SAP 内存数据库实现高效数据管理
  • 从SQL Server到分布式大数据平台:重构企业数据架构
  • navicat可视化页面直接修改数据库密码——mysql、postgresql、mangodb等
  • 什么是云原生?什么样的框架符合云原生?
  • 嵌入式PADS原理图与元件符号绘制实现
  • unity学习摘要
  • Java的Arrays.sort():排序算法与优化分析
  • python+django/flask厨房达人美食分享系统
  • 电流环执行周期与电流环带宽区别