redis數據結構-02(INCR、DECR、APPEND)

字符串操作:INCR、DECR、APPEND

Redis 字符串不僅僅是簡單的文本,它們還可以表示數字。此功能使我們能夠直接對存儲在 Redis 中的字符串值執行原子的遞增和遞減操作。此外,Redis 還提供了一種附加到現有字符串的方法,從而可以輕松構建更大的文本值。這些操作對于計數器、速率限制和動態字符串構造等任務至關重要。

增加字符串:INCR 命令

Redis 中的?INCR?命令用于遞增字符串鍵的整數值。如果該鍵不存在,則在執行遞增操作之前將其設置為“0”。如果鍵包含錯誤類型的值(例如,無法解釋為整數的字符串)或表示非整數的字符串,則會返回錯誤。遞增操作是原子的,這意味著即使多個客戶端同時嘗試遞增同一個鍵,該操作也將正確執行,而不會出現任何競爭條件。

INCR 的基本用法

最簡單的用例是增加計數器。想象一下,你正在跟蹤某個網頁的訪問次數。

> SET page_views 10
OK
> INCR page_views
(integer) 11
> GET page_views
"11"

在此示例中,我們首先將?page_views?鍵設置為“10”。然后,我們使用?INCR?命令遞增其值。該命令返回新值 (11),后續的?GET?命令確認該值已在 Redis 中更新。

如果鍵不存在,?INCR?會將其初始化為 0,然后將其增加為 1:

> DEL new_key
(integer) 0
> INCR new_key
(integer) 1
> GET new_key
"1"

使用 INCR 進行錯誤處理

如果您嘗試增加包含非數字字符串的鍵,Redis 將返回錯誤:

> SET my_string "hello"
OK
> INCR my_string
(error) ERR value is not an integer or out of range

類似地,嘗試增加以字符串形式存儲的浮點數也會導致錯誤:

> SET float_value "3.14"
OK
> INCR float_value
(error) ERR value is not an integer or out of range

INCRBY:按特定值遞增

Redis 還提供了?INCRBY?命令,允許你將鍵的值增加特定的整數值。當你需要增加的數值大于 1 時,這個命令非常有用。

> SET score 50
OK
> INCRBY score 25
(integer) 75
> GET score
"75"

在這里,我們將?score?鍵增加 25,得到新值 75。

實際示例:速率限制

INCR?的一個常見用例是速率限制。您可以使用它來限制用戶在特定時間范圍內對 API 發出的請求數量。

  1. 為每個用戶設置一個密鑰,例如?user:123:requests?。
  2. 當用戶提出請求時,對密鑰?INCR?。
  3. 使用?EXPIRE?在鍵上設置生存時間 (TTL),代表時間窗口。
  4. 如果密鑰的值超過某個閾值,則拒絕請求。
> SET user:123:requests 0
OK
> INCR user:123:requests
(integer) 1
> EXPIRE user:123:requests 60  # Expire in 60 seconds
(integer) 1
> INCR user:123:requests
(integer) 2

如果?INCR?命令返回的值大于您的限制,您可以拒絕該請求。密鑰將在 60 秒后自動過期,并重置計數器。

減少字符串:DECR 命令

DECR?命令與?INCR?相對應。它將字符串鍵的整數值減一。與?INCR?類似,如果鍵不存在,則在減一之前將其設置為 0。如果鍵包含錯誤類型的值,它也會返回錯誤。

DECR 的基本用法

> SET items_left 100
OK
> DECR items_left
(integer) 99
> GET items_left
"99"

在這個例子中,我們從 100 個項目開始,然后使用?DECR?減少計數。

如果鍵不存在,?DECR?會將其初始化為 0,然后將其遞減為 -1:

> DEL another_key
(integer) 0
> DECR another_key
(integer) -1
> GET another_key
"-1"

使用 DECR 進行錯誤處理

DECR?在錯誤處理方面與?INCR?類似。如果值不是整數,它將返回錯誤。

> SET my_string "world"
OK
> DECR my_string
(error) ERR value is not an integer or out of range

DECRBY:按特定值遞減

DECRBY?命令允許您將鍵減少特定的整數值,類似于?INCRBY?。

> SET energy 80
OK
> DECRBY energy 30
(integer) 50
> GET energy
"50"

在這里,我們將?energy?鍵減少 30,得到新值 50。

實際示例:庫存管理

DECR?可用于庫存管理系統。每次售出一件商品時,您可以減少庫存數量。

