6.Redis之String命令

1.String類型基本介紹

redis 所有的 key 都是字符串,

value 的類型是存在差異的~~

一般來說,redis 遇到亂碼問題的概率更小~~

Redis 中的字符串,直接就是按照二進制數據的方式存儲的.

(不會做任何的編碼轉換【講 mysql 的時候,知道 mysql 默認的字符集, 是拉丁文,插入中文,就會失敗~~】,存的是啥,取出來就還是啥)

【不僅僅可以存儲文本數據~~整數~~普通的文本字符串~~JSON~~xml~~二進制數據(圖片,視頻,音頻....)(音頻視頻 體積可能會比較大~~Redis 對于 string 類型,限制了大小最大是 512M
Redis 單線程模型,希望進行的操作都能比較快速)】

2.set&get

2.1 set

  • redis 文檔給出的語法格式說明:
  • []相當于一個獨立的單元.
  • 表示可選項 (可有可無的)
  • 其中|表示"或者"的意思,多個只能出現一個,
  • []和[]之間,是可以同時存在的.
  • 如果 key 不存在,創建新的鍵值對,
  • 如果 key 存在, 則是讓新的 value 覆蓋舊的 value.
  • 可能會改變原來的數據類型,原來這個 key 的 ttl(生存時間) 也會失效
  • flash all清除所有的數據庫-對應MySQL的drop database

2.2 get

get key

對于 GET 來說, 只是支持,字符串類型的 value.
如果 value 是其他類型, 使用 GET 獲取就會出錯!!

3.mset&mget

一次操作多組鍵值對。

可以提高效率 但也不要一次添加太多 會導致阻塞

4.SETNX&SETEX&PSETEX

  • SETNX不存在才能設置.存在則設置失敗~
  • 返回值:1 表?設置成功。0 表?沒有設置。
  • SETEX設置 key 的過期時間,單位是秒
  • PSETEX設置 key 的過期時間,單位是毫秒
    ?

5.incr&incrby&decr&decrby

incr

針對 value + 1

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

  • 命令有效版本:1.0.0 之后
  • 時間復雜度:O(1)
  • 返回值:integer 類型的加完后的數值。

incrby

針對 value + n

decr

針對 value -1

key 對應的 value 必須是整數,在 64位的范圍內,如果這個 key 對應的value不存在則當做 0 來處理
decr 的運算結果,也是計算之后的值

decrby

針對 value -n????

incrbyfloat

  • 把 key 對應的 value 進行 +-運算,運算的操作數可以是浮點數。
  • 只能用加上負數的形式來實現減法~~
  • 雖然此處沒有提供減法版本的命令,但是使用 redis 進行的計數操作,一般都是針對整數來進行的
  • 上述操作的時間復雜度,都是 O(1)
  • 由于 redis 處理命令的時候,是單線程模型,多個客戶端同時針對同一個 key 進行 incr 操作,不會引起"線程安全”問題?

6.APPEND

  • 字符串,也支持一些常用的操作.
  • 拼接, 獲取/修改 字符串的部分內容,獲取字符串長度

append

?

  • append 返回值, 長度的單位是 字節!!
  • redis 的字符串,不會對字符編碼做任何處理,(redis 不認識字符,只認識字節)
  • 當前咱們的 xshell 終端,默認的字符編碼是 utf8
  • 在終端中輸入漢字之后,也就是按照 utf8 編碼的~~
  • 1個漢字在 utf8 字符集中, 通常是 3 個字節的~
  • 在啟動 redis 客戶端的時候,加上一個 --raw 這樣的選項就可以使 redis 客戶端能夠自動的把二進制數據嘗試翻譯
  • 操作 linux 的時候, 千萬注意,不要亂按 ctrl +s
    ctrl +s在 xshell 中的作用是"凍結當前畫面"
    ctrl + q 解除凍結~~

7.GETRANGE

返回 key 對應的 string 的?串,由 start 和 end 確定(左閉右閉)。可以使?負數表?倒數。-1 代表 倒數第?個字符,-2 代表倒數第?個,其他的與此類似。超過范圍的偏移量會根據 string 的?度調整成正確的值。
  • 由 start 和 end 確定(左閉右閉)
  • redis 中指定的區間, 是閉區間!!!
  • C++ 和 Java 中,談到一個區間,大多都是 前閉后開(左閉右開)編程這個大圈子中,區間大多是前閉后開~~ 但是確實有特殊情況~~
  • 正常下標都是 從 0 開始的整數,
  • redis 的下標是可以支持負數的~~
  • -1 倒數第一個元素.(Python 也是允許下標為 負數 的,此處的 規則 和 python 的設定是一致的)
  • 下標為 len-1 的元素
  • 如果字符串中保存的是漢字,此時進行子串切分,很可能切出來的就不是完整的漢字了~~
  • 上述的代碼,是強行切出了中間的四個字節.
  • 隨便這么一切,切出的結果在 utf8 碼表上不知道能査出啥了~~
  • 上述問題,在 C++ 中同樣存在
    Java 中就沒事~
    Java 中字符串的基本單位,是字符(ava 的字符, 占2 個字節的字符),幫我們把漢字的編碼轉換C++中字符串的基本單位是字節~~
  • Java 中相當于 String 幫我們把漢字的編碼轉換C++中字符串的基本單位是字節~~都處理好了~~
  • C++這里頭對于漢字的處理,是沒那么完善的就需要程序猿手動處理了~~

