<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Middleware &#8211; HU Xiaoxu</title>
	<atom:link href="https://blog.ihuxu.com/category/computer-science/middleware/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ihuxu.com</link>
	<description>a software engineer&#039;s blog</description>
	<lastBuildDate>Wed, 18 Jun 2025 15:26:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>
	<item>
		<title>[维护中]基于文本图形（ncurses）的文本搜索工具 ncgrep</title>
		<link>https://blog.ihuxu.com/ncgrep-based-on-ncurses-global-regular-search-tool/</link>
					<comments>https://blog.ihuxu.com/ncgrep-based-on-ncurses-global-regular-search-tool/#comments</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 05 Dec 2017 09:21:51 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Others]]></category>
		<category><![CDATA[NCGREP]]></category>
		<category><![CDATA[NCURSES]]></category>
		<category><![CDATA[Original]]></category>
		<category><![CDATA[Utilities]]></category>
		<guid isPermaLink="false">http://blog.ihuxu.com/?p=9649</guid>

					<description><![CDATA[源码下载&#160;http://github.com/ncgrep/ncgrep 背景 作为一个 VIM 党，日常工作开发中，会经常利用 grep 进行关键词搜索，以快速定位到文件。如图： 但是，这一过程会有两个效率问题： 可想而知，当搜索的内容结果集比较大时，可谓痛苦。 那可以用 Vim 中的 Ag 插件进行搜索啊？ 是的，但他只解决了交互的问题。仍然没有解决结果集分组分类的痛点。 思路 在使用 Eclipse 等 IDE 进行文本全局搜索时，在加载效果（懒加载）可视化方面有很大优势。 &#160; 那么，期望基于 linux 系统，提供一个类似的搜索工具。优点（功能）如下： 基于文本图形界面的类库是什么呢？网上大致了解了下 VIM、htop 类似的软件，其都是基于一个叫 ncurses 的类库实现的。 项目 项目的名称：ncgrep 为什么？因为有 ngrep、egrep 等。(注：ncgrep 没有引用 grep 源码） 项目的 Demo 代码 http://github.com/ncgrep/ncgrep 类似项目 NGP youtube -&#62;&#160;https://www.youtube.com/watch?v=MesYBY8271s 总结 工具为效率而生，期望能够带来收益。]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/ncgrep-based-on-ncurses-global-regular-search-tool/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>[开发中]基于树莓派的智能家居项目的设想与实现 Hestia</title>
		<link>https://blog.ihuxu.com/tentative-plan-and-realization-of-smart-home-project-hestia-based-on-raspberry-pi/</link>
					<comments>https://blog.ihuxu.com/tentative-plan-and-realization-of-smart-home-project-hestia-based-on-raspberry-pi/#comments</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Wed, 22 Nov 2017 06:07:26 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Others]]></category>
		<category><![CDATA[Original]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">http://blog.ihuxu.com/?p=9642</guid>

					<description><![CDATA[注：本文内容的准确性仅限于笔者写该篇文章时的情况，不保证后续与实际项目代码一致。实时内容还请关注 Github 项目托管页面：https://github.com/GenialX/hestia-server 树莓派，一个五脏俱全，集几乎所有功能于一身的微型计算器。大约一两月之前，屈屈 300 百大洋收入囊中。 入手之后，出于对自动化的兴趣，慢慢地研究如何实现室内家电的智能自动化控制。在断断续续地，不断地摸索之后，有了若干想实现的点子，迄今为止也有所实践。 点子 方案 硬件 首先，除了树莓派之外，还需要如下硬件： 软件 此外，本案例同样需要如下软件环境的支持（注：如果您完全不懂软件，且不愿意为实现本案例的结果而学习软件知识，那么下面的需要软件知识的相关内容可以不用深究）： 架构 系统大致分为三部分 各部分的主要用途 项目 Hestia Server&#160;https://github.com/GenialX/hestia-server Hestia RPi&#160;https://github.com/GenialX/hestia-rpi Hestia Android&#160;https://github.com/GenialX/hestia-android Hestia iOS&#160;https://github.com/GenialX/hestia-ios 实现功能 总结 未完待续&#8230; 历史 相关文章：Android O后台持续获取地理位置的简单调研过程]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/tentative-plan-and-realization-of-smart-home-project-hestia-based-on-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>深入 MySQL 用户自定义变量：使用详解及其使用场景案例</title>
		<link>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/</link>
					<comments>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/#comments</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 04 Oct 2016 02:21:09 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=5879</guid>

					<description><![CDATA[一、前言 在前段工作中，曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后，发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如，当用户在某超级话题下连续第 n（n 即计数器的值）次进行转发帖子时，将会获得与 n 相关的分数。然而，在第一次改进后问题依然存在。所以，这次在之前的基础上，通过使用 MySQL 变量的途径来解决该问题。 二、到底 MySQL 的变量分哪几类？ MySQL变量一共分为两大类：用户自定义变量和系统变量。如下： 本文涉及的内容为用户自定义会话变量，若对其他分类无感，请点击这里。 PS：用户定义的会话变量和系统定义的会话变量有什么区别？ 局部变量 局部变量一般用于 SQL 的语句块中，比如存储过程中的 begin 和 end 语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。 上述存储过程中定义的变量 c 就是局部变量。 会话变量 会话变量即为服务器为每个客户端连接维护的变量。在客户端连接时，使用相应全局变量的当前值对客户端的回话变量进行初始化。设置会话变量不需要特殊权限，但客户端只能更改自己的会话变量。其作用域与生命周期均限于当前客户端连接。 会话变量的赋值： 会话变量的查询： 全局变量 全局变量影响服务器整体操作。当服务器启动时，它将所有全局变量初始化为默认值。这些默认值可以在选项文件中或在命令行中指定的选项进行更改。要想更改全局变量，必须具有 SUPER 权限。全局变量作用于 server 的整个生命周期，但是不能跨重启。即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效，需要更改相应的配置文件。 全局变量的设置： 全局变量的查询： 三、MySQL用户自定义变量详解 你可以利用 SQL 语句将值存储在用户自定义变量中，然后再利用另一条 SQL 语句来查询用户自定义变量。这样以来，可以再不同的 SQL 间传递值。 用户自定义变量的声明方法形如：@var_name，其中变量名称由字母、数字、“.”、“_”和“$”组成。当然，在以字符串或者标识符引用时也可以包含其他字符（例如：@&#8217;my-var&#8217;，@&#8221;my-var&#8221;，或者@`my-var`）。 用户自定义变量是会话级别的变量。其变量的作用域仅限于声明其的客户端链接。当这个客户端断开时，其所有的会话变量将会被释放。 用户自定义变量是不区分大小写的。 使用 SET 语句来声明用户自定义变量： 在使用 SET 设置变量时，可以使用“=”或者“:=”操作符进行赋值。 当然，除了 SET 语句还有其他赋值的方式。比如下面这个例子，但是赋值操作符只能使用“:=”。因为“=”操作符将会被认为是比较操作符。 mysql&#62; SET @t1=1, @t2=2, @t3:=4; mysql&#62; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;<div class="read-more"><a class="btn read-more-btn" href="https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/">Read More</a></div>]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>高并发、分布式数据库场景下需要注意的 UPDATE SQL 写法</title>
		<link>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/</link>
					<comments>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/#respond</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Tue, 09 Aug 2016 05:45:26 +0000</pubDate>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=968</guid>

					<description><![CDATA[业务模块 超级话题签到积分 具体场景 更新签到积分行为 表 integration_record &#8211; 每次产生积分行为的记录表。即每当用户产生积分行为（如：在超级话题内进行签到、转发和回复等行为），就会增加一条 integration_record 表的记录。表明该用户在该超级话题下通过哪些行为产生了多少积分增量。 integration &#8211; 每个用户的总积分表。即在每次写入一条 integration_record 记录后，会将积分增量累计加入到该表的总积分字段中。表明目前为止，该用户在该超级话题下通过积分行为一共获取的积分总数。 表的细节就不给出了（也没必要）。这两张表都以话题 ID（topic_id）和用户 ID（uid_id）进行联合索引。 具体问题 在某些情况下，某个用户所在某个话题下的所有 integration_record 记录的积分总和小于该用户在该话题下的 integration 表记录的总积分。 异常日志 通过检查线上异常日志发现，会偶发出现更新 integration 表记录返回0（更新影响记录行数为 0）的情况。但理论上不应该出现这种情况。 分析 进而考虑是由于数据库主从同步的延迟导致。为什么这么猜测？看下面SQL： update integration&#160;set integration = ? where topic_id = ? and uid = ? 上面为改动前（有问题）的 SQL。其中第一个问号代表当前需要更新的积分总数。问题就出现在这个总数上。 这个总数是由当前用户产生的积分行为所增加分数与当前 integration 表中该用户的积分总数（读于从库）之和。 所以，在高并发的请求下，会出现同时待同步如下一些SQL： update integration&#160;set integration = 1720 where topic_id = abc and uid = 12345678 update integration&#160;set integration = 1720 where topic_id<div class="read-more"><a class="btn read-more-btn" href="https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/">Read More</a></div>]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/the-problem-of-the-distribution-mysql-to-be-focused-in-the-hight-concurent-request/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>高并发场景下的缓存使用误区</title>
		<link>https://blog.ihuxu.com/the-cache-usage-errors-in-high-concurrency-scenarios/</link>
					<comments>https://blog.ihuxu.com/the-cache-usage-errors-in-high-concurrency-scenarios/#respond</comments>
		
		<dc:creator><![CDATA[HU Xiaoxu]]></dc:creator>
		<pubDate>Thu, 08 Oct 2015 05:03:33 +0000</pubDate>
				<category><![CDATA[Computer Language]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Original]]></category>
		<guid isPermaLink="false">http://www.ihuxu.com/blog/?p=402</guid>

					<description><![CDATA[十一聚会，某谈及人生理想。我要的是“地位，身份和爱情！”，其实就是金钱，面子和美女。O.O 正文 9月份，连续两天（AB 两天）线上出现业务故障，redis 监控曲线瞬间上涨。 业务场景：一千万 UV / 日 redis监控曲线 （修改图片好麻烦，曲线意会下吧~）： redis日志 业务代码 &#160; 问题 由业务代码和redis日志可以看出，正常情况下通常会有一次删和一次写之后，会出现大量的读。然而，日志中则出现了大量的写入。这就是高并发时导致同时写入后，也许因为写入量特大，导致下次读取失败后继续进行写入，最后把 redis 拖垮。 解决 如果不需要进行排序截取等操作可以换用 Memcached 缓存 在高并发情况下应对 redis 加事务机制 redis事务 修改后的业务代码 注：封面配图为朋友圈图片]]></description>
		
					<wfw:commentRss>https://blog.ihuxu.com/the-cache-usage-errors-in-high-concurrency-scenarios/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
