Redis數據結構-String字符串

1.String字符串

字符串類型是Redis中最基礎的數據結構,關于數據結構與要特別注意的是:首先Redis中所有的鍵的類型都是字符串類型,而且其他集中數據結構也都是在字符串類似基礎上進行構建,例如列表和集合的元素類型是字符串類型,所有字符串類型能為其他4中數據結構的學習奠定基礎。其次字符串類型的值可以是字符串,包含一般格式的字符串和JSON,XML格式的字符串;數字,也可以是整數或者浮點數;甚至是二進制流數據,例如圖片,音頻,視頻等。不過一個字符串的最大值不能超過512MB

2.常見命令

2.1 SET

將String類型的value設置到key中。如果之前key存在,則覆蓋,無論原來的數據類型是什么。之前關于此key的TTL也會全部失效。

語法:SET key value [expiration EX seconds | PX milliseconds]? [NX |XX]

時間復雜度:O(1)

選項:

EX seconds ——使用秒作為單位設置key的過期時間

PX milliseconds——使用毫秒作為單位設置key的過期時間

NX——只要key不存在時才進行設置,即如果key之前已經存在,設置不執行

XX——只在key存在時才進行設置,即如果key之前已經存在,設置不執行

返回值:

如果設置成功,返回OK。

如果由于SET指定NX或者XX但條件不滿足,SET不會執行,并返回(nil)

示例:

?2.2 MGET

一次性獲取多個key的值。如果對應的key不存在或者對應的數據類型不是string,返回nil

語法:MGET key [key ...]

時間復雜度:O(1)(或O(N),N是key的數量)

返回值:對應value的列表

示例:

2.3 MSET

一次設置多個key的值

語法:MSET key value [key value...]

時間復雜度:O(1)(或O(N),N是key的數量)

返回值:永遠是OK

示例:

多次 get vs單次mget

Redis是一個客戶端-服務器結構的程序,客戶端和服務器之間通信是通過網絡實現的,多次get產生了多次請求,進行多次網絡通信。單次mget只進行一次網絡通信,mget減少了網絡事件,所以性能較高

2.4 SETNX

設置key-value但只允許在key之前不存在的情況下

語法:SETNX key value

時間復雜度:O(1)

返回值:1表示設置成功,0表示沒有設置成功

示例:

2.5 INCR

將key對應的value(String類型)表示的數字+1。如果key不存在,則視為key對應的value是0。如果key對應的string不是一個整數或者范圍超過了64位有符號整數,則報錯

語法:INCR key

時間復雜度:O(1)

返回值:integer類型的加完后的數值

示例:

2.6 INCRBY

將key對應的string表示的數字加上對應的值。如果key不存在,則視為key對應的value是0.如果key對應的string不是一個整數或者范圍超過了64位有符號整數,則報錯

語法:INCRBY key decrement

時間復雜度:O(1)

返回值:integer類型的加完后的數值

示例:

?2.7 DECR

將key對應的string表示的數字減一。如果key對應的value是0.如果key對應的string不是一個整數或者范圍超過了64位有符號整數,則報數

語法:DECR key

時間復雜度:O(1)

返回值:integer類型的減完后的數值

示例:

2.8 INCRBYFLOAT

將key對應的string表示的浮點數加上對應的值。如果對應的值是負數,則視為減去對應的值。如果key不存在,則視為key對應的value是0.如果key對應的不是string,或者不是一個浮點數,則報錯。允許采用科學計數法表示浮點數

語法:INCRBYFLOAT

時間復雜度:O(1)

返回值:加/減完后的數值

示例:

2.9 APPEND

如果key已經存在并且是一個string,命令會將value追加到原有的string的后面。如果key不存在,則效果等同于SET命令

語法:APPEND KEY VALUE

時間復雜度:O(1)

返回值:追加完成之后string的長度

示例:

2.10 GETRANGE