8.SETRANGE ?

覆蓋字符串的?部分,從指定的偏移開始。
語法:
SETRANGE key offset value
  • 時間復雜度:O(N), N 為 value 的?度. 由于?般給的 value ?較短, 通常視為 O(1).
  • 返回值:替換后的 string 的?度。
  • 如果當前咱們 value 是一個中文字符串.進行 setrange 的時候, 是可能會搞出問題的!
  • \x轉義字符,16進制
  • 憑空生成了一個字節,這個字節里的內容就是 0x00
  • aaa 就被追加到 0x00 的后面了
    setrange 針對 不存在的 key 也是可以操作的.不過會把 offset 之前的內容填充成0x00

9.STRLEN

  • 獲取 key 對應的 string 的?度。單位是字節。
  • 當 key 存放的類似不是 string 時,報錯。
  • C++中,字符串的長度本身就是用字節為單位,
    Java 中,字符串的長度則是以字符為單位的.
  • Java 中的一個 char ==2 字節~~
    Java 中的 char 基于 unicode 這樣的編碼方式
    就能夠表示中文等符號~~
  • MySQL 的時候.
    varchar(N)
    此處 N 的單位就是字符. mysq! 中的字符,也是完整的漢字
    這樣的一個字符,也可能是多個字節~~?
  • 一個漢字通常是 3 個字節呀~~(編碼方式是 utf8)Java 里頭咋一個 2 字節的 char 就能表示漢字呢??【1個漢字幾個字節是針對編碼方式而言的】
  • Java 中的 char 是用的 unicode.一個漢字使用兩個字節的Java 中的 String, 則是用的 utf8.一個漢字就是3 個字節了Java 的標準庫內部, 在進行上述的操作過程中,程序猿一般是感知不到編碼方式的變換的~~

?10.小節

命令執?效果時間復雜度
set key value [key value...]設置 key 的值是 valueO(k), k 是鍵個數
get key獲取 key 的值O(1)
del key [key ...]刪除指定的 keyO(k), k 是鍵個數
mset key value [key value
...]
批量設置指定的 key 和 valueO(k), k 是鍵個數
mget key [key ...]批量獲取 key 的值O(k), k 是鍵個數
incr key指定的 key 的值 +1

O(1)

decr key指定的 key 的值 -1O(1)
incrby key n指定的 key 的值 +nO(1)
decrby key n指定的 key 的值 -nO(1)
incrbyfloat key n指定的 key 的值 +nO(1)
append key value指定的 key 的值追加 valueO(1)
strlen key獲取指定 key 的值的?度O(1)
setrange key offset value覆蓋指定 key 的從 offset 開始的部分值
O(n),n是字符 串?度, 通常視 為O(1)
getrange key start end獲取指定 key 的從 start 到 end 的部分值
O(n),n 是字符串?度, 通常視為 O(1)

?

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

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

相關文章

Jenkins--從入門到入土

Jenkins–從入門到入土 文章目錄 Jenkins--從入門到入土〇、概念提要--什么是CI/DI?1、CI(Continuous Integration,持續集成)2、DI(DevOps Integration,DevOps 集成)3、解決的問題 一、Jenkins安…

iOS 開發系列:基于VNRecognizeTextRequest識別圖片文字

1.添加Vision Kit依賴 在項目設置中點擊"General"選項卡,然后在"Frameworks, Libraries, and Embedded Content"(框架、庫和嵌入內容)部分,點擊""按鈕。搜索并選擇"Vision.framework"。…

[AIGC] flink sql 消費kafka消息,然后寫到mysql中的demo

這是一個使用 Flink SQL 從 Kafka 中消費數據并寫入 MySQL 的示例。在這個示例中,我們將假設有一個 Kafka 主題 “input_topic”,它產生格式為 (user_id: int, item_id: int, behavior: string, timestamp: long) 的數據,我們需要把這些數據寫…

world machine學習筆記(4)

選擇設備: select acpect: heading:太陽的方向 elevation:太陽的高度 select colour:選擇顏色 select convexity:選擇突起(曲率) select height:選擇高度 falloff&a…

用常識滾雪球:拼多多的內生價值,九年的變與不變

2024年5月22日,拼多多公布了今年一季度財報,該季度拼多多集團營收868.1億元,同比增長131%,利潤306.0億,同比增長了202%,數據亮眼。 市場對拼多多經歷了“看不見”、“看不懂”、“跟不上”三個階段。拼多多…

Vue.js條件渲染與列表渲染指南

