GeminiDB新特性:讓Redis廣告頻控愛不釋手的exHASH

来源:https://www.cnblogs.com/huaweiyun/archive/2023/11/23/17851204.html
-Advertisement-
Play Games

GeminiDB Redis介面現已支持可為Field設置過期時間和版本的exHash類型,對開源Redis的Hash類型進行了擴展。 ...


本文分享自華為雲社區《GeminiDB新特性:讓Redis廣告頻控愛不釋手的exHASH》,作者:GeminiDB-Redis博客 。

exHash類型是一種支持Field過期的新型數據類型,它在原先的Hash類型基礎上進行了擴展:在支持Hash類型的通用功能以外,exHash類型還支持為Field設置過期時間和版本,增強了數據結構的靈活性,從而簡化了很多複雜場景下的業務開發工作。

本文以兩種常見的場景(頻控場景&購物車)為例,通過使用GeminiDB Redis介面中的exHash類命令來實現複雜的業務,簡化開發難度。

exHash命令使用簡介

應用場景

頻控場景

頻控指的是對用戶在一定時間內(例如一天、一周、一個月)進行某種操作的次數進行限制,可以控制特定廣告或信息在一定時間內在特定平臺上的展示次數,以避免過度曝光和廣告疲勞,同時優化廣告效果和用戶體驗;對於廣告來說,也可以提高廣告的效果和轉化率。此外,頻控還可以避免惡意行為,如刷流量、刷評論、刷點贊等。

頻控的3個要素包含用戶ID、廣告ID、觸發次數;以用戶ID為key,廣告ID為field,指定時間內的觸發次數為value,恰好構成頻控的三要素。先配置好各個廣告的指定頻控策略,如下圖所示即可根據如下的方式來實現頻控:

  • 最左邊通過Hash類型來實現,通過expire命令設置User_1的過期時間為一天,每推送一次通過hincrby來增加指定廣告的推送次數,每次推送指定廣告前在一天內的推送次數則可以通過hget獲取進行判斷,一天後該用戶的數據自動過期無需手動清理,這樣便可以簡單地實現頻控。但這個方案的缺點在於對於每個用戶(即每個key)只能設置一個過期時間,無法做到例如8小時3次這樣指定時間段內的靈活的頻控策略。
  • 為了做到對每個廣告都配置指定時間段內的靈活頻控,如中間圖所示可以通過將時間戳拼接在value里的方式用Hash類型來實現,但這種方案無疑是增加了業務側開發的工作量。
  • 如最右圖所示,支持給field設置過期時間的exHash類型可以很完美地解決Hash類型面對頻控場景的缺點。由於Field支持過期時間設置,那麼該場景下,平臺可以給每個廣告都配置不同時間段內的頻次要求,假設此時給AD_2配置的頻控策略為8小時內2次,那麼如圖所示在下一次再準備給User_1推送AD_2廣告前,先通過exhget User_1 AD_2命令獲取到了該值已經是2時,便可以判斷出此時根據平臺頻控策略,不應該再給User_1推送AD_2廣告了。而當8小時一過,User_1的AD_2這個field過期後,exhget無法再獲取到這個field的信息,則可以繼續給User_1推送AD_2廣告了。

購物車場景

最近雙十一期間,相信很多同學購物車裡都填滿了各種想要清空的寶貝,這裡就以購物車場景為例介紹該場景的幾種不同Redis類型的實現,並比較這幾種實現方案的優缺點。

1. 基於String實現購物車功能

如圖所示基於String可以輕鬆地實現各個用戶的購物車功能,該方案需要將用戶ID與商品ID進行拼接作為key,例如User_1#Earphones_1,key對應的value為購物車中用戶準備購買的數量,其中可能有部分商品為限時特購,所以有過期時間,為key對應的過期時間。


涉及命令如下:

該方案會存在如下問題:

  • 額外拼接增加編、解碼開發工作量
  • 某個用戶獲取自己的購物車清單時還需要通過scan命令首碼匹配掃描所有key,並通過get命令去獲取對應的值。
  • 想要直接獲取清單長度時,仍然需要遍歷整個首碼key的數目,方法複雜。
  • 存在大量重覆的用戶名首碼,浪費存儲空間。

2. 基於Hash實現購物車功能

可以根據如圖所示的Hash類型來實現購物車的管理,用戶ID作為key,商品ID作為field,value為購物車中對應商品的數量。其中對於部分限時特購的商品,其過期時間通過拼接的方式放到field對應的value里。

涉及命令如下:

該方案相對於String類型的方案有了不少優化:

  • 獲取某個用戶購物車中的所有商品清單僅需要一個hgetall命令即可
  • 獲取某個用戶的清單長度時直接hlen獲取即可
  • 不存在大量重覆的用戶名首碼問題

