天天看點

測試人員都需要了解哪些Redis知識?

 在介紹redis之前,先來幾個問題,

  1、redis是什麼,為什麼使用redis會非常快

  2、redis支援的資料類型都有那些

  3、如何通過python與redis進行互動

測試人員都需要了解哪些Redis知識?

Redis為什麼這麼快

  編寫語言

  redis是采用C語言編寫的,好處就是底層代碼執行效率高,依賴性低,沒有太多運作時的依賴,而且系統的相容性好,穩定性高

  存儲

  redis是基于記憶體的資料庫,可有避免磁盤IO,是以也被稱作緩存工具

  資料結構

  redis采用key-value方式進行存儲,也就是使用的hash結構進行操作,資料的操作時間複雜度是O(1)的。

  設計模型

  redis采用的是單程序單線程的模型,可以避免上下文切換和線程之間引起的資源競争。而且Redis還采用了IO多路複用技術,這裡的多路指的是多個socket網絡連接配接,複用指的是一個線程中處理多個IO請求,這樣可以減少網絡IO的消耗,大幅度提升效率。

測試人員都需要了解哪些Redis知識?

Redis資料類型

  redis支援的value值的資料類型是比較多的,包括字元串、哈希、清單、集合、有序集合等。

  字元串

  字元串類型是redis提供的最基本的資料類型,對應的結構是key-value。比如說要設定某個鍵,使用方法是

  set key value,取值就是 get key

127.0.0.1:6379> set name zhangsan

OK

127.0.0.1:6379> get name

"zhangsan"

127.0.0.1:6379>

  hash

  hash提供了字段和字段值的映射,對應的結構是key-field-value,設定某個鍵的hash值,可以使用

  hset key field value

hset user username zhangfei

hset user age 45

  如果同時想要将多個field-value設定給某個鍵key的時候,可以使用hmset key field value [field value...]

hmset user username liubei age 99;

  取值的時候使用hget key field,取鍵的多個field字段值的時候使用 hmget key filed [field..]

127.0.0.1:6379> hmget user username age

1) "liubei"

2) "99;"

  字元串清單(list)

  字元串清單這個資料類型底層是一個雙向連結清單資料結構,可以向清單的兩端添加資料,時間複雜度都是O(1)的,也支援區間查詢,想清單左側添加元素使用:LPUSH key value [...]

127.0.0.1:6379> lpush cities beijing shanghai guanghzou

  向清單右側添加元素,RPUSH key value [...]

127.0.0.1:6379> rpush cities shenzhen tianjin

  擷取清單中某一片段的内容,使用lrange key start stop

127.0.0.1:6379> lrange cities 0 4

1) "guanghzou"

2) "shanghai"

3) "beijing"

4) "shenzhen"

5) "tianjin"

  字元串集合set

  字元串集合是字元串類型的無序集合,與清單list的差別在于集合中的元素是無序的,同時元素是不能重複的。

  在集合中添加元素,可以使用sadd key member [...]

127.0.0.1:6379> sadd heros liubei guanyu zhangfei zhaoyun

(integer) 4

  如果想要在集合中删除元素,使用SREM key member [...]

127.0.0.1:6379> srem heros liubie

(integer) 0

  從集合中擷取所有元素使用 smembers key

127.0.0.1:6379> smembers heros

1) "zhaoyun"

2) "zhangfei"

3) "guanyu"

4) "liubei"

  判斷元素是否存在集合中,SISMEMBER key member

127.0.0.1:6379> sismember heros zhaoyun

(integer) 1

  有序字元串集合(SortedSet,簡稱 ZSET)

  ZSET是set的更新版,在集合的基礎上增加了分數屬性,這個屬性在添加修改元素的時候可以被指定。每次指定後,ZSET 都會按照分數來進行自動排序,也就是說我們在給集合 key 添加 member 的時候,可以指定 score.

  清單 list 是通過雙向連結清單實作的,在操作左右兩側的資料時會非常快,而對于中間的資料操作則相對較慢。有序集合采用 hash 表的結構來實作,讀取排序在中間部分的資料也會很快。同時有序集合可以通過 score 來完成元素位置的調整,但如果我們想要對清單進行元素位置的調整則會比較麻煩

  在zset有序集合彙總中添加元素和分數,使用ZADD key score member [...]

127.0.0.1:6379> zadd userscore 3434 zhangfei 4455 liubei 6666 guanyu

(integer) 3

  擷取某個元素的分數,zscore key member

127.0.0.1:6379> zscore userscore zhangfei

"3434"

  擷取某個範圍的元素清單,如果想要分數從小到大排序輸出,使用zrange key start stop [WITHSCORES],如果想要分數從大到小輸出使用 ZREVRANGE key start stop [WITHSCORES],WITHSCORES 是個可選項,如果使用 WITHSCORES 會将分數一同顯示出來。

127.0.0.1:6379> zrange userscore 0 3

1) "zhangfei"

2) "liubei"

3) "guanyu"

127.0.0.1:6379> zrange userscore 0 3 withscores

1) "zhangfei"

2) "3434"

3) "liubei"

4) "4455"

5) "guanyu"

6) "6666"

127.0.0.1:6379> zrevrange userscore 0 3 withscores

1) "guanyu"

2) "6666"

3) "liubei"

4) "4455"

5) "zhangfei"

6) "3434

  删除一個或多元素,可以使用 ZREM key member [member …]

127.0.0.1:6379> zrem userscore liubei

(integer) 1

127.0.0.1:6379> zrange userscore 0 3 withscores

1) "zhangfei"

2) "3434"

3) "guanyu"

4) "6666"

測試人員都需要了解哪些Redis知識?

python 中使用redis

  用python操作redis需要先安裝redis的python庫,pip install redis,python提供了兩種連接配接redis的方式,一種是直接連接配接,

r = redis.Redis(host='localhost', port= 6379)

  另一種方式是使用連接配接池,

pool = redis.ConnectionPool(host='localhost', port=6379)

r = redis.Redis(connection_pool=pool)

  連接配接池機制可以避免頻繁建立和釋放連接配接,提升整體的性能,這個機制可以讓我們事先建立好多個連接配接,将其放到連接配接池中,當我們需要進行 Redis 操作的時候就直接從連接配接池中擷取,完成之後也不會直接釋放掉連接配接,而是将它傳回到連接配接池中.

  python操作redis和指令行操作差不多,這裡就不多說了,大家可以自己嘗試一下。

最後感謝每一個認真閱讀我文章的人,看着粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什麼很值錢的東西,如果你用得到的話可以直接拿走:

測試人員都需要了解哪些Redis知識?

這些資料,對于【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!

在我的QQ技術交流群裡(技術交流和資源共享,廣告勿擾)

可以自助拿走,群号:310357728群裡的免費資料都是筆者十多年測試生涯的精華。還有同行大神一起交流技術哦

測試人員都需要了解哪些Redis知識?

如果對你有一點點幫助,各位的「點贊」就是小編創作的最大動力,我們下篇文章見!