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的能力边界。
性能和稳定性需要进一步的压测。
空空如常
求真得真
freeswitch使用hiredis的limit功能的更多相关文章
- oracle数据库不支持mysql中limit功能
oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. (1)使查询结果最多返回前10行 ...
- oracle实现"limit"功能
转载于http://blog.sina.com.cn/s/blog_67e2758d0100s3oc.html oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结 ...
- Oracle - 实现MySQL的limit功能
MySQL的limit功能是获取指定行数的数据,Oracle没有这个limit,但是有其它方法. oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,r ...
- oracle实现分页功能 limit功能例子
oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. 记录两种常用方法: (1)使查询 ...
- Hibernate 限制查询数目,使用limit功能
在hql语句中,不能使用limit来限制显示的条数. 如果要限制查询的数目,要使用setMaxResults(e)方法来解决. query.setFirstResult(e); //e是int值,要 ...
- dede channel 增加limit(属性)功能
dede channel 标签添加 limit(属性)功能 在用dede建站的时候,往往会需要用到一些需要自定义的普通需求,今天在这里介绍channel的limit功能,有时候我们需要调用中间部分数据 ...
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...
- PHPCMS二次开发——对栏目可用 limit 限定获取
为了实现类似用limit调用栏目,故自定义了mylimit(这里不能用limit,因为系统在解析的时候会覆盖,所以自定义的limit就起不到作用) 参数,例如: {pc:content action ...
- Oracle分页(limit方式的运用)
select * from a_matrix_navigation_map where rowid not in(select rowid from a_matrix_navigation_map w ...
- Data Base 常用数据库之top/limit/rownum用法
常用数据库之top/limit/rownum用法 一.常用数据库: sql server: select top 10 from users where status=1 mysql: select ...
随机推荐
- Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge
前言 在拉取远程代码时,出现 Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge ...
- HIVE带中括号的列名取数
某次取数,某表中有奇怪的字段名:pointchange_ygz_[yyyy],带了个中插号,用简单查询出错 select pointchange_ygz_[yyyy] as p from t 出错信息 ...
- 英语面试-Behavioral Question - first part
前言 希望我总结的行为面试问题和答案能够给大家帮助. 学习方法:每个问题都有三部分组成. 第一部分是语料积累,这里是根据视频中的内容总结而来: 第二部分是中文描述,这里主要根据我自己的经历结合问题做出 ...
- 《机器人SLAM导航核心技术与实战》第1季:第0章_SLAM发展综述
<机器人SLAM导航核心技术与实战>第1季:第0章_SLAM发展综述 视频讲解 [第1季]0.第0章_SLAM发展综述-视频讲解 [第1季]0.1.第0章_SLAM发展综述-梳理定位导航技 ...
- 跨网段和局域网的SQL SERVER发布订阅配置图解和常见问题
非常详细,傻瓜式依葫芦画瓢即可. 特别提示:订阅机器上的防火墙以及发布机器远程登录订阅机的问题 通过非命令行方式配置同步订阅 (1)实验环境说明 (2)实验前准备 (3)订阅设置 (4)测试同步订阅 ...
- D常用快捷键大全(转)
Ctrl+PageUp将光标移至本屏的第一行,屏幕不滚动.Ctrl+PageDown将光标移至本屏的最后一行,屏幕不滚动.Ctrl+↓向下滚动屏幕,光标跟随滚动不出本屏.Ctrl+↑向上滚动屏幕,光标 ...
- vue2&vue3&小程序简介
Vue2.Vue3.小程序页面生命周期详解 本篇将对比 Vue2.Vue3 以及小程序页面/组件的生命周期,简单梳理各自特点.差异.新增优化点. Vue2 生命周期 beforeCreate → cr ...
- centos 7.9下载地址
http://isoredirect.centos.org/centos/7/isos/x86_64/ In order to conserve the limited bandwidth avail ...
- windows系统如何开启远程连接
一.RDP远程桌面介绍 RDP远程桌面即远程桌面系统(Remote Desktop Protocol),是内置于windows系统的网络通信协议.通过RDP,用户可以远程登录到运行windows系统的 ...
- 结点的"最早开始和最晚开始和最早完成和最晚完成"
最早:方块表示 最晚:三角形表示 最早开始:2 最晚开始:15-5=10 最早完成:2+5=7 最晚完成:15 案例1 案例2