Redis命令拾遺四(集合類型)—包含簡單搜索篩選商品設計實例。

来源:http://www.cnblogs.com/tdws/archive/2016/08/18/5785939.html
-Advertisement-
Play Games

本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請註明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/ Redis數據類型之集合(Set)。 單個集合中最多允許存儲2的三十二次方減1個元素。內部使用hash table散列表實現。 SAD ...


本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請註明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/

Redis數據類型之集合(Set)。

單個集合中最多允許存儲2的三十二次方減1個元素。內部使用hash table散列表實現。

SADD Key members.....,向集合中增加多個元素,返回成功個數。另外由於集合中不允許有重覆元素,所以當添加重覆元素時,會忽略不計,當然也不計影響個數。

SMEMBERS Key   獲取目標集合Key下的所有元素。

SREM  Key members  從目標集合中移除多個元素。

 

SISMEMBER Key Member,判斷指定元素 是否在指定集合中存在。時間複雜度O(1)

下麵簡單介紹集合運算。

首先提醒一點,多個集合運算,是按照順序,一路算下去的結果。 

SDIFF Keys計算差集。

  請註意Result位置,和兩次差集結果Result。

SINTER Keys 計算並集。註意Result位置。

SUNION 計算交集。

 

下麵簡單介紹一下使用場景。

 比如在天貓或者京東當中,篩選商品,你想要七天包退換,貨到付款,可分期這樣的商品。我們先把這樣的標記叫做標簽(Tag),

GoodsId GoodsTag
Goods:1 新上架馬蓉版充XX娃
Goods:2 新上架《淘寶這十年XXX》
Goods:3 新上架VR眼鏡
Tag:Id Tag:Name
Tag:1 七天包退換
Tag:2 貨到付款
Tag:3 可分期
Tag:Id Goods:Id
Tag:1 Goods:1,Goods:2,Goods:3
Tag:2 Goods:1.Goods:2
Tag:3 Goods:1

那麼我們需要維護並設計的Redis數據“存儲結構”如上,三個“表”。當然這是我的隨意設計,還算是比較合理。並不瞭解人家JD,ALi是如何設計的。那麼現在你就可以對你需要的符合七天包退換,貨到付款,可分期這三種Tag的商品進行篩選咯。很顯然,解決辦法就是計算最後一個表的,Tag1,Tag2,Tag3這三種標簽所擁有的商品Id的並集,並集之後的結果也就是Goods:1,對應的商品是“新上架馬蓉版充XX娃”。

 

 

值得註意的是,NoSql中的設計思路,和關係型資料庫稍有不同,多思考使用場景,對轉換思想好處多多。
歡迎關註,蝸牛將持續發博分享,明天將會補充集合命令,下一篇將會簡單介紹有序集合,如果你學會了這個簡單的設計,請為自己點贊!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘自:http://312788172.iteye.com/blog/730280 我們經常在linux要查找某個文件,但不知道放在哪裡了,可以使用下麵的一些命令來搜索。這些是從網上找到的資料,因為有時很長時間不會用到,當要用的時候經常弄混了,所以放到這裡方便使用。 which 查看可執行文件的位置 ...
  • 1. 下載Linux iso文件,官方下載鏈接中有Mirror,選擇一個合適的鏈接 http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso 2. 燒錄成光碟,使用USBWriter寫入到U盤,或者使用虛 ...
  • 最近在看u-boot、osekOS的啟動代碼,其中涉及到lds文件,通過參考其他網友的文章,希望對lds文件有個明晰的認識,為了鞏固及加深影響,特將相關博客內容重寫一遍。 原始文章: http://linux.chinaunix.net/techdoc/beginner/2009/08/12/112 ...
  • 編程環境搭建: 因為ubuntu 12.04的內核版本已經是3.x,而目前一些講解內核驅動的書都是2.6.x。 嵌入式開發的版本一般都是基於3.14移植的,因為嵌入式是跑在開發板上的,所以開發驅動沒有問題。但是教材的例子一般都是基於PC機的2.6.x版本,雖然內核內部介面相對穩定,但是我也不太清楚。... ...
  • 源代碼如下: typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION; typedef IMAGE_... ...
  • 查看文件內容 1.cat 命令 作用:查看文件內容 語法:cat 文件名 2. more 命令 作用:分頁查看文件內容 語法:more 文件名 例:more /etc/passwd 按下回車刷新一行,按下空格刷新一屏 退出:按q健 3.less 命令 作用:分頁查看文件內容 語法:less 文件名 ...
  • 1、LINQ是什麼? LINQ是Language Integrated Query的縮寫,即“語言集成查詢”的意思。LINQ的提出就是為了提供一種跨越各種數據源的統一的查詢方式,它主要包含4個組件--Linq to Objects、Linq to XML、Linq to DataSet和Linq t ...
  • 說明: 原文作者賢新 原文地址:http://www.cnblogs.com/chenxinblogs/p/4852813.html ViewData和ViewBag主要用於將數據從控制器中傳遞到視圖中去,ViewData本身就是一個字典。以KeyValue的形式存取值。ViewData的Value ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...