概述

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功能的更多相关文章

  1. oracle数据库不支持mysql中limit功能

    oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. (1)使查询结果最多返回前10行 ...

  2. oracle实现"limit"功能

    转载于http://blog.sina.com.cn/s/blog_67e2758d0100s3oc.html oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结 ...

  3. Oracle - 实现MySQL的limit功能

    MySQL的limit功能是获取指定行数的数据,Oracle没有这个limit,但是有其它方法. oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,r ...

  4. oracle实现分页功能 limit功能例子

    oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. 记录两种常用方法: (1)使查询 ...

  5. Hibernate 限制查询数目,使用limit功能

    在hql语句中,不能使用limit来限制显示的条数. 如果要限制查询的数目,要使用setMaxResults(e)方法来解决. query.setFirstResult(e);  //e是int值,要 ...

  6. dede channel 增加limit(属性)功能

    dede channel 标签添加 limit(属性)功能 在用dede建站的时候,往往会需要用到一些需要自定义的普通需求,今天在这里介绍channel的limit功能,有时候我们需要调用中间部分数据 ...

  7. mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)

    一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...

  8. PHPCMS二次开发——对栏目可用 limit 限定获取

    为了实现类似用limit调用栏目,故自定义了mylimit(这里不能用limit,因为系统在解析的时候会覆盖,所以自定义的limit就起不到作用) 参数,例如: {pc:content  action ...

  9. Oracle分页(limit方式的运用)

    select * from a_matrix_navigation_map where rowid not in(select rowid from a_matrix_navigation_map w ...

  10. Data Base 常用数据库之top/limit/rownum用法

    常用数据库之top/limit/rownum用法 一.常用数据库: sql server: select top 10 from users where status=1 mysql: select ...

随机推荐

  1. 超值分享:ASN.1格式解析源码(未使用openssl),有助于分析证书、私钥等文件

    源码下载地址  --下载服务由我的HttpServer服务器提供 一款简单的ASN.1格式解析工具,可将ASN.1格式输出,是你分析证书.私钥等文件的必备良器,比如查看公钥大数.私钥大数.加密算法.H ...

  2. 四大AI编程工具组合测评

     在当今数字化浪潮中,AI 编程工具如雨后春笋般涌现,极大地提升了编程效率与体验.本文将详细剖析四类 AI 编程工具组合,从开发工具.大模型.插件搭配,到编程能力.费用体系及综合评价,为开发者提供全面 ...

  3. 【Linux】3.2 vi和vim编辑器

    vi 和 vim 三种模式的相互转化图 vim 和 vi 的快捷键键盘一览图 vi和vim编辑器 1. vi和vim的基本介绍 所有Linux系统都会内置vi文本编辑器 vim是vi的升级版,可以主动 ...

  4. 【Docker】本地镜像发布到阿里云

    本地镜像发布到阿里云 本地镜像发布到阿里云流程 镜像的生成方法 1. 前面的DockerFile 2. 从容器创建一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSI ...

  5. MCP (Model Context Protocol)初体验:企业数据与大模型融合初探

    简介 模型上下文协议(Model Context Protocol,简称MCP)是一种创新的开放标准协议,旨在解决大语言模型(LLM)与外部数据和工具之间的连接问题.它为AI应用提供了一种统一.标准化 ...

  6. mybatis插入数据返回id的实现方式

    一. useGeneratedKeys="true" <insert id="saveUser" parameterType="com.apcs ...

  7. 🎀gh-ost工具介绍及使用

    简介 gh-ost 是一款由GitHub开发的在线DDL(Online Data Definition Language)变更工具,专门用于MySQL数据库.它允许在不锁定表的情况下执行数据库模式变更 ...

  8. python批量下载网易云音乐文件到本地

    现在听歌大多数只支持在线听,下载要钱,没网络就白搭了.好吧,用技术手段解决免费.下载.批量等一些列问题 整个脚本的逻辑和流程是,把歌曲地址都存在一个txt中,然后循环每次取一条链接,分析链接对应歌曲的 ...

  9. 题解:AT_abc369_d [ABC369D] Bonus EXP

    题目大意: 有 nnn 个怪物,每个怪物有一个战力值 aia_iai​ ,你可以选择击败他或放走他,放走他没有经验值,击败他可以获得 aia_iai​ 的经验值,如果击败的数量是偶数,则还可以获得 a ...

  10. github无法加载图片的解决办法--转载

    windows下hosts文件提示不能修改的,可以剪切到其他地方修改后再剪切回去. https://blog.csdn.net/u011583927/article/details/104384169