Redis——String類型詳解

概述

Redis中的字符串直接按照二進制的數據存儲,不會有任何的編碼轉換,因此存放什么樣,取出來的時候就什么樣。而MySQL默認的字符集是拉丁文,如果插入中文就會失敗

Redis中的字符串類型不僅可以存放文本數據,還可以存放整數,JSON,xml,圖片,視頻,音頻等等(但是音頻視頻的體積很大,Redis中對String類型限制大小為512mb)

常用命令

SET

通過自動補全可以看到set命令的完整語法
在這里插入圖片描述
Redis文檔中語法格式說明:

符號解釋
[ ]代表可選項,[ ]和[ ]之間可以同時存在
|代表或者的意思,多個|只能出現一個

value后面的ex|px代表著過期時間
也就是說

set key value ex 10

等價于

set key value
expire key 10

通過簡化代碼數量,減少網絡通信的次數,提升顯效率
并且,一句代碼還可以保證原子性,Redis分布式鎖中會有所體現,后面的blog會詳細講解
在這里插入圖片描述
除此以外,還可以這樣寫set命令

setnx
setex

如果key存在,新的value覆蓋了舊的value,數據的類型可能會被改變,key的生存時間也會失效

演示代碼

使用flushall可以清除Redis中所有key
在這里插入圖片描述

ex

在這里插入圖片描述

nx

在這里插入圖片描述

xx

在這里插入圖片描述

setnx

setnx key seconds

在這里插入圖片描述

setex

setex key value seconds

在這里插入圖片描述

psetex

psetex key millionseconds

在這里插入圖片描述

GET

獲取key對應的value
在這里插入圖片描述
需要注意的是,get只適用于字符串類型,如果是其他類型則會報錯
在這里插入圖片描述

MSET

在這里插入圖片描述

一次插入多個鍵值對,key和value交替寫,時間復雜度O(N),N是key的數量

MGET

在這里插入圖片描述
一次獲取多個value,時間復雜度O(N),N是key的數量
在這里插入圖片描述

增減命令

將string類型的value當作數字,進行加減操作,時間復雜度都是O(1)

命令操作
incrvalue + 1
incrbyvalue + n
decrvalue - 1
decrbyvalue - n
incrbyfloatvalue +/- 小數

incr

incr key

此時的key必須是一個64位內的整數,操作的返回值就是value+1后的結果(相當于++i)
在這里插入圖片描述
如果key不是合理整數則報錯
在這里插入圖片描述
如果直接incr一個不存在的key,那么就會把這個key的value當作0
在這里插入圖片描述

incrby

incrby key increment

在這里插入圖片描述
同理,如果針對一個不存在的key進行incrby,那么會將這個key的value當作0處理

decr

邏輯和incr一致

decr key 

decrby

邏輯和incrby一致

decrby key decrement

incrbyfloat

其他邏輯和incrby一致,但是由于沒有decrbyfloat,因此只能通過incrbyfloat key -n的操作來實現減法

incrbyfloat key increment

append

如果key存在,拼接key對應的value和給定字符串的內容,返回拼接完的字符串有多少個字節(utf8中的一個漢字通常是3個字節)

append key value

在這里插入圖片描述
如果key不存在,那么和直接使用set一樣
在這里插入圖片描述
如果插入漢字,取出的時候客戶端不會自動翻譯二進制數據,而是將二進制轉換為十六進制
在這里插入圖片描述
可以在Redis啟動的時候加上–raw的選項,就可以解決上述問題了,退出Redis使用ctrl + d
在這里插入圖片描述

getrange

相當于Java中的substring,切分value中的部分字符串,范圍由start和end確定(左閉右閉區間)

Redis中的下標從1開始,并且支持負數,如果是-1那就代表倒數第一個元素 = len - 1

getrange key start end

在這里插入圖片描述
但是,由于中文一般是3個字節,那么在使用getrange后,切割的結果可能不是一個完整的漢字了
在這里插入圖片描述

setrange

將字符串中的部分子串替換為別的內容,返回值是替換之后的字符串長度

setrange key offset value

其中的offset是從第幾個字節開始替換,替換的長度就是value的長度
在這里插入圖片描述
如果對一個不存在的key進行setrange,并不會報錯,而是在偏移量之前添加空字節0x00
在這里插入圖片描述

同樣的,如果value是一段中文,那么setrange可能會出錯

strlen

獲取字符串的長度,單位是字節,如果value不是string類型,則報錯,如果key不存在,返回0

strlen key

在這里插入圖片描述

String的編碼方式