返回key對應的string的子串,有start和end確定(左閉右閉)。可以使用負數表示倒數。-1表示倒數第一個字符,其他的于此類似。超過范圍的偏移量會根據string的長度調整成正確的值

語法:GETRANGE key start end

時間復雜度:O(N),N為[start,end]區間的長度。由于string通常比較短,可以視為是O(1)

返回值:string類型的子串

示例:

2.11 SETRANGE

覆蓋字符串的一部分,從指定的偏移開始

語法:SETRANGE key offset value

時間復雜度:O(N),N為value的長度,由于一般的value比較短,通常視為O(1)

返回值:替換后的string

示例:

2.11 STRLEN

獲取key對應的string的長度。當key存放的類型不是string時,報錯

語法:STRLEN key?

時間復雜度:O(1)

返回值:string的長度,或者當key不存在時,返回0

示例:

3.String的內部編碼

字符串類型的內部編碼有3種:

int:8個字節的長整型

embstr:小于等于39個字節的字符串

raw:大于39個字節的字符串

Redis會根據當前值的類型和長度動態決定使用那種內部編碼實現

redis存儲小數,本質上還是當字符串來存儲的,這意味著每次進行算數運算時,都需要將字符串轉為小數,再將運算結果轉為字符串,計算過程中的轉換都是開銷

4.String的典型場景

4.1緩存功能

緩存功能是String比較典型的運用場景,其中Redis作為緩沖層,MySQL作為存儲層,絕大部分請求的數據都是從Redis中獲取。由于Redis具有支撐高并發的特性,所以緩存通常能起到加速讀寫和降低后端壓力的作用

MySQL+Redis組成的緩存存儲框架結構

業務層 也可以看做是應用服務器,緩存層是Redis服務器(用于存放熱點數據),存儲層是MySQL服務器

假設業務是根據用戶uid獲取用戶信息:

首先從Redis獲取用戶信息,如果沒有從Redis中得到用戶信息,及緩存miss,則進一步從MySQL中獲取對應的信息,隨后寫入緩存并返回。如果從Redis中獲取到用戶的信息,則直接返回。通過增加緩存的功能,可以極大地提高查詢的效率,也降低了對MySQL的訪問次數

4.2計數功能

許多應用都會使用Redis作為技術的基礎工具,他可以實現快速的技術,查詢緩存的功能,同時數據可以一步處理或者落地到其他的數據源

?實際的開發一個成熟,穩定的真實技術系統,要面臨的挑戰遠不止如此簡單:防作弊,按照不同的維度技術,避免單點問題(單個redis掛了,數據丟失),數據持久化到底層數據源等

4.3共享會話

一個分布式Web服務將用戶的Session信息保存在各自的服務器中,但這樣會造成一個問題:處于負載均衡的考慮,分布式服務會將用戶的訪問請求均衡到不同的服務器上,并且通常無法保證用戶每次請求都會被均衡到同一臺服務器上,這樣當用戶刷新一次訪問是可能會發現需要重新登陸的,這個問題對于用戶來說是非常不適的

Session分散存儲

為了解決這個問題,可以使用Redis將用戶的Session信息進行集中管理。

Redis集中管理Session

?這種模式下,無論用戶被均衡到哪臺服務器上,都會集中從Redis中查詢,更新Session信息

4.4短信驗證碼?

很多應用處于安全考慮,會在每次登陸時,讓用戶輸入手機號并且配合給手機發送驗證碼,然后讓用戶輸入收到的驗證碼進行驗證,從而確定是否是用戶本人。為了短信接口不會頻繁訪問,會限制用戶每分鐘獲取驗證碼的頻率,例如一分鐘不能超過五次等

解決思路:

通過Redis命令對制定的key設置有效時間,在有效時間內訪問Redis即可成功,如果超出有效時間就登錄失敗

當然實際中并不會像我描述的這么簡單,還需要根據業務的場景進行具體的編寫

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

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