title: Vue.js條件渲染與列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端開發 tags: VueJS前端開發數據綁定列表渲染狀態管理路由配置性能優化 第1章:Vue.js基礎與環境設置 1.1 Vue.js簡介 Vue.js (讀音:/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中,可以使用Slider視圖創建一個滑動條,允許用戶從范圍中選擇一個值。通過系統提供的Slider,用起來也很方便。 Slider 先看一個最簡單的初始化方法: State private var sliderValue: Float 100var body: some View {V…

[AIGC] mac os 中 .DS_Store 是什么

.DS_Store 是在 MacOS 系統中由 Finder 應用程序創建和維護的一種隱藏文件,用于保存有關其所在目錄的自定義屬性,例如圖標位置或背景顏色。 “.DS_Store” 是 “Desktop Services Store” 的縮寫。 .DS_Store 的作用 .DS_Store 文件在每個 Mac OS X 文…

ollama 使用,以及指定模型下載地址

ollama windows 使用 官網: https://ollama.com/ windows 指定 models 下載地址 默認會下載在C盤 ,占用空間 在Windows系統中,可以通過設置環境變量OLLAMA_MODELS來指定模型文件的下載和存儲路徑。具體操作步驟如下: 1.打開系統…

【python006】miniconda3環境搭建(非root目錄,最近更新中)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題。 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來! 文章目錄 1.背景介紹2. 1.背景介紹 環境移植,可能影響部署本機環境信息,探索、總結移植有效…

輕量化微調相關學習

輕量化微調(Lightweight Fine-Tuning)是指在大型預訓練模型基礎上,通過修改或添加少量參數來進行模型適應性調整的一種方法,旨在減少計算資源消耗和避免過擬合問題,同時保持模型的性能。這種方法特別適用于資源有限或需…

一個程序員的牢獄生涯(36)夾帶

星期一 夾 帶 鄭所和小X州在小院子里說著話,盡管我豎起耳朵想要聽到他們的說話內容。但因為他們的說話聲音很低,我努力半天后,什么都聽不清。只能看到小X州恭恭敬敬的站在鄭所面前,不時地點頭答應著的樣子。 沒過多長時間,小X州從院子里返回了號子。我注意到他的臉上帶著一…

15、設計模式之責任鏈模式

責任鏈模式 顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。 在這種模式中,通…

搜索引擎--ES基礎概念

ES是一款開源的搜索引擎&#xff0c;相比于mysql&#xff0c;它提供了非常強大的搜索功能 下面我們需要簡單的了解一下ES相比于mysql中的一些基本概念的區別&#xff1a; 首先我們要知道es在存儲數據的時候都是以json格式來存儲的 mysql <------> ES&#xff1a; table…

【九十四】【算法分析與設計】練習四蠻力法練習,排列問題和組合問題,求解最大連續子序列和問題,求解冪集問題,求解0/1背包問題,求解任務分配問題

求解最大連續子序列和問題 給定一個有n&#xff08;n≥1&#xff09;個整數的序列&#xff0c;要求求出其中最大連續子序列的和。 例如&#xff1a; 序列&#xff08;-2&#xff0c;11&#xff0c;-4&#xff0c;13&#xff0c;-5&#xff0c;-2&#xff09;的最大子序列和為20…

pymysql.err.OperationalError: (1030, ‘Got error 168 from storage engine‘)

錯誤 pymysql.err.OperationalError: (1030, Got error 168 from storage engine) 通常與MySQL的InnoDB存儲引擎相關&#xff0c;它指示你試圖進行的操作超出了存儲引擎的能力或資源限制。具體來說&#xff0c;MySQL錯誤代碼168&#xff08;或“ER_TABLE_NEEDS_UPGRADE”&#…

[處理器芯片]-6 超標量CPU實現之浮點運算

1 浮點運算單元FPU 超標量CPU中的浮點運算單元是專門處理浮點數運算的關鍵組件。浮點運算單元的設計涉及多個復雜的子模塊和技術&#xff0c;以保證高效、準確地執行浮點數的加減法、乘法、除法、平方根等操作。 1&#xff09;浮點數術語 浮點數通常采用IEEE 754標準表示&…

顯示IPS技術

顯示器的IPS&#xff08;In-Plane Switching&#xff0c;平面轉換&#xff09;技術是一種先進的液晶面板技術&#xff0c;由日立公司在2001年推出。該技術優化了液晶分子的排列方式&#xff0c;采取水平排列&#xff0c;使得分子結構在遇到外界壓力時仍能保持穩定&#xff0c;不…

第 33 次CCF認證

1. 詞頻統計 題目描述 樣例輸入 代碼 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

python去除html中<div>等

用beautifulsoup并不能將全部的去除得到剩余的txt&#xff0c;特別在興趣段找關鍵字的時候。 使用re模塊可以實現這個功能。 for a in a_d:em_name str(a.find(em))pattern re.compile(r<[^>]>, re.S)result pattern.sub(, em_name)result result.strip(\n)name_…