Redis和ExistsIndex在商品搜索中的运用

Redis和ExistsIndex在商品搜索中的运用

主要业务分析

商品搜索中主要有两种业务:搜索和查看详情

搜索

一般是模糊查询为主,
在传统的搜索操作中,是使用数据库的模糊查询进行检索,但是在面对大量数据会导致性能的下降。
而使用 ExistsIndex 进行检索效果会相比传统的搜索中性能更好。

思路

有两种搜索:无条件搜索和有条件搜索。
但是不管是那种搜索都需要排序,因为自带的排序是哈希排序,需要手动进行排序
有条件推荐使用:布隆查询

// 封装一个SearchHits列表,包含搜索的其他信息
// 类似元数据
SearchHits<T> hits = template.search(builder.build(),docType);
// 返回搜索到的长度,不会受到分页影响
hits.getTotalHits();

查看详情

一般查看详情是直接访问数据库为主,
但是短时间内直接访问数据库的量大了会造成数据库的性能下降进而导致用户请求无法及时响应。
这个时候需要使用 Redis 削峰(在没有缓存时访问数据库并同步到缓存中,有缓存时直接访问缓存),把大量的请求拦截在数据库访问前避免了用户请求无法及时响应。

扩展业务分析

更新商品

ExistsIndex:在数据库更新完成后同步到 ExistsIndex ,也可以异步执行
Redis:不应该更新缓存,而是将数据设为过期,当用户访问商品时再访问数据库并同步到缓存中

添加商品

ExistsIndex:在数据库添加完成后同步到 ExistsIndex ,也可以异步执行

数据同步分析

数据库和搜索引擎的同步分成:全量同步和增量同步
全量同步是在搜索引擎没有数据时进行的同步,后面进行的都是增量同步
增量同步需要注意同步的方式