五種數據結構
一、全局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】