前言 Redis中有5大數據類型,分別是字元串String、列表List、集合Set、哈希Hash、有序集合Zset,本篇介紹Redis的字元串String #Redis字元串 String是Redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value Str ...
前言
Redis中有5大數據類型,分別是字元串String、列表List、集合Set、哈希Hash、有序集合Zset,本篇介紹Redis的字元串String
Redis字元串
- String是Redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value
- String類型是二進位安全的。意味著Redis的string可以包含任何數據。比如jpg圖片或者序列化對象。
- Stirng類型是Redis最基本的數據類型,一個Redis中字元串value最多可以是512M
常用命令
-
set <key> <value> 添加鍵值對
*EX:key的超時秒數
*PX:key的超時毫秒數,與EX互斥
*NX:當資料庫中key不存在時,可以將key-value添加資料庫
*XX:當資料庫中key存在時,可以將key-value覆蓋原來的數據添加到啊資料庫,與NX參數互斥 -
get
查詢對應鍵值 -
append key value
將給定的value追加到原值的末尾 -
strlen key
獲得值的長度 -
setnx key value
只有在key不存在時,設置key的值 -
incr key
- 將key中存儲的數字值加1
- 只能對數字值操作,如果為空,現在新增值為1
-
decr key
;- 將key中存儲的數字值減1
註意:incr是對存儲在指定key的數值執行
原子
的加1操作所謂
原子
操作是指不會被線程調度機制打斷的操作
這種線程一旦開始,就一直運行到結束,中間不會有任何切換到另一個線程的操作
(1) 在單線程中,能夠在單挑指令中完成的操作都可以認為是"原子操作",因為中斷只能發生於指令之間。
(2) 在多線程中,不能被其他進程(線程)打斷的操作就叫原子操作Redis單命令的原子性主要得益於Redis的單線程
-
mset <key1><value1><key2><value2>
同時設置1個或多個key-value對 -
mget <key1><key2><key3>
同時獲取1個或多個value -
msetnx <key1> <value1> <key2> <value2>
同時設置1個或多個key-value對,當且僅當所有給定key都不存在 -
getrange <key><起始位置><結束位置>
獲得值的範圍,類似java中的substring,前包,後包 -
setrange <key> <起始位置> <value> 用<value>
覆寫<key>
所存儲的字元串值,從<起始位置>
開始(索引從0開始
) -
setex <key><過期時間><value>
設置鍵值的同時,設置過期時間,單位為秒 -
getset <key><value>
以舊換新,設置新值同時獲得舊值
String數據結構
String 的數據結構為簡單動態字元串 (Simple Dynamic String, 縮寫 SDS),是可以修改的字元串,內部結構實現上類似於 Java
的 ArrayList
,採用預分配冗餘空間的方式來減少記憶體的頻繁分配.
如圖中所示,內部為當前字元串實際分配的空間 capacity 一般要高於實際字元串長度 len。當字元串長度小於 1M 時,擴容都是加倍現有的空間,如果超過 1M,擴容時一次只會多擴 1M 的空間。需要註意的是字元串最大長度為 512M。