> SET product:123:stock 500
OK
> DECRBY product:123:stock 1  # One item sold
(integer) 499
> GET product:123:stock
"499"

您還可以檢查庫存水平是否低于某個閾值并觸發重新訂購流程。

附加到字符串:APPEND 命令

APPEND?命令用于將字符串附加到鍵所存儲的值的末尾。如果該鍵不存在,則在附加操作之前將其創建為空字符串。

APPEND 的基本用法

> SET greeting "Hello"
OK
> APPEND greeting ", world!"
(integer) 13
> GET greeting
"Hello, world!"

在此示例中,我們以字符串“Hello”開頭,并在其后附加“world!”。?APPEND?命令返回字符串的新長度 (13)。

如果鍵不存在,?APPEND?會將其創建為空字符串,然后附加值:

> DEL non_existent_key
(integer) 0
> APPEND non_existent_key "Redis"
(integer) 5
> GET non_existent_key
"Redis"

實際示例:構建日志消息

APPEND?對于構建日志消息或隨時間累積數據很有用。

> APPEND log:2024-01-26 "Request received at 10:00:00\n"
(integer) 27
> APPEND log:2024-01-26 "Request processed at 10:00:01\n"
(integer) 54
> GET log:2024-01-26
"Request received at 10:00:00\nRequest processed at 10:00:01\n"

每次發生事件時,您都可以在日志消息中附加一個新行。

將 APPEND 與其他命令結合使用

你可以將?APPEND?與其他字符串命令結合使用,以執行更復雜的操作。例如,你可以使用?GETRANGE?(將在后續模塊中介紹,但為了完整性起見,在此僅提及)來提取附加字符串的一部分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905214.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring MVC 中Model, ModelMap, ModelAndView 之間有什么關系和區別?

