HTable 模块
HTable
模块是一个基于内存的键值对存储模块,用于kamailio的缓存。可以定义多个HTable,也可以从数据库中加载数据。
多节点时,也可以使用DMQ
方式同步数据。
官方文档地址:htable, 本次测试的kamailio版本是:
version: kamailio 5.8.5 (x86_64/linux)
重要参数介绍
htname=>size=number;autoexpire=number;dbtable=string;
- htname: 缓存名称
- size: 缓存大小:2^size, [2, 31]
- autoexpire: 自动过期时间,单位秒
- dbtable: 从数据库中加载数据,默认为空,即不加载数据
- dbmode: 0,不回写数据库;1,当服务停止时,回写数据库,默认0
- initval: 初始化值,如果key不存在,则返回该值,默认是$null
- updateexpire: 是否更新过期时间,默认是1,即当值更新后,这个过期时间也重置。
- dmqreplicate: 如果设置成1,对缓存的任何操作都会通过DMQ进行同步。默认0
- coldelim: 缓存数据分隔符,默认是
,
timer_interval
多长时间检查一次缓存过期数据,默认20秒
enable_dmq
是否开启dmq,默认是0,如果是1,则开启dmq,dmq必须提前加载
dmq_init_sync
如果是1,其他节点启动时,会发出同步请求。
timer_procs
如果设置成1或更大, 这个模块会创建自己的定时进程扫描过期数据。默认是0,使用核心的定时进程扫描过期数据。
重要函数介绍
sht_print()
打印所有的缓存数据到L_ERR日志
sht_rm(htname, itname)
从htname表中删除一个itname数据, 等价于$sht(htname=>itname) = $null
sht_rm_name_re(htable=>regexp)
删除htable表中所有名称匹配regexp的数据
sht_rm_value_re(htable=>regexp)
删除htable表中所有值匹配regexp的数据
sht_rm_name(htable,op,val)
删除htable表中所有名称和val匹配的数据
op:
- re 作为表达式匹配val
- sw 前缀
sht_rm_value(htable,op,val)
删除htable表中所有值匹配regexp的数据,op和上面的一样意思。
sht_setxs(htname, itname, itval, exval)
设置htaname表中itname的数据为itval,并设置itname的过期时间为exval字符串的过期时间
sht_setxi(htname, itname, itval, exval)
设置htaname表中itname的数据为itval,并设置itname的过期时间为exval整形的过期时间
sht_reset(htable)
重置htable表
sht_lock(htable=>key)
加锁htable表的key
sht_unlock(htable=>key)
解锁htable表的key
sht_iterator_start(iname, hname)
迭代器开始
sht_iterator_end(iname)
迭代器结束
sht_iterator_next(iname)
下一个迭代器
额外变量
- $sht(htable=>key) 获取htable表中key的数据,可读和写
- $shtex(htable=>key) 获取htable表中key的过期时间,可读和写
- $shtcn(htable=>exp) 获取htable表中key匹配exp的个数
- $shtcv(htable=>exp) 获取htable表中value匹配exp的个数
- $shtinc(htable=>key) 自增1
- $shtdec(htable=>key) 自减1
- $shtitkey(iname) 当前迭代器的key
- $shtitval(iname) 当前迭代器的value
- $shtrecord(attribute) 获取过期的key或者value,用在event_route[htable:expired:table_name]中
实战
172.16.4.111的配置文件:
|
|
172.16.4.113的配置文件:
|
|
如果同步的113机器上没有a
的表,那么111
机器上同步数据报错:
修改113
上的htable为:
|
|
同步成功: