0%

freeswitch常用命令

Linux环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 启动
freeswitch

# 启动并后台运行
freeswitch -nc

# 进入客户端
fs_cli

# 退出客户端:
/exit, /bye, /quit Ctrl+D

# 停止:
freeswitch -stop

# 查看freeswitch的端口情况:
netstat -anp|grep freeswitch

# 查看当前注册的用户数量:
sofia status profile internal

# 查看坐席是否注册 (1001为分机号)
sofia status profile internal reg 1001

# 使用fs_cli进行呼叫,其中&echo会把听到的声音返回给发出者:
originate user/1001 &echo


查询网关状态: sofia status profile local
阅读全文 »

使用场景

web页面的查询功能太复杂,pageHelper自动生成的count语句相当于在查询语句外包一层count,查询速度比较慢。需要优化count语句,所以才想起来自定义count语句。

版本要求

5.0.4版本及以上

1
2
3
4
5
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.4</version>
</dependency>

使用方式

原有的代码不需要动,只需要在mybatis的xml文件里添加一个count查询
这里注意以下三点即可:

  1. id和对应的查询语句保持一致,并且以 _COUNT 结尾
  2. 入参和对应的查询语句保持一致
  3. 出参为 resultType=”Long”

查询语句

1
2
3
<select id="searchAllCondition" parameterType="com.demo.MyForm" resultMap="SearchResultMap">
select name,age,sex from student
</select>

count语句

1
2
3
<select id="searchAllCondition_COUNT" parameterType="com.demo.MyForm" resultType="Long">
select count(1) from student
</select>

意以上demo两个语句的区别

  1. count语句的id和查询语句的id
  2. count语句的parameterType和查询语句的parameterType
  3. count语句的出参一定是resultType=”Long”

官方文档

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Changelog.md#504%E2%80%942017-08-01

配置文件案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<ehcache>
<!--
磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
path:指定在硬盘上存储对象的路径
-->
<diskStore path="java.io.tmpdir" />

<!--
defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
eternal:代表对象是否永不过期
timeToIdleSeconds:最大的发呆时间
timeToLiveSeconds:最大的存活时间
overflowToDisk:是否允许对象被写入到磁盘
-->
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />

<!--
cache:为指定名称的对象进行缓存的特殊配置
name:指定对象的完整名
-->
<cache name="com.zbaccp.entity.Person" maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" />


</ehcache>

属性详解

diskStore :指定数据(.data and .index)存储位置,可指定磁盘中的文件夹位置
defaultCache : 默认的管理策略

一、以下属性是必须的:
  name: Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。
  maxElementsInMemory:在内存中缓存的element的最大数目。
  maxElementsOnDisk:在磁盘上缓存的element的最大数目,默认值为0,表示不限制。
  eternal:设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。
  overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。

二、以下属性是可选的:
  timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。
  timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。
  diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
  diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。
  diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。
  memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。

三、缓存的3 种清空策略 :
  FIFO ,first in first out (先进先出).
  LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
  LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

需求

需要根据中文生成拼音码首拼

FUNCTION firstPinyin

1
2
3
4
5
6
7
8
9
10
CREATE FUNCTION `firstPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE V_RETURN VARCHAR(255);
SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),
0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
RETURN V_RETURN;
END

FUNCTION pinyin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE V_COMPARE VARCHAR(255);
DECLARE V_RETURN VARCHAR(255);
DECLARE I INT;
SET I = 1;
SET V_RETURN = '';
while I < LENGTH(P_NAME) do
SET V_COMPARE = SUBSTR(P_NAME, I, 1);
IF (V_COMPARE != '' and V_COMPARE != '(' and V_COMPARE != ')' and V_COMPARE != ',' and V_COMPARE != '、'and V_COMPARE != '?' and V_COMPARE != '(' and V_COMPARE != ')' and V_COMPARE != '?') THEN
#SET V_RETURN = CONCAT(V_RETURN, ',', V_COMPARE);
SET V_RETURN = CONCAT(V_RETURN, firstPinyin(V_COMPARE));
#SET V_RETURN = fristPinyin(V_COMPARE);
END IF;
SET I = I + 1;
end while;
IF (ISNULL(V_RETURN) or V_RETURN = '') THEN
SET V_RETURN = P_NAME;
END IF;
RETURN V_RETURN;
END

使用

1
select pinyin("青霉素") from dual

image-20210706140236991