Redis(1)---五種數據結構


五種數據結構

 

一、全局key操作

--刪
flushdb          --清空當前選擇的數據庫
del mykey mykey2 --刪除了兩個 Keys

--改
move mysetkey 1        --將當前數據庫中的 mysetkey 鍵移入到 ID 為 1 的數據庫中
rename mykey mykey1    --將 mykey 改名為 mykey1
renamenx oldkey newkey --如果 newkey 已經存在,則無效
expire mykey 100 --將該鍵的超時設置為 100 秒
persist mykey    --將該 Key 的超時去掉,變成持久化的鍵

--查
keys my*     --獲取當前數據庫中所有以my開頭的key
exists mykey --若不存在,返回0;存在返回1
select 0     --打開 ID 為 0 的數據庫
ttl mykey    --查看還有多少秒過期,-1表示永不過期,-2表示已過期
type mykey   --返回mykey對應的值的類型

 

二、2.String(字符串)

         string是redis最基本的類型,一個key對應一個value。string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象

string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。

--增
set mykey "test"       --為鍵設置新值,並覆蓋原有值
getset mycounter 0     -- 設置值,取值同時進行
setex mykey 10 "hello" -- 設置指定 Key 的過期時間為10秒,在存活時間可以獲取value
setnx mykey "hello"    --若該鍵不存在,則為鍵設置新值,如果key已經存在則插入無效
mset key3 "stephen" key4 "liu" --批量設置鍵

--刪
del mykey --刪除已有鍵

--改
append mykey "hello" --若該鍵並不存在,返回當前 Value 的長度,該鍵已經存在,返回追加后 Value的長度 
incr mykey           --值增加1,若該key不存在,創建key,初始值設為0,增加后結果為1
decrby mykey 5       --值減少5
setrange mykey 20 dd --把第21和22個字節,替換為dd, 超過value長度,自動補0

--查 
exists mykey  --判斷該鍵是否存在,存在返回 1,否則返回0
get mykey     --獲取Key對應的value
strlen mykey  --獲取指定 Key 的字符長度
ttl mykey     --查看一下指定 Key 的剩余存活時間(秒數)
getrange mykey 1 20 --獲取第2到第20個字節,若20超過value長度,則截取第2個和后面所有的的
mget key3 key4 --批量獲取鍵

 

三、哈希(Hash)類型:(map<string,string>)

         我們可以將Redis中的Hash類型看成具有<key,<key1,value>>,其中同一個key可以有多個不同key值的<key1,value>,所以該類型非常適合於存儲值對象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么該類型的數據也將僅占用很少的磁盤空間。

--案例解釋:
--Map類型:
hset key field1 "s" 
redis.key=key redis.value=( map.key=field1 map.value=s ) 

--增
hset key field1 "s"   --若字段field1不存在,創建該鍵及與其關聯的Hash, Hash中,key為field1 ,並設value為s ,若字段field1存在,則覆蓋 
hsetnx key field1 s   --若字段field1不存在,創建該鍵及與其關聯的Hash, Hash中,key為field1 ,並設value為s, 若字段field1存在,則無效
hmset key field1 "hello" field2 "world --一次性設置多個字段  

--刪
hdel key field1 --刪除 key 鍵中字段名為 field1 的字段
del key  -- 刪除鍵    

--改 
hincrby key field 1 --給field的值加1

--查
hget key field1 --獲取鍵值為 key,字段為 field1 的值
hlen key        --獲取key鍵的字段數量
hexists key field1 --判斷 key 鍵中是否存在字段名為 field1 的字段
hmget key field1 field2 field3 --一次性獲取多個字段
hgetall key --返回 key 鍵的所有field值及value值
hkeys key   --獲取key 鍵中所有字段的field值
hvals key   --獲取 key 鍵中所有字段的value值

 

四、List類型

       List類型是按照插入順序排序的字符串鏈表(所以它這里的list指的相當於java中的linkesdlist)。和數據結構中的普通鏈表一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時,如果該鍵並不存在,Redis將為該鍵創建一個新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那么該鍵也將會被從數據庫中刪除。List類型:(鏈表:最后一個插入的元素,位置索引為o)