編碼方式說明
int64位/8字節的整數
embstr壓縮字符串 小于等于39個字節的字符串
raw普通字符串 大于39個字節的字符串

通過object encoding key可以查看對應key的編碼方式
在這里插入圖片描述
在Redis中,存儲小數其實和存儲一個字符串一樣,因此每次對小數進行算數操作,都需要把字符串轉換為小數,然后再進行計算,算完再轉為小數
在這里插入圖片描述

string類型的應用場景

作為緩存直接返回數據

在這里插入圖片描述
上述策略中,隨著時間推移,越來越多的key從mysql中存入Redis,使Redis的數據變得過多,那么有如下兩種解決方案

  1. 設置key的過期時間
  2. Redis提供淘汰策略

計數功能

在這里插入圖片描述
Redis中只記錄視頻的播放次數,并且異步同步數據到統計數據的數據庫

共享會話

在這里插入圖片描述
http中的cookie是用來實現用戶信息的保存的,其需要session的配合完成。服務器這邊存儲了用戶的數據,而cookie是讓瀏覽器存儲用戶的身份標識(sessionId)

但如果應用了分布式系統,存在多個應用服務器。與用戶登錄時可能將用戶會話信息存儲在a服務器中,但是用戶下次訪問請求可能發送到c服務器中,而c服務器中沒有用戶的會話信息

解決方法是:所有的服務器都把用戶的會話信息存放在Redis中

手機驗證碼

服務器將用戶的手機號當作key,驗證碼當作value存放在Redis中,并設置過期時間,用戶在指定時間內提交驗證碼給服務器,服務器通過手機號向Redis獲得正確的驗證碼,并與用戶發送過來的進行比對,返回true或false

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

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

相關文章

通過Python爬蟲提升網站搜索排名

目錄 怎么使用Python爬蟲提升排名 1. 抓取競爭對手數據: 2. 關鍵詞研究: 3. 網頁內容優化: 4. 內部鏈接建設: 5. 外部鏈接建設: 6. 監測和調整: 需要注意哪些方面 1. 合法性和道德性: …

VB+SQL期刊信息管理系統設計與實現

摘 要 本次畢業設計課題為“期刊信息管理系統”,該系統在正常運營中總是面對大量的讀者信息、期刊信息以及兩者相互作用產生的借刊信息,還刊信息。因此需要對讀者資源、期刊資源、借刊信息、還刊信息進行管理,及時了解各個環節中信息的變更,有利于提高管理效率。 此次畢…

阿里三年功能測試的一些感悟

一、前言 功能測試是測試工程師的基礎功,很多人功能測試還做不好,就想去做性能測試、自動化測試。很多人對功能測試的理解就是點點點,如何自己不用心去悟,去研究,那么你的職業生涯也就停留在點點點上了。在這里&#…

Flv格式視頻怎么轉MP4?視頻格式轉換方法分享

FLV格式的視頻是一種早期的視頻格式,不支持更高的分辨率和比特率,這意味著視頻的清晰度和質量受限制,無法很好地保留細節和質量,這種格式的視頻已經逐漸被更高質量的視頻格式所替代,例如MP4格式,不僅具有很…