相關文章

cline通過硅基流動平臺接入DeepSeek-R1模型接入指南

為幫助您更高效、安全地通過硅基流動平臺接入DeepSeek-R1模型,以下為優化后的接入方案: DeepSeek-R1硅基流動平臺接入指南 📌 核心優勢 成本低廉:注冊即送2000萬Tokens(價值約14元)高可用性:規…

Java多線程三:補充知識

精心整理了最新的面試資料,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Lambda表達式 簡介: 希臘字母表中排序第十一位的字母,英語名稱為Lambda避免匿名內部類定義過多其實質屬于函數式編程的概念 為什么要使用lam…

裝修流程圖: 裝修前準備 → 設計階段 → 施工階段 → 安裝階段 → 收尾階段 → 入住

文章目錄 引言I 毛坯房裝修的全流程**1. 裝修前準備****1.1 確定裝修預算****1.2 選擇裝修方式****1.3 選擇裝修公司****1.4 辦理裝修手續****2. 設計階段****2.1 量房****2.2 設計方案****2.3 確認方案****3. 施工階段****3.1 主體拆改****3.2 水電改造****3.3 防水工程****3.…

Embedding方法:從Word2Vec到ltem2Vec

引言 在推薦系統領域,如何有效表征物品特征始終是核心挑戰。傳統協同過濾方法受限于稀疏性問題,直到2016年微軟研究院提出的Item2Vec方法,將自然語言處理中的Word2Vec技術創造性應用于物品表征學習,開啟了嵌入學習的新紀元。 It…

Udp發送和接收數據(python和QT)

服務端代碼 (python) import socketdef udp_server(host0.0.0.0, port12345):# 創建一個UDP套接字sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定服務器的IP地址和端口號sock.bind((host, port))print(f"UDP服務器已啟動,監聽端口 {port}...&…

VBA腳本將DeepSeek嵌入Word中教程

一、獲取API-Key 目前我們可以直接只用官網的API來實現,申請這一步是關鍵 也可以直接訪問官網的API平臺:https://platform.deepseek.com/ ,沒注冊的注冊完登錄一下,我們點擊到左側菜單的“APIKeys”按鈕,然后點擊右側…

DeepSeek接入Siri(已升級支持蘋果手表)完整版硅基流動DeepSeek-R1部署

DeepSeek接入Siri(已升級支持蘋果手表)完整版硅基流動DeepSeek-R1部署 **DeepSeek** 是一款專注于深度學習和人工智能的工具或平臺,通常與人工智能、機器學習、自動化分析等領域有關。它的主要功能可能包括:深度學習模型搜索&…

網站搭建基本流程

需求分析: 實現網站搭建的過程:首先進行網站的需求性分析 網站可分為前臺系統和后臺系統,由不同的功能拆分為不同的模塊 如下是一個電商網站可以拆分出的模塊: 在編寫代碼前,我們要先對網站進行架構,通過…

解決elementUi el-select 響應式不生效的問題

情況一,字段類型不匹配 考慮option的value值的字段類型是否和api返回的字段類型一致&#xff0c;如果一個為字符串一個為數字類型是無法匹配上的 <template> <div><el-select v-model"value" size"large"style"width: 240px"&…

QT實戰-基于QWidget實現的異形tip窗口

本文主要介紹了qt中,基于QWidget實現異形tip窗口的幾種實現方式,話不多說,先上圖, 1.使用QPainter和QPainterPath實現 代碼:tipwnd1.h #ifndef TIPWND1_H #define TIPWND1_H#include <QWidget>class TipWnd1 : public QWidget {Q_OBJECTQ_PROPERTY(QColor my_border…

【C++篇】樹影搖曳,旋轉無聲:探尋AVL樹的平衡之道

