Redis五大基本型別
阿新 • • 發佈:2021-11-10
常用命令
String(字串)
#################################################### 127.0.0.1:6379>set key1 v1 #設定值 OK 127.0.0.1:6379>get key1 #獲得值 "v1" 127.0.0.1:6379>keys * #獲得所有的key 1)"key1" 127.0.0.1:6379>EXISTS key1 #判斷某一個key是否存在 (integer) 1 127.0.0.1:6379>APPEND key1 "hello" #追加字串,如果當前key不存在,就相當於setkey (integer) 7 127.0.0.1:6379>get key1 "v1hello" 127.0.0.1:6379>STRLEN key1 #獲取字串長度 (integer) 7 127.0.0.1:6379>APPEND key1 #",kuangshen" (integer) 17 127.0.0.1:6379>STRLEN key1 #設定值 (intefer) 17 127.0.0.1:6379>get key1 #設定值 "v1hello,kuangshen" ######################################################### #這裡的key是一個巧妙的設計:user:{id}:{field} 127.0.0.1:6379>mset user:1:name zhangsan user1:age:2 127.0.0.1:6379>mget user:1:name user:1:age
List(列表)
基本的資料型別,列表
在Redis裡面,我們可以把list玩成,棧,佇列、阻塞佇列!
所有的list命令都是用l開頭的
127.0.0.1:6379> keys * 127.0.0.1:6379> LPUSH list one #將一個值插入或者多個值,插入到列表頭部(左) 127.0.0.1:6379> LRANGE list 0 -1 #獲取全部資料 127.0.0.1:6379> LRANGE list 0 1 #獲取0-1的資料 127.0.0.1:6379> Rpush list righr #插入到尾部 127.0.0.1:6379> LRANGE list 0 1 127.0.0.1:6379> LRANGE list 0 -1 #Lpop Rpop 127.0.0.1:6379>Lpop list #移除當前佇列的第一個值 127.0.0.1:6379>Rpop list #移除list的最後一個元素 #Lindex 127.0.0.1:6379>lindex list 1 #通過下標獲得list中的某一個值! #Llen 127.0.0.1:6379>Llen list #返回列表的長度 #Lrem 127.0.0.1:6379>lrem list 1 one #移除指定的個數的值 127.0.0.1:6379>lrem list 2 three #trim 修剪:list 截斷! 127.0.0.1:6379>ltrim mylist 1 2 #只擷取1,2號元素,這個list已經被改變了,截斷了只剩下擷取的元素! #rpoplpush 移除列表的最後一個元素, 127.0.0.1:6379>rpoplpush mylist myotherlist 127.0.0.1:6379>lrange mylist 0 -1 127.0.0.1:6379>lrange myotherlist 0 -1 #檢視目標列表中,確實存在改值! #lset 將列表中指定下標的值替換為另外一個值,更新操作 127.0.0.1:6379>EXISTS list #判斷這個列表是否存在 127.0.0.1:6379>lset list 0 item 127.0.0.1:6379>lpush list value1 127.0.0.1:6379>LRANGE list 0 0 127.0.0.1:6379>lset list 0 item #如果存在,更新當前下標的值 127.0.0.1:6379>lset list 1 other #如果不存在,則會報錯! # linsert 將某個具體的value插入到列把你中某個元素的前面或者後面 127.0.0.1:6379>Rpush mylist "hello" 127.0.0.1:6379>Rpush mylist "world" 127.0.0.1:6379>LINSERT mylist before "world" "other" 127.0.0.1:6379>LRANGE mylist 0 -1
小結
- 他實際上是一個連結串列,before Node after ,left,right 都可以插入值
- 如果key不存在,建立新的連結串列
- 如果key存在,新增內容
- 如果移除了所有的值,空連結串列,也代表不存在!
- 在兩邊插入或者改動值,效率最高!中間元素,效率偏低。
訊息排隊!訊息佇列 (Lpush Rpop) 棧(Lpush Lpop)
Set(集合)
set中的值是不能重讀的!
127.0.0.1:6379>sadd myset "hello" #set集合中新增元素 127.0.0.1:6379>SMEMBERS myset #檢視指定set的所有值 127.0.0.1:6379>SISMEMBER myset hello #判斷某一個值是不是在set集合中 127.0.0.1:6379>SISMEMBER myset world 127.0.0.1:6379>scard myset #獲取set集合中的內容元素個數! 127.0.0.1:6379>srem myset hello #移除set集合中的指定元素 127.0.0.1:6379>scard myset 127.0.0.1:6379>SMEMBERS myset #set 無序不重複集合。抽隨機! 127.0.0.1:6379>SRANDMEMBER myset #隨機抽取出一個元素 #刪除指定的key,隨機刪除key! 127.0.0.1:6379>SMEMBERS myset 127.0.0.1:6379>spop myset #隨機移除元素 #將一個指定的值,移動到另外一個set集合 127.0.0.1:6379>smove myset myset2 "ct" #移動指定的元素 #微博,b站,共同關注!(交集) 127.0.0.1:6379>SDIFF key1 key2 #差集,兩個集合不同的元素 127.0.0.1:6379>SINTER key1 key2 #交集,共同好友 127.0.0.1:6379>SUNION key1 key2 #並集,
Hash(雜湊)
Map集合,key-Map(key-value)集合! 這個值是一個map集合! 本質和String型別沒有太大區別,還是一個簡單的key-value
Set myhash field ct
127.0.0.1:6379> hset myhash field1 ct #set一個具體的 key-value
127.0.0.1:6379> hget myhash field1 #獲取一個欄位值
127.0.0.1:6379> hmset myhash field1 hello field2 world #(hmset已經棄用,用hset) #set多個key-value
127.0.0.1:6379> hmget myhash field1 field2 #獲取多個欄位值
127.0.0.1:6379> hgetall myhash #獲取全部的資料
127.0.0.1:6379> hdel myhash field1 #刪除hash指定key欄位!對應value值也消失了
127.0.0.1:6379> hgetall myhash
# hlen myhash 獲取hash表的欄位數量
127.0.0.1:6379> hlen myhash
# hexists myhash field1 判斷hash中的指定欄位是否存在
127.0.0.1:6379> hexists myhash field1
# 只獲得所有的field
# 只獲得所有的key
127.0.0.1:6379> hkeys myhash #只獲得所有的field
#incr decr (失效)
127.0.0.1:6379>hset myhash field3 5 #指定增量
127.0.0.1:6379>hsetnx myhash field4 hello #如果不存在則可以設定
127.0.0.1:6379>hsetnx myhash field4 world #如果存在則不能設定
127.0.0.1:6379>hset user:1:name ct
127.0.0.1:6379>hget user:1:name
hash變更的資料user name age,尤其是使用者資訊之類的,經常變動的資訊!hash更適合於物件的儲存,String更適合於字串
Zset(有序集合)
在set的基礎上,增加了一個值,set k1 v1 zset k1 score1 v1
127.0.0.1:6379>zadd myset 1 one #新增一個值
127.0.0.1:6379>zadd myset 2 two 3 three #新增多個值
127.0.0.1:6379>ZRANGE myset 0 -1
#排序如何實現
127.0.0.1:6379>zadd salary 2500 xiaohong
127.0.0.1:6379>zadd salary 5000 zhangsan
127.0.0.1:6379>zadd salary 500 ct
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf
127.0.0.1:6379>ZRANGEBYSCORE salary -1 0
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf withscores
127.0.0.1:6379>ZRANGEBYSCORE salary -inf 2500 withscores #最大到2500
127.0.0.1:6379>ZRANGEBYSCORE salary -inf +inf withscores #升序
127.0.0.1:6379>ZREVRANGEBYSCORE salary +inf -inf withscores #降序
#移除rem中的元素
127.0.0.1:6379>zrem salary xiaohong #刪除指定元素
127.0.0.1:6379>zrange salary 0 -1
127.0.0.1:6379>zcard salary #獲取有序集合中的個數
#############
127.0.0.1:6379>zadd myset 1 hello
127.0.0.1:6379>zadd myset 2 world 3 kuangshen
127.0.0.1:6379>zcount myset 1 2 #獲取指定區間的成員數量