03.02 學習筆記redis篇~數據類型

字符串(string)

字符串是Redis的基本數據類型,使用SET生成的鍵值對,其value就是字符串類型.。字符串類型可以存儲任何形式的字符串-》 SET num 1-》 APPEND num 2 # 添加字符(追加字符)執行後num的值為12# 如果value值是數字,還可以進行加減-》 INCR num #加 1,執行後num的值為13-》 DECR num #減 1,執行後num的值為12-》 INCRBY num 10 #加10,執行後num的值為22-》 DECRBY num 5 #減5,執行後num的值為17

列表(list)

添加元素

## LPUSH 左邊添加(left push,往左邊添加),棧先進後出-》 LPUSH myli 3 4 5 # 添加方向 5←4←3## RPUSH 右邊添加(right push,往右邊添加),隊列先進先出-》 RPUSH myli 1 2 # 添加方向 1→2

彈出元素

-》 LPOP myli # 從左邊刪除1個元素-》 RPOP myli # 從右邊刪除1個元素LREM key count value##當count>0時LREM命令會從列表左邊開始刪除前count個值為value的元素-》 LREM myli 2 1 #從左邊刪除 2 個值為 1 的元素##當count<0時LREM命令會從列表右邊開始刪除前|count|個值為value的元素-》 LREM myli -1 2 #從右邊刪除 1 個值為 2 的元素##當count=0是LREM命令會刪除所有值為value的元素-》 LREM myli 0 4 #刪除myli裡所有值為 4 的元素

獲取列表長度

-》 LLEN myli查看指定位置元素-》 LINDEX myli 3

獲取列表片段

-》 LRANGE myli 0 5-》 LRANGE myli 0 -1 # -1 表示最後一個

哈希類型(hash)

散列類型(hash)的鍵值也是一種字典結構,其存儲了字段(field)和字段值的映射,但字段 值只能是字符串,不支持其他數據類型,換句話說,散列類型不能嵌套其他的數據類型。一個散列類型鍵可以包含至多232−1個字段。

設置和獲取

基本語法

HSET key field value #設置HGET key field #獲取-》 HSET bd name budong #設置鍵bd,字段name,值為budong-》 HSET bd age 18 #設置鍵bd,字段age,值為18-》 HGET bd name #獲取鍵bd,字段name的值HMSET key field value [field value … ]-》 HMSET ks name kongshan age 18 #設置多個HMGET key field [ field … ]-》 HMGET ks name age #獲取多個-》 HKEYS bd # 獲取所有keys-》 HVALS bd # 獲取所有valueHGETALL key-》 HGETALL bd #獲取所有key 和 value-》 HLEN bd #獲取filed個數

判斷字段是否存在

HEXISTS key field-》 HEXISTS bd size #存在返回1 不存在返回0-》 HSETNX bd size 180 #不存在是添加,存在什麼也不做

增加數字

HINCRBY key field increment-》 HINCRBY bd age 2 #age字段值+2,值可以是負數(表示減數字)

刪除字段

HDEL key field [field…] #刪除一個/多個字段-》 HDEL bd size

集合(set)

增加、查找和刪除元素

SADD key member [member …] #增加元素-》 SADD se1 1 2 3 a b-》 SADD se2 a b c 1 2SREM key member [member …] #刪除元素-》 SREM se1 2 #刪除指定元素SPOP key [cout] #隨機刪除count個元素-》 SPOP se2 2 #隨機刪除2個元素-》 SISMEMBER se1 1 #判斷元素是否存在SMEMBERS key #獲取所有元素-》 SMEMBERS se1SCARD key #獲取集合元素個數-》 SCARD se1

隨機獲取count 個數元素 count 為正數,返回count個不重複數,為負數可能出現重複數據

SRANDMEMBER key [count]-》 SRANDMEMBER se2 3 #返回3個不重複數-》 SRANDMEMBER se2 -3 #返回3個可能重複數

交集