Java基礎(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一種簡單的排序算法,其基本思想是通過多次遍歷待排序序列,依次比較相鄰的元素并交換位置,使得每次遍歷后最大(或最小)的元素冒泡到序列的末尾。具體步驟如下&a…

SpringBoot+Mybatis-Plus實現增刪改查超詳細步驟

目錄 一、介紹 二、前期準備工作 (一) 創建springboot項目和創建數據庫 三、項目配置 (一)pom.xl導入相關依賴 1.導入依賴 (二)yml文件中配置連接數據庫 2.配置yml文件 四、代碼的編寫 數據庫展…

推斷統計(配對樣本t檢驗)

根據題目我們也可以看出配對樣本 t 檢驗是用來檢驗兩配對正態總體的均值是否存在顯著差異的一種假設檢驗方法,雖然是兩組數據但是其來自同一部分個體在兩個時間段內的測試數據,是同一部份個體! 進行配對樣本 t 檢驗之后也是分別做出原假設和備…

【基礎學習筆記 enum】TypeScript 中的 enum 枚舉類型介紹

因為之前網上查好多博客都是只說最基礎的,所以這里記錄一下,最基礎的放在最后面。 這里重點要記錄的是枚舉成員的值可以是字符串(字符串枚舉,因為網上大部分只介紹常數枚舉),需要注意的一點是,…

ADC實驗

查看VR1鏈接的絲印&#xff1a;XadcAIN3 設置相關寄存器 使用的是通道3&#xff0c;要設置相應的通道寄存器 #include "exynos_4412.h"int main() {unsigned int AdcValue 0;/*將ADC的精度設置成 12bit*/ADCCON ADCCON | (1 << 16);/*使能ADC的分頻器*…

SAP ABAP 直接把內表轉換成PDF格式(smartform的打印函數輸出OTF格式數據)

直接上代碼&#xff1a; REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001. DATA: ls_tab TYPE zpps001.ls_tab-werks 1001. ls_tab-gamng 150.00. ls_tab-gstrp 20201202. ls_tab-aufnr 000010000246. ls_tab-auart 標準生產. ls_tab-gltrp 20201205. ls_tab-matn…

MyBatis面試題

MyBatis面試題&#xff1a; 1、MyBatis是什么&#xff1f; Mybatis是一個半ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;它內部封裝了JDBC&#xff0c;加載驅動、創建連接、創建statement等繁雜的過程&#xff0c;開發者開發時只需要關注如何編寫SQL語句&#xf…

榮耀X40 GT真機調試APP,HBuilder X刷新不到設備

今天使用榮耀X40GT進行真機調試App的時候&#xff0c;hbuilder怎么都刷不出來設備&#xff0c;經歷一番風雨最終連接成功&#xff0c;特此記錄一下。 我的設備Android版本12&#xff0c;MagicOS版本7.0&#xff0c;進行了如下配置&#xff1a; 1、打開“設置”-》“系統和更新”…

keil5突然編譯輸出框build output 不見了

今天keil5突然編譯輸出框build output 不見了&#xff0c;但可以編譯和下載。 首先嘗試&#xff0c;在view里面打開和關閉build output window&#xff0c;沒有反應&#xff1b; 其次&#xff0c;點擊window-reset view to defaults&#xff0c;果然build output又恢復了&#…

數據結構---圖

這里寫目錄標題 圖的基本概念和術語基本概念和術語1基本概念和術語2 圖的類型定義抽象數據類型定義二級目錄二級目錄 一級目錄二級目錄二級目錄二級目錄二級目錄二級目錄二級目錄 圖的基本概念和術語 基本概念和術語1 V代表頂點的有窮非空集合 E代表邊的有窮集合 n為頂點 有向…

數據結構與算法-棧(LIFO)(經典面試題)

一&#xff1a;面試經典 1. 如何設計一個括號匹配的功能&#xff1f;比如給你一串括號讓你判斷是否符合我們的括號原則&#xff0c; 棧 力扣 2. 如何設計一個瀏覽器的前進和后退功能&#xff1f; 思想&#xff1a;兩個棧&#xff0c;一個棧存放前進棧&…

Python爬蟲之解決瀏覽器等待與代理隧道問題

作為專業爬蟲程序員&#xff0c;我們往往需要應對一些限制性挑戰&#xff0c;比如瀏覽器等待和使用代理隧道。在Python爬蟲開發中&#xff0c;這些問題可能會導致我們的爬蟲受阻。本文將為你分享解決這些問題的方案&#xff0c;幫助你順利應對瀏覽器等待和代理隧道的挑戰&#…

【vue3】固定上導航欄和左側導航欄,只顯示其他內容在主內容區域

實現思路&#xff1a; 在一個單獨的vue組件文件中只寫出上導航欄和左側導航欄的內容將你想要展示的頁面主內容寫到單獨的組件中在index.js寫路由&#xff0c;將【想要展示的頁面主內容的路由】作為【子路由】寫在【只寫出上導航欄和左側導航欄的路由】的下面&#xff1b; 在el…

Oracle 開發篇+Java通過共享模式訪問Oracle數據庫

標簽&#xff1a;共享服務器進程、shared server process釋義&#xff1a;shared server process是Oracle的一種數據庫連接技術&#xff0c;類似的還有專用模式和DRCP ★ 數據庫配置 alter system set shared_server_sessions1 scopespfile; alter system set max_shared_serv…

AIGC|AGI究竟是什么?為什么大家都在爭先入場?

一、AI大語言模型進入爆發階段 2022年12月ChatGPT突然爆火&#xff0c;原因是其表現出來的智能化已經遠遠突破了我們的常規認知。雖然其呈現在使用者面前僅僅只是一個簡單的對話問答形式&#xff0c;但是它的內容化水平非常強大&#xff0c;甚至在某些方面已經超過人類了&#…

運動控制系統::幾篇大佬的文章

運動規劃 - 知乎 (zhihu.com) 運動規劃、運動控制 & 運動感知 - 知乎 (zhihu.com)