<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Redis是開發中非常常用的記憶體資料儲存中介軟體,之前基本上用它來做記憶體儲存使用。最近發現Redis推出了很多增強模組,例如通過RedisJSON可以支援原生JSON物件的儲存,使用RediSearch可以作為搜尋引擎使用,並且支援中文搜尋!今天給大家帶來RediSearch+RedisJSON作為搜尋引擎的使用實踐,希望對大家有所幫助!
SpringBoot實戰電商專案mall(50k+star)地址:https://github.com/macrozheng/mall
首先介紹下RedisMod這個東西,它是一系列Redis的增強模組。有了RedisMod的支援,Redis的功能將變得非常強大。目前RedisMod中包含了如下增強模組:
首先我們需要安裝帶所有RedisMod的Redis,使用Docker來安裝非常方便的!
使用如下命令下載RedisMod的映象;
docker pull redislabs/redismod:preview
在容器中執行RedisMod服務。
docker run -p 6379:6379 --name redismod -v /mydata/redismod/data:/data -d redislabs/redismod:preview
RedisJSON
有了RedisJSON模組,Redis就可以儲存原生JSON型別資料了,通過它你可以很方便地存取JSON中的各個屬性,類似在MongoDB中那樣,下面我們就來體驗下,這裡我們將使用RedisInsight 來操作Redis。
首先通過JSON.SET
命令向Redis中新增JSON型別鍵值對,幾個商品物件資料,由於JSON是樹形結構的,使用$
符號代表往JSON的根節點中新增資料;
JSON.SET product:1 $ '{"id":1,"productSn":"7437788","name":"小米8","subTitle":"全面屏遊戲智慧手機 6GB+64GB 黑色 全網通4G 雙卡雙待","brandName":"小米","price":2699,"count":1}' JSON.SET product:2 $ '{"id":2,"productSn":"7437789","name":"紅米5A","subTitle":"全網通版 3GB+32GB 香檳金 移動聯通電信4G手機 雙卡雙待","brandName":"小米","price":649,"count":5}' JSON.SET product:3 $ '{"id":3,"productSn":"7437799","name":"Apple iPhone 8 Plus","subTitle":"64GB 紅色特別版 移動聯通電信4G手機","brandName":"蘋果","price":5499,"count":10}'
資料插入成功後,在RedisInsight中將看到如下資訊,JSON資料支援格式化高亮顯示;
接下來可以通過JSON.GET
命令獲取JSON型別鍵值對的值;
JSON.GET product:1
也可以只獲取值的指定屬性,在RedisJSON中,獲取JSON物件中的屬性時需要以.
開頭;
JSON.GET product:1 .name .subTitle
還可以通過JSON.TYPE
命令來獲取JSON物件型別。
JSON.TYPE product:1 .
通過RediSearch模組,Redis可以變成一個功能強大的全文搜尋引擎,並且原生支援中文搜尋,下面我們就來體驗下!
使用RediSearch來搜尋資料之前,我們得先建立下索引,建立索引的語法有點複雜,我們先來看下;
FT.CREATE {index} [ON {data_type}] [PREFIX {count} {prefix} [{prefix} ..] [LANGUAGE {default_lang}] SCHEMA {identifier} [AS {attribute}] [TEXT | NUMERIC | GEO | TAG ] [CASESENSITIVE] [SORTABLE] [NOINDEX]] ...
使用FT.CREATE
命令可以建立索引,語法中的引數意義如下;
PREFIX 1 "product:"
表示為鍵中以product:
為字首的資料建立索引;看了語法可能不太好理解,直接對之前的商品資料建立索引試試就懂了;
FT.CREATE productIdx ON JSON PREFIX 1 "product:" LANGUAGE chinese SCHEMA $.id AS id NUMERIC $.name AS name TEXT $.subTitle AS subTitle TEXT $.price AS price NUMERIC SORTABLE $.brandName AS brandName TAG
建立完索引後,我們就可以使用FT.SEARCH
對資料進行檢視了,比如使用*
可以查詢全部;
FT.SEARCH productIdx *
由於我們設定了price
欄位為SORTABLE
,我們可以以price
降序返回商品資訊;
FT.SEARCH productIdx * SORTBY price DESC
還可以指定返回的欄位;
FT.SEARCH productIdx * RETURN 3 name subTitle price
我們把brandName
設定為了TAG
型別,我們可以使用如下語句查詢品牌為小米
或蘋果
的商品;
FT.SEARCH productIdx '@brandName:{小米 | 蘋果}'
由於price
是NUMERIC
型別,我們可以使用如下語句查詢價格在500~1000
的商品;
FT.SEARCH productIdx '@price:[500 1000]'
還可以通過字首進行模糊查詢,類似於SQL中的LIKE
,使用*
表示;
FT.SEARCH productIdx '@name:小米*'
在FT.SEARCH
中直接指定搜尋關鍵詞,可以對所有TEXT
型別的屬性進行全域性搜尋,支援中文搜尋,比如我們搜尋下包含黑色
欄位的商品;
FT.SEARCH productIdx '黑色'
當然我們也可以指定搜尋的欄位,比如搜尋副標題中帶有紅色
欄位的商品;
FT.SEARCH productIdx '@subTitle:紅色'
通過FT.DROPINDEX
命令可以刪除索引,如果加入DD
選項的話,會連資料一起刪除;
FT.DROPINDEX productIdx
通過FT.INFO
命令可以檢視索引狀態;
FT.INFO productIdx
RediSearch的搜尋語法比較複雜,不過我們可以對比SQL來使用它,具體可以參考下表。
Redis官方曾公佈了RediSearch與Elasticsearch的效能對比測試,大家可以看下。
對Wikipedia的560萬(5.3GB)檔案進行索引,RediSearch耗時221s
,Elasticsearch耗時349s
,RediSearch快了58%
!
資料建立索引後,使用32個使用者端對兩個單詞進行檢索,RediSearch的吞吐量達到12.5K ops/sec
,Elasticsearch的吞吐量為3.1K ops/sec
,RediSearch比Elasticsearch要快4倍
。同時RediSearch的延遲為8ms
,而Elasticsearch為10ms
,RediSearch延遲稍微低些!
經過這麼多年的發展,Redis的功能也越來越強大了,它已經不僅僅是個快取工具了,更像是一個資料庫了。RediSearch給了我們實現搜尋功能的另一個選擇,效能也非常不錯,大家如果做搜尋相關功能的話可以考慮下它!
參考資料
官方檔案:https://developer.redis.com/howtos/redisjson/
參考手冊:https://redis.io/docs/stack/search/
效能測試:https://redis.com/blog/search-benchmarking-redisearch-vs-elasticsearch/
以上就是RediSearch加RedisJSON大於Elasticsearch的王炸的詳細內容,更多關於RediSearch RedisJSON的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45