文章目錄 從結構到操作&#xff1a;手撕AVL樹的實現一、AVL樹介紹1.1 什么是AVL樹1.2 平衡因子的定義1.3 平衡的意義1.4 AVL樹的操作 二、AVL樹的節點結構2.1 節點結構的定義&#xff1a; 三、插入操作3.1 插入操作概述3.2 步驟1&#xff1a;按二叉查找樹規則插入節點3.3 步驟2…

么是靜態住宅IP,跨境電商為什么需要靜態住宅IP

靜態住宅IP是指直接分配給一臺屬于私人住宅網絡的設備的固定IP地址&#xff0c;這種地址不會頻繁更改。它們作為代理IP&#xff0c;使使用者能夠通過這些代理服務器進行網絡訪問&#xff0c;而對外顯示的則是該住宅的IP地址。由于這些IP地址屬于真實的住宅或個人&#xff0c;并…

清華大學deepseek教程第四版 DeepSeek+DeepResearch 讓科研像聊天一樣簡單(附下載)

deepseek使用教程系列 DeepSeekDeepResearch 讓科研像聊天一樣簡單(附下載) https://pan.baidu.com/s/1VMgRmCSEzNvhLZQc8mu6iQ?pwd1234 提取碼: 1234 或 https://pan.quark.cn/s/f3d4511b790a

leetcode刷題記錄(一百零七)——279. 完全平方數

&#xff08;一&#xff09;問題描述 279. 完全平方數 - 力扣&#xff08;LeetCode&#xff09;279. 完全平方數 - 給你一個整數 n &#xff0c;返回 和為 n 的完全平方數的最少數量 。完全平方數 是一個整數&#xff0c;其值等于另一個整數的平方&#xff1b;換句話說&#x…

軟考高級信息系統項目管理師筆記-第2章信息技術發展

第2章 信息技術發展 2.1 信息技術及其發展 1、按表現形態的不同,信息技術可分為硬技術(物化技術)與軟技術(非物化技術)。前者指各種信息設備及其功 能,如傳感器、服務器、智能手機、通信衛星、筆記本電腦。后者指有關信息獲取與處理的各種知識、方法 與技能,如語言文字…

搭建RAG知識庫的完整源碼實現

搭建RAG知識庫的完整源碼實現&#xff08;基于Python 3.8&#xff09;&#xff1a; # -*- coding: utf-8 -*- # 文件名&#xff1a;rag_knowledge_base.py # RAG知識庫搭建完整源碼&#xff08;含中文注釋&#xff09;import os import re import shutil import chromadb from…

利用AFE+MCU構建電池管理系統(BMS)

前言 實際BMS項目中&#xff0c;可能會綜合考慮成本、可拓展、通信交互等&#xff0c;用AFE&#xff08;模擬前端&#xff09;MCU&#xff08;微控制器&#xff09;實現BMS&#xff08;電池管理系統&#xff09;。 希望看到這篇博客的朋友能指出錯誤或提供改進建議。 有紕漏…

基于SpringBoot的智慧家政服務平臺系統設計與實現的設計與實現(源碼+SQL腳本+LW+部署講解等)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

什么是 Cloud Studio DeepSeek ; 怎么實現Open WebUI快速體驗

什么是 Cloud Studio DeepSeek ;怎么實現Open WebUI快速體驗 一、概述 歡迎使用 Cloud Studio DeepSeek 工作空間!我們已為您預裝并啟動了以下服務,等待加載十幾秒即可查看效果: Ollama 服務:支持通過 API 調用 DeepSeek 模型。 AnythingLLM 前端服務:提供交互式聊天界…

【Python 語法】常用 Python 內置函數

reversed() 反轉reversed() 的語法反轉字符串、列表、元組 sorted() 自定義排序sorted() 語法使用示例1. 基本排序&#xff1a;默認升序排列2. 基本排序&#xff1a;降序排列3. 自定義排序&#xff1a;使用 key 參數4. 自定義排序&#xff1a;按某種規則進行排序5. 排序字典&am…