天天看點

redis的資料類型和指令

1.全局key操作

測試指令:

全局key操作指令:忽略與key關聯的value的類型

删
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  檢視存貨時間還剩下多少秒

type mykey  傳回mykey對應的值的類型

randomkey  傳回資料庫中的任意鍵      

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"   若該鍵不存在,則為鍵設定新值
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   批量擷取鍵      

3.Hashes類型:(map<string,string>)

 我們可以将Redis中的Hashes類型看成具有String Key和String Value的map容器。

 是以該類型非常适合于存儲值對象的資訊。如Username、Password和Age等。如果Hash中包含很少的字段,那麼該類型的資料也将僅占用很少的磁盤空間。

 每一個Hash可以存儲4294967295個鍵值對。

 測試指令:

案例解釋:
Map類型:
    hset myhash field1 "s"  

    redis.key=myhash   redis.value=( map.key=field1   map.value=s )     


增
hset myhash field1 "s"    若字段field1不存在,建立該鍵及與其關聯的Hashes, Hashes中,key為field1 ,并設value為s ,若字段field1存在,則無效
                   
hsetnx myhash field1 s    若字段field1不存在,建立該鍵及與其關聯的Hashes, Hashes中,key為field1 ,并設value為s, 若字段field1存在,則無效

hmset myhash field1 "hello" field2 "world   一次性設定多個字段

删
hdel myhash field1   删除 myhash 鍵中字段名為 field1 的字段
del myhash  删除鍵

改  
hincrby myhash field 1  給field的值加1

查
hget myhash field1   擷取鍵值為 myhash,字段為 field1 的值

hlen myhash   擷取myhash鍵的字段數量

hexists myhash field1     判斷 myhash 鍵中是否存在字段名為 field1 的字段

hmget myhash field1 field2 field3  一次性擷取多個字段

hgetall myhash   傳回 myhash 鍵的所有字段及其值

hkeys myhash  擷取myhash 鍵中所有字段的名字

hvals myhash   擷取 myhash 鍵中所有字段的值      

4.List類型

List類型是按照插入順序排序的字元串連結清單。和資料結構中的普通連結清單一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時,如果該鍵并不存在,Redis将為該鍵建立一個新的連結清單。與此相反,如果連結清單中所有的元素均被移除,那麼該鍵也将會被從資料庫中删除。

List中可以包含的最大元素數量是4294967295。

測試指令:

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

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的元素

lrange mykey 0 0    從頭開始,取第一個元素,從第0個開始,到第0個結束

lpop mykey          擷取頭部元素,并且彈出頭部元素,出棧

lindex mykey 6      從頭開始,擷取索引為6的元素 若下标越界,則傳回nil       

5.set類型

Set類型看作為沒有排序的字元集合。Set可包含的最大元素數量是4294967295。

如果多次添加相同元素,Set中将僅保留該元素的一份拷貝。

測試指令:

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

删
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 myset3  1和2得到一個結果,拿這個集合和3比較,獲得每個獨有的值

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中      

6.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,并傳回該成員更新後的分數

查 
zrange myzset 0 -1 WITHSCORES  傳回所有成員和分數,不加WITHSCORES,隻傳回成員

zrank myzset one   擷取成員one在Sorted-Set中的位置索引值。0表示第一個位置

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  傳回索引是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的成員,并反轉位置索引      

    ,