SINTER key1 key2 ..-》 SINTER se1 se2 #求se1 和 se2 交集SINTERSTORE destination key1 key2 ..-》 SINTERSTORE se3 se1 se2 #將交集保存到 se3中

並集

SUNION key1 key2-》 SUNION se1 se2SUNIONSTORE destination key1 key2-》 SUNIONSTORE se4 se1 se2 #將並集保存到se4

差集

SDIFF key1 key2-》 SDIFF se1 se2SDIFFSTORE destination key1 key2-》 SDIFFSTORE se5 se1 se2 #將差集保存到se5

有序集合(zset)

概念:

在集合類型的基礎上有序集合類型為集合中的每個元素都關聯了一個分數,這使得不僅可以完成插入、刪除和判斷元素是否存在等集合類型支持的操作,還能夠獲得分數最高(或最低)的前N個元素、獲得指定分數範圍內的元素等與分數有關的操作。雖然集合中每個元素都是不同的,但是它們的分數卻可以相同

特點與差別

列表類型是通過鏈表實現的,獲取靠近兩端的數據速度極快,而當元素增多後,訪問中間數據的速度會較慢,所以它更加適合實現如“新鮮事”或“日誌”這樣很少訪問中間元素的應用。有序集合類型是使用散列表和跳躍表(Skiplist)實現的,所以即使讀取位於中間部分的數據速度也很快(時間複雜度是O(log(N)))。列表中不能簡單地調整某個元素的位置,但是有序集合可以(通過更改這個元素的分數)。有序集合要比列表類型更耗費內存。有序集合類型算得上是Redis的5種數據類型中最高級的類型了,可以與列表類型和集合類型對照理解。


增加、獲取和刪除元素

ZADD key score member [score member … ]-》 ZADD math 90 bd 86 ks 88 yfZADD 還可以用雙精度浮點數,+inf 表示正無窮 -inf 表示負無窮ZCARD key-》 ZCARD math #查看元素個數ZSCORE key member #獲取元素分數-》 ZSCORE math bd從小到大打印 加上WITHSCORES 同時打印分數ZRANGE key start stop [WITHSCORES]-》 ZRANGE math 0 -1ZREVRANGE key start stop [WITHSCORES] #從大到小打印-》 ZREVRANGE math 0 -1ZREM key member #移除元素-》 ZREM math yf

獲取指定分數範圍的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]按照元素分數從小到大的順序返回分數在min和max之間(包含min和max) LIMIT 向後偏移offset個元素,並且只獲取前count個元素-》 ZRANGEBYSCORE math 70 90-》 ZRANGEBYSCORE math 70 (90 LIMIT 1 2 #不取90

獲取指定分數範圍的元素個數

ZCOUNT key min max-》 ZCOUNT math 70 90

增加某個元素的分數

ZINCRBY key increment member-》 ZINCRBY math 5 bd # 增加5分,分數也可以是負數(表示減分)

按照排名範圍刪除元素

ZREMRANGEBYRANK key start stop -》 ZADD test 1 a 2 b 3 c 4 d 5 e 6 f #創建有序集合test-》 ZREMRANGEBYRANK test 0 2 #刪除排名1到3 的元素-》 ZRANGE test 0 -1 #查看有序集合剩餘元素

按照分數範圍刪除元素

ZREMRANGEBYSCORE key min max-》 ZADD test 1 a 2 b 3 c 4 d 5 e 6 f-》 ZREMRANGEBYSCORE test (3 5 #刪除分數大於3小於5的元素

計算有序集合的交集

ZINTERSTORE destination numkeys key [key…][WEIGHTS weight[weight…]] [AGGREGATE SUM|MIN|MAX]計算多個有序集合的交集並將結果存儲在destination鍵中(同樣以有序集合類型存儲),返回值為destination鍵中的元素個數。destination鍵中元素的分數是由AGGREGATE參數決定的,默認是SUM-》 ZADD s2 10 a 20 b-》 ZINTERSTORE s3 2 s1 s2 # 2 是指有幾個集合交集的意思同樣也有並集 ZUNIONSTORE 用法類似,就不在再贅述