在 Spring MVC 中,Model, ModelMap, 和 ModelAndView 都是用來在 Controller 和 View 之間傳遞數據的,但它們在使用方式和功能上有所不同。 它們的核心在于:Spring MVC 需要知道兩件事來渲染視圖:① 數據 (Model) ② 視圖名稱 (V…

配置Hadoop集群-免密登錄

在 Hadoop 集群中配置免密登錄是確保各節點間高效通信的關鍵步驟。以下是基于 SSH 密鑰認證的免密登錄配置方案,支持主節點(NameNode)到所有從節點(DataNode)的無密碼訪問: 1. 環境準備 集群規劃&#xff…

C++類與對象(二):六個默認構造函數(一)

在學C語言時,實現棧和隊列時容易忘記初始化和銷毀,就會造成內存泄漏。而在C的類中我們忘記寫初始化和銷毀函數時,編譯器會自動生成構造函數和析構函數,對應的初始化和在對象生命周期結束時清理資源。那是什么是默認構造函數呢&…

嵌入式培訓之數據結構學習(一)數據結構的基礎概念、線性表

一、基礎概念 1、數據結構:相互之間存在一種或多種特定關系的數據元素的集合。(特定關系有邏輯關系與線性關系) (1)邏輯結構 集合,所有數據在同一個集合中,關系平等(數組&#xff…

Android Exoplayer 實現多個音視頻文件混合播放以及音軌切換

在之前的文章ExoPlayer中常見MediaSource子類的區別和使用場景中介紹了Exoplayer中各種子MediaSource的使用場景,這篇我們著重詳細介紹下實現多路流混合播放的用法。常見的使用場景有:視頻文件電影字幕、正片視頻廣告視頻、背景視頻背景音樂等。 初始化…

推特逆向算法,推特爬蟲,數據分析,推特關鍵詞搜索

祝大家五一假期快樂! 最近推特加了逆向,頻繁出現404,無法正常抓取數據,這里給出推特逆向的思路及代碼,供大家參考學習! 本文將介紹如何使用 Python 模擬請求 Twitter 的 GraphQL 接口,結合 re…

圖形化編程平臺的破局之道:從工具同質化到生態差異化

一、同質化困局的底層邏輯剖析 在全球圖形化編程市場中,工具功能趨同已成為行業共識。據 Statista 2024 年數據顯示,主流平臺的基礎功能重合度高達 78%,核心模塊(如條件判斷、循環結構)的實現方式高度相似。這種現象的…

【Rust】枚舉和模式匹配

目錄 枚舉和模式匹配枚舉的定義Option 枚舉控制流運算符 match簡潔控制流 if let 枚舉和模式匹配 枚舉的定義 結構體給予你將字段和數據聚合在一起的方法,像 Rectangle 結構體有 width 和 height 兩個字段。而枚舉給予你一個途徑去聲明某個值是一個集合中的一員。…

應急響應靶機——WhereIS?

用戶名及密碼:zgsf/zgsf 下載資源還有個解題.exe: 1、攻擊者的兩個ip地址 2、flag1和flag2 3、后門程序進程名稱 4、攻擊者的提權方式(輸入程序名稱即可) 之前的命令: 1、攻擊者的兩個ip地址 先獲得root權限,查看一下歷史命令記錄&#x…

變量函數實戰:高保真APP原型“發票頁面”動態交互教程

變量函數是高保真交互原型設計中常見的高級交互功能,能夠避免重復復制與手動修改頁面元素和邏輯標注,讓演示更有真實體驗感。本文分享一個高保真APP交互原型頁面的實操案例,結合原型設計工具中的變量函數與邏輯判斷功能,手把手教你…

量子加密通信:守護信息安全的未來之盾

摘要 在數字化時代,信息安全成為全球關注的焦點。傳統加密技術面臨著被量子計算破解的風險,而量子加密通信作為一種基于量子力學原理的新型加密技術,提供了理論上無條件安全的通信保障。本文將詳細介紹量子加密通信的基本原理、技術實現、應用…

《Vue.js》閱讀之響應式數據與副作用函數

Vue.js 《Vue.js設計與實現》(霍春陽) 適合:從零手寫Vue3響應式系統,大廠面試源碼題直接覆蓋。重點章節:第4章(響應式)、第5章(渲染器)、第8章(編譯器&…

數據處理專題(十三)

學會基本的圖像處理技術。? OpenCV 基礎 實踐:使用 OpenCV 進行圖像讀取、顯示和基本處理? 03 代碼示例 1. 導入必要的庫 import cv2import numpy as npimport matplotlib.pyplot as plt 2. 圖像讀取 # 讀取圖像image_path path_to_your_image.jpg # 替換…

springboot旅游小程序-計算機畢業設計源碼76696

目 錄 摘要 1 緒論 1.1研究背景與意義 1.2研究現狀 1.3論文結構與章節安排 2 基于微信小程序旅游網站系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 法律可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統…

P1874 快速求和

目錄 題目算法標簽: 動態規劃, 線性 d p dp dp思路代碼 題目 P1874 快速求和 算法標簽: 動態規劃, 線性 d p dp dp 思路 求的是最少組成 n n n的加法次數, 對于當前數字序列可以設計狀態表示 f [ i ] [ j ] f[i][j] f[i][j]表示考慮前 i i i個字符, 并且和是 j j j的所有方…

知名人工智能AI培訓公開課內訓課程培訓師培訓老師專家咨詢顧問唐興通AI在金融零售制造業醫藥服務業創新實踐應用

AI賦能未來工作:引爆效率與價值創造的實戰營 AI驅動的工作革命:從效率提升到價值共創 培訓時長: 本課程不僅是AI工具的操作指南,更是面向未來的工作方式升級羅盤。旨在幫助學員系統掌握AI(特別是生成式AI/大語言模型…

Linux 內核參數

文章目錄 什么是內核參數參數種類配置方式1. 編譯內核時配置2. 內核啟動時配置3. 內核運行時配置4. 加載內核模塊時配置總結 什么是內核參數 內核參數是 Linux 系統中用于控制和調整內核行為的可配置選項。這些參數影響系統的性能、安全性和各種功能特性。 參數種類 大部分參…

pythonocc 拉伸特征

micromamba install -c conda-forge pythonocc-core opencascade.js安裝不起來,ai用pythonocc練個手 拉伸線框 線成面 from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire f…

Vue.js 頁面切換空白與刷新 404 問題深度解析

在使用 Vue.js 開發單頁應用 (SPA) 的過程中,開發者經常會遇到兩個常見問題:頁面切換時出現短暫的空白屏幕,以及刷新頁面時返回 404 錯誤。這兩個問題不僅影響用戶體驗,還可能阻礙項目的正常上線。本文將深入探討這兩個問題的成因…

Go 語言 slice(切片) 的使用

序言 在許多開發語言中,動態數組是必不可少的一個組成部分。在實際的開發中很少會使用到數組,因為對于數組的大小大多數情況下我們是不能事先就確定好的,所以他不夠靈活。動態數組通過提供自動擴容的機制,極大地提升了開發效率。這…