1. 程式人生 > 其它 >Redis五大基本型別

Redis五大基本型別

常用命令

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 #獲取指定區間的成員數量