10.30
<h2>编写存过程实现循环删除功能</h2>
<pre><code>drop procedure if exists test_loop;
delimiter //
create procedure test_loop()
begin
declare i int default 1;
while i<30
do
delete FROM lite_admin_logs where id < 2000000 limit 10000;
set i=i+1;
end while;
commit;
end //
delimiter ;
call test_loop();</code></pre>
<h2>goredis 连接池配置解释</h2>
<h4>IdleTimeout</h4>
<p>空闲连接超时时间(在 get 的时候维护,每次 get 会把超时的去掉)</p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/424247160099f53bddb65158ba450ddb?showdoc=.jpg" alt="" /></p>
<p>但应该设置比redis服务器超时时间短。否则服务端超时了,客户端保持着连接也没用。</p>
<h4>MaxIdle</h4>
<p>最大空闲连接数,即会有这么多个连接提前等待着,但过了超时时间 IdleTimeout 也会关闭
最大空闲连接数的维护是在 close(归还) 的时候,大于 MaxIdle 的直接关闭
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c121892feba2d7356216fe14e5431315?showdoc=.jpg" alt="" /></p>
<h4>MaxActive</h4>
<p>最大连接数,即最多的tcp连接数,超过连接数的处理一般由 wait 参数决定
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/1ddfcadacb654f834053d326ec62b89f?showdoc=.jpg" alt="" />
不要超过操作系统文件句柄个数</p>
<h4>Wait</h4>
<p>超过 MaxActive 时,下一个请求是否等待</p>
<ol>
<li>
<p>如果不等待,则直接报错
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f829335d80bc0847f6d95ab0170a0793?showdoc=.jpg" alt="" /></p>
</li>
<li>如果等待,则使用 chanel 去制造等待的效果,暂时没有看到最大等待时间??
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/06295a75dd017693f47dda8f54c39e22?showdoc=.jpg" alt="" /></li>
</ol>
<h4>Dial</h4>
<p>redis.Dial这个方法,可以传入三个超时时间,DialConnectTimeout, DialReadTimeout, DialWriteTimeout</p>
<p>分别用于某次连接的最大连接时间,最大读取时间,最大写入时间,
不设置的话默认为 0, 会一直等待</p>
<p>这三个参数作为参数调用 net 包,实际上是 tcp 层面上实现的,不是应用层面上实现的</p>
<h4>长连心跳检测</h4>
<p>该框架暂时没有看到应用层面上主动检测长连心跳的办法
应该只是依赖于 tcp 本身的 keep aliive 检测</p>
<h4>对端关闭问题</h4>
<p>比如运行中 redis server 重启了,那原有连接会怎么样?
全部不可用?还是第一次不可用,接受到 EOP 之后能把该连接去掉?</p>
<p>这里存放着空闲链接
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/358465b1dfed9def75ab15ad94bdacaa?showdoc=.jpg" alt="" /></p>
<p>拿数据出错时
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/e3145eecbcdf11741066c72badbec4f2?showdoc=.jpg" alt="" /></p>
<p>会把连接 close 掉 (链接的 close)
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/a740d4a5c8f11c82622cced0c35d7fe2?showdoc=.jpg" alt="" /></p>
<p>defer 办法 : 这时候判断到有错,便不归还给 idle (空闲连接归还的 close)
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/1f8ea7e9421602310095edfbd234499d?showdoc=.jpg" alt="" /></p>
<h2>第三方怼运营接口</h2>
<h4>addMiniApp - 第三方增加了小程序,同步信息过来保存</h4>
<p>如果是更新,只会更新一些基本的信息</p>
<p>如果是新增,会更新多张表的信息,初始化默认值,但是不涉及缓存。</p>
<h4>addVersion - 增加某个小程序的版本号</h4>
<p>新增版本会加版本表 lite_version</p>
<p>相同版本也会更新,主要是更新 state 字段 (作用,意义是啥??)</p>
<p>而且 addVersion 默认一定是体验版</p>
<p>至于 state 暂时理解为是否开启该小程序的使用</p>
<p>开启 :往 h:version 和 h:miniapp:versionstatus(体验版) 增加数据 </p>
<p>这边有个应该是历史遗留问题,就是点开就看 (wx5aa11bd71a25432f) 的缓存是 h:version,其他小程序的缓存是 h:version:appid</p>
<p>就是点开就看的</p>
<p>关闭: 删除这两个缓存的数据</p>
<h4>setVersionStatus - 更新版本状态 (版本状态: 1 测试中 ,2 提审中, 3 已上线)</h4>
<p>如果是提审中,默认改为测试中(后台只有测试中 和 已上线)</p>
<p>然后更新 version 表的状态</p>
<p>更新缓存 h:miniapp:versionstatus</p>
<p>更新 init.json</p>
<p>如果是 3 ,也就是上线状态,需要更新 AppidList ,(其他时候不会更新applist,applist表只记录有上过正式版的version)并且刷新分发的缓存</p>
<h4>addSeries</h4>
<p>增加小程序的系列</p>
<h4>updateSeries</h4>
<p>更新小程序的系列</p>
<h4>removeSeries</h4>
<p>删除小程序的系列</p>
<h4>addAppTag</h4>
<p>增加 app_tag</p>
<h4>updateAppTag</h4>
<p>更新 app_tag</p>
<h4>removeAppTag</h4>
<p>删除 app_tag</p>
<h4>rollBackAppVersion</h4>
<p>删除 version表 当前版本的 (或者置回测试状态 1)</p>
<p>删除 applist 当前版本的 (其实不删也行)</p>
<p>删除 appid_list_item (其实不删也行)</p>
<p>删除小程序版本相关缓存</p>
<ul>
<li>h:version // 删除会不会有影响? </li>
<li>h:miniapp:versionstatus // 前端有并且 2 才是骗审</li>
</ul>
<p>流量分发的 applist 发生变化,更新缓存 (也可以不更,因为上一版本的流量分发已经有缓存,并且是合法的)</p>
<p>更新 init.json (更新版本)</p>