然而該方案仍存在一個明顯的缺點,即對於部分限時特購的商品處理起來複雜:對於User_1的Keyboard_1商品,如果要再加一個數量,不能直接使用hincrby,而是需要先hget獲取Keyboard_1商品的值並解碼,再加上指定的數量再編碼後hset對應的值。

3. 基於exHash實現購物車功能

根據如圖所示的exHash類型來實現購物車的管理,同Hash類型一樣,用戶ID作為key,商品ID作為field,value為購物車中對應商品的數量。其中對於部分限時特購的商品,由於exHash類型可以為Field設置過期時間,其過期時間可通過hset命令直接設置。

涉及命令如下:

該方案相對於Hash類型的優化主要體現在可以直接為各field設置過期時間,使業務側使用起來簡單又高效。可以看到exHash類型相關的命令和Hash類型是類似的,使用起來學習成本很低,業務側改造成本相對也比較低。

圖1.1 華為商城購物車中,用戶ID、商品ID、商品數量及exhash類型命令的使用。

總結

本文介紹了GeminiDB Redis介面的exHash類型的特性、使用方法及應用場景。為客戶提供了一種語法與原生Redis Hash類型類似、和Hash類型的使用相互隔離、支持給Field單獨設置過期時間和版本的exHash類型作為各種複雜場景的解決方案。未來,GeminiDB Redis介面將持續致力於開發更多好用的企業級特性,幫助客戶輕鬆運維,高效開發。

如果你的業務需要一款穩定可靠的KV資料庫,可以試試GeminiDB Redis介面。

 

團隊往期技術分享目錄:http://3ms.huawei.com/km/blogs/details/13802925,也可加入我們的交流群哦!

點擊關註,第一時間瞭解華為雲新鮮技術~

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 在C#中,var關鍵字是用來聲明變數類型的,它是C# 3.0推出的新特征,它允許編譯器根據初始化表達式推斷變數類型,有點跟javascript類似,而javascript中的var是弱類型。它讓C#變數聲明更加簡潔,但也導致了一些關於C#是強類型還是弱類型的爭論。 解析 在傳統意義上,強類型語 ...
  • Welcome to YARP - 1.認識YARP並搭建反向代理服務 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 - 配置提供者(Configuration Providers) 2.3 - 配置過濾器(Configur ...
  • 四、Linux幫助使用 1、Tab鍵的作用 當所輸入的關鍵字具有唯一性時,一次Tab則自動補齊 所輸入的關鍵字不具有唯一性,則系統會列出所有該關鍵字開頭的內容 補齊命令 補齊參數 2、歷史記錄 history:查看所有歷史記錄 history N :列出最近N條歷史記錄 !N:調用第N條歷史記錄 ! ...
  • vim和vi有什麼區別,簡單的理解vim是vi的升級版,所以直接用vim。 vim的所有操作是區分中英文大小寫的,並且區分數字鍵盤(數字不能用小鍵盤)。 vim有三種工作模式:命令模式、文本編輯模式和最後行模式。 一、命令模式下的操作 1.1游標定位 鍵盤的上下左右可以移動,同時 k 上移 j 下移 ...
  • 為了維護數據表的數據完整性而設定的一系列規則,防止用戶在數據表中插入一些錯誤的數據. 1. 表約束分類 主鍵約束:保證數據的完整性,唯一性,原子性(Id:編號) 外鍵約束 分類表數據: Id分類名稱 1 衣服 2 手機 3 電器 商品表數據: 商品編號商品名稱價格所屬分類(外鍵) 1 李寧牌運動服 ...
  • SQL中的LIKE運算符用於在WHERE子句中搜索列中的指定模式。通常與LIKE運算符一起使用的有兩個通配符: 百分號 % 代表零個、一個或多個字元。 下劃線 _ 代表一個單個字元。 以下是LIKE運算符的用法和示例: 示例 選擇所有以字母 "a" 開頭的客戶: SELECT * FROM Cust ...
  • 1. 資料庫文件組成 主數據文件 主要數據文件的建議文件擴展名是 .mdf。 主要數據文件包含資料庫的啟動信息,並指向資料庫中的其他文件,存儲部分或全部的數據。用戶數據和對象可存儲在此文件中,也可以存儲在次要數據文件中。 每個資料庫有一個主要數據文件。 mdf文件並非普通文件,因此不藉助相應軟體是無 ...
  • 某大型央企是首批全國供應鏈創新與應用示範企業,在“十四五”規劃期內以聚焦供應鏈管理核心主業作為主要戰略發展方向。供應鏈運營管理以大宗商品貿易為主,其交易往往具有交易量巨大、交易環節複雜、風險交易難識別、風險客商難管控等痛點。 隨著集團數字化轉型不斷深化,數據應用方面的需求不斷擴展。但集團缺乏統一的大 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...