使用 Redis 实现一个轻量级的搜索引擎
Java之间
共 3416字,需浏览 7分钟
·
2021-05-26 16:29
往期热门文章:
1、面试官问:数据库 delete 表数据,磁盘空间还是被一直占用,为什么? 2、巧用 Stream API 优化 Java 代码 3、最牛逼的故障诊断工具!秒级定位线上问题 4、新技能 MyBatis 千万数据表,快速分页! 5、常见的SQL面试题:经典50例 作者:jasonGeng88 https://github.com/jasonGeng88/blog
场景
实现1
select ... from table_1
left join table_2
left join table_3
left join (select ... from table_x where ...) tmp_1
...
where ...
order by ...
limit m,n
explain
关键字进行SQL性能分析,对该加索引的地方都加上了索引。同时将一条复杂SQL拆分成了多条SQL,计算结果在程序内存中进行计算。$result_1 = query('select ... from table_1 where ...');
$result_2 = query('select ... from table_2 where ...');
$result_3 = query('select ... from table_3 where ...');
...
$result = array_intersect($result_1, $result_2, $result_3, ...);
子类单选:直接根据条件 key,获取对应结果集; 子类多选:根据多个条件 Key,进行并集操作,获取对应结果集; 最终结果:将获取的所有子类结果集进行交集操作,得到最终结果;
ZRANGEBYSCORE
命令,根据分数(价格)区间,获取相应结果集。扩展
分页
ZINTERSTORE
命令,赋结果集权重为0,商品时间结果为1,取交集而得的结果集赋予创建时间分值的新有序集合。对新结果集的操作即能得到分页所需的各个数据:页面总数为: ZCOUNT
命令当前页内容: ZRANGE
命令若以倒序排列: ZREVRANGE
命令
数据更新
性能优化
MULTI
命令,开启一个事务,将 Redis 的多次操作放在一个事务中,最后通过EXEC
来进行原子性执行(注意:这里所谓的事务,只是将多个操作在一次连接中执行,如果执行过程中遇到失败,是不会回滚的)
最近热文阅读:
1、从 0 到 1 手把手教你制作酷炫可视化大屏 2、巧用 Stream API 优化 Java 代码 3、最牛逼的故障诊断工具!秒级定位线上问题 4、一次线上 JVM 调优实践,FullGC 40 次/天到 10 天一次的优化过程 5、新技能 MyBatis 千万数据表,快速分页! 6、常见的SQL面试题:经典50例 7、事务注解 @Transactional 失效的3种场景及解决办法 8、看看人家SpringBoot的全局异常处理多么优雅... 9、代码总是被嫌弃写的太烂?装上这个IDEA插件再试试! 10、60个相见恨晚的神器工具! 关注公众号,你想要的Java都在这里
评论