1. 程式人生 > 其它 >redis常用資料型別操作一 字串(string)

redis常用資料型別操作一 字串(string)

redis字串(string)

簡介

string 是redis最基本的型別,可以理解成與Memcache一模一樣的型別 一個key對應一個value

string型別是二進位制最安全的。意味著redis的string可以包含任何資料。比如jpg圖片,或者序列化的物件

string型別是redis最基本的資料,一個redis中字串value最多可以是512M

常用命令:

set <key> <value>:設定值 ,如果相同的就會覆蓋

get <key> : 獲取值

append <key> <appendvalue>: 追加 ,返回追加過後值的長度

setnx <key> <value> 只有key不存在時,才會設定key的值

incr <key> 將key中儲存的數字值增1,只能對數字值進行操作,如果為空,新增值為1

decr <key> 將key中儲存的數字值減1,只能對數字值進行操作,如果為空,新增值為-1

incrby/decrby <key> <步長> 將key中儲存的數字值增減。自定義步長

原子操作

redis 單執行緒操作

(1)在單執行緒當中,能夠在單條指令當中完成的操作都可以認為是“原子操作”,因為中斷只能發生在指令之間。

(2)多執行緒中,不能被其他程序(執行緒)打斷的操作就叫原子操作。

redis單命令的原子性主要得益於redis的單執行緒

案例

c# 中的i++是不是原子操作? 不是

i=0;兩個執行緒分別對i進行++100次,值是多少?

最大值200,最小值是2 ;

分析:執行緒建立誰先誰後是不確定的,a執行緒在操作過程中有可能打斷b執行緒的操作,互相打斷操作,所以不是原子操作

mset <key1><value1><key2><value2>.... 同時設定一個或多個key-value對

mget<key1><key2><key3><key4>... 同時獲取一個或多個 value

 

 

 

msetnx <key1><value1> <key2><value2>.. 同時設定一個或多個key-value時,當且僅當所有的key都不存在,原子性有一個失敗則都失敗

 

 

 

getrange <key> <起始位置><結束位置> :獲取值的範圍,類似於 c#的substring 前包,後包 下標從0開始

 

 

 

setrange <key> <起始位置><value> :用value覆蓋所儲存的字串值,從<起始位置>開始(索引從0開始)

 

 

setex <key> <過期時間> <value> 設定鍵的同時,設定過期時間 單位秒

 

 

getset<key><value> 以新換舊 ,設定了新值同時獲得舊值

 

 

資料結構

string 的資料結構為簡單的動態字串,是可以修改的字串,內部結構實現上類似於c#的list,採用預分配的冗餘空間的方式來減少記憶體分配頻繁。

 

 

如圖所示,內部為當期字串實際分配的記憶體空間 capacity】一般要高於實際字串len。當字串長度小於1M時,擴容都是加倍現有的空間,如果超過1M,擴容一次只會多增長1M的空間。需要注意的是,字串最大長度為512M。