--增 
lpush mykey a b --若key不存在,創建該鍵及與其關聯的List,依次插入a ,b, 若List類型的key存在,則插入value中 lpushx mykey2 e --若key不存在,此命令無效, 若key存在,則插入value中 linsert mykey before a a1 --在 a 的前面插入新元素 a1 linsert mykey after e e2  --在e 的后面插入新元素 e2 rpush mykey a b --在鏈表尾部先插入b,在插入a(lpush list a b那么讀的時候是b,a的順序,而rpush是怎么放怎么讀出來 rpushx mykey e  --若key存在,在尾部插入e, 若key不存在,則無效 rpoplpush mykey mykey2 -- 將mykey的尾部元素彈出,再插入到mykey2 的頭部(原子性的操作)

--刪
del mykey       --刪除已有鍵 
lrem mykey 2 a  --從頭部開始找,按先后順序,值為a的元素,刪除數量為2個,若存在第3個,則不刪除
ltrim mykey 0 2 --從頭開始,索引為0,1,2的3個元素,其余全部刪除

--改
lset mykey 1 e        --從頭開始, 將索引為1的元素值,設置為新值 e,若索引越界,則返回錯誤信息
rpoplpush mykey mykey --將 mykey 中的尾部元素移到其頭部

--查
lrange mykey 0 -1 --取鏈表中的全部元素,其中0表示第一個元素,-1表示最后一個元素。
lrange mykey 0 2  --從頭開始,取索引為0,1,2的元素
lpop mykey        --獲取頭部元素,並且彈出頭部元素,出棧
lindex mykey 6    --從頭開始,獲取索引為6的元素 若下標越界,則返回nil

 

五、set類型

        Set類型看作為沒有排序的字符集合。如果多次添加相同元素,Set中將僅保留該元素的一份拷貝。

--增
sadd myset a b c --若key不存在,創建該鍵及與其關聯的set,依次插入a ,b,c。若key存在,則插入value中,若a 在myset中已經存在,則插入了 b 和 c 兩個新成員。

--刪
spop myset       --尾部的b被移出,事實上b並不是之前插入的第一個或最后一個成員
srem myset a d f --若f不存在, 移出 a、d ,並返回2
 --改
smove myset myset2 a --將a從 myset 移到 myset2,

--查
sismember myset a --判斷 a 是否已經存在,返回值為 1 表示存在。
smembers myset    --查看set中的內容
scard myset       --獲取Set 集合中元素的數量
srandmember myset --隨機的返回某一成員
sdiff myset1 myset2        --顯示myset1和myset2比較后myset1獨有的值(例:myset1有1,2,3,4。myset2有2,3,5,6,那最終顯示1,4。
sdiff myset1 myset2 myset3 --顯示myset1和myset2,myset3比較后myset1獨有的值
sdiffstore diffkey myset myset2 myset3   --3個集和比較,獲取獨有的元素,並存入diffkey 關聯的Set中
sinter myset myset2 myset3               --獲得3個集合中都有的元素(交集)
sinterstore interkey myset myset2 myset3 --把交集存入interkey 關聯的Set中
sunion myset myset2 myset3               --獲取3個集合中的成員的並集
sunionstore unionkey myset myset2 myset3 --把並集存入unionkey 關聯的Set中

 

六、Sorted-Sets類型

   Sorted-Sets中的每一個成員都會有一個分數(score)與之關聯,Redis正是通過分數來為集合中的成員進行從小到大的排序。成員是唯一的,但是分數(score)卻是可以重復的。

分數:按分數高低排序。位置索引:分數最低的索引為0

--增
zadd myzset 2 "two" 3 "three" --添加兩個分數分別是 2 和 3 的兩個成員

--刪
zrem myzset one two  --刪除多個成員變量,返回刪除的數量

--改
zincrby myzset 2 one --將成員 one 的分數增加 2,並返回該成員更新后的分數(分數改變后相應它的index也會改變)

--查 
zrange myzset 0 -1 WITHSCORES --返回所有成員和分數,不加WITHSCORES,只返回成員
zrank myzset one   --獲取成員one在Sorted-Set中的位置索引值。0表示第一個位置(分數越后,index就越后,所以它是有序的)
zcard myzset       --獲取 myzset 鍵中成員的數量
zcount myzset 1 2  --獲取分數滿足表達式 1 <= score <= 2 的成員的數量
zscore myzset three --獲取成員 three 的分數
zrangebyscore myzset (1 2 --獲取分數滿足表達式 1 < score <= 2 的成員


#-inf 表示第一個成員,+inf最后一個成員
#limit限制關鍵字
#2 3 是索引號
zrangebyscore myzset -inf +inf limit 2 3 --返回索(index)是2和3的成員
zremrangebyscore myzset 1 2      -- 刪除分數 1<= score <= 2 的成員,並返回實際刪除的數量
zremrangebyrank myzset 0 1       --刪除位置索引滿足表達式 0 <= rank <= 1 的成員
zrevrange myzset 0 -1 WITHSCORES --按位置索引從高到低,獲取所有成員和分數

#原始成員:位置索引從小到大
one 0 
two 1
#執行順序:把索引反轉
位置索引:從大到小
one 1
two 0 #輸出結果: two one
zrevrange myzset 1 3 --獲取位置索引,為1,2,3的成員
 #相反的順序:從高到低的順序
zrevrangebyscore myzset 3 0 --獲取分數 3>=score>=0的成員並以相反的順序輸出
zrevrangebyscore myzset 4 0 limit 1 2 --獲取索引是1和2的成員,並反轉位置索引

 

 

 想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要么別想,要么多做。上尉【19】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM