【redis 學習系列】API的理解與使用(一)

Redis提供了5種數據結構,如下介紹一些預備知識以及Redis的5種數據結構java

一、預備知識

1.1 全局命令

Redis的5種數據結構,它們是鍵值對中的值,對於說有一些通用的命令。python

(1)查看全部的鍵

1 keys *

(2)鍵總數

1 dbsize

dbsize會返回當前數據庫中鍵的總和,例如當前數據庫中有4個鍵即hello java python mylist,因此測試結果爲4。注意,dbsize在計算鍵總數時不會遍歷全部的鍵,而是直接獲取數據庫

Redis內置的鍵總和的變量,因此此命令的時間複雜度爲O(1)。然而命令keys *會遍歷全部的鍵,因此它的時間複雜度爲O(n)。當Redis保存了大量的鍵時,線上環境禁止使用命令keys *json

 (3)檢查鍵是否存在

1 exists key

若是鍵存在則返回1,不存在則返回0緩存

(4)刪除鍵

1 del key [key1 ...]

del是一個通用命令,不管鍵值是何種數據結構,del命令均可以將其刪除,例如刪除鍵值類型爲字符串類型的java以及類型爲列表類型的mylist。網絡

返回結果爲成功刪除鍵的個數,假設刪除一個不存在的鍵,就會返回0。同時del命令支持同時刪除多個鍵數據結構

(5)鍵過時

1 expire key seconds

Redis支持對鍵添加過時時間,當超過過時時間後,將會自動刪除鍵,例如爲鍵hello設置了10秒的過時時間。app

這裏的ttl命令會返回鍵的剩餘過時時間,它有3種返回值:分佈式

  • 大於或等於0的整數:鍵剩餘的過時時間
  • -1:鍵沒有設置過時時間
  • -2:鍵不存在

(6)鍵的數據類型

1 type key

例如鍵hello是字符串類型,返回結果爲string。鍵mylist是列表類型,返回結果爲list。若是鍵不存在,則返回none學習

 

1.2 數據結構及內部編碼

在終端可使用object encoding命令查詢內部編碼。

 

二、字符串

字符串類型是Redis最基礎的數據結構,首先鍵都是字符串類型,而其餘幾種數據結構都是在字符串類型的基礎上構建的,因此字符串類型能爲其它4種數據結構的學習奠基基礎。字符串的類型可使字符串(簡單字符串、複雜字符串(例如json以及XML))、數字(整型、浮點數)、二進制(圖片、音視頻)。可是佔用的空間最大不能超過512M

2.1 命令

2.1.1 經常使用命令

(1)設置值

1 set key value [ex seconds] [px milliseconds] [nx|xx]

上述命令的經常使用選項:

  • ex seconds:爲鍵設置秒級過時時間。
  • px milliseconds:爲鍵設置毫秒級過時時間。
  • nx:鍵必須不存在,才能設置成功,用於添加
  • xx:與nx相反,鍵必須存在,才能設置成功,用於更新

除了set選項,Redis還提供了setex和setnx兩個命令,他們的做用與ex和nx選項是同樣的

1 setex key seconds value 2 setnx key value

setnx和setxx在實際的場景有何應用呢?以setnx命令爲例,因爲Redis的單線程命令處理機制,若是有多個客戶端同時執行setnx key value,根據setnx的特性,只有一個客戶端能設置成功,setnx能夠做爲分佈式鎖的一種實現方案。

(2)獲取值 

1 get key

若是要獲取的值不存在,則返回nil(空)

(3)批量設置值

1 mset key value [key value ...]

(4)批量獲取值

1 mget key [key ...]

若是有些鍵不存在,則它的值爲nil(空),結果是按照傳入鍵的順序返回的:

關於使用n次get獲取n條結果與使用1次mget獲取n條結果的比較:

使用get命令:n次get時間 = n次網絡時間+n次命令時間

使用mget命令:n次get時間 = 1次網絡時間+n次命令時間

學會使用批量操做,有助於提升業務處理效率,可是要注意的是每次批量操做所發送的命令數不是無節制的,若是數量過多可能會形成Redis擁塞或者網絡擁塞,此時能夠用屢次的批量操完成。

(5)計數

1 incr key

incr命令用於對作自增操做,返回的結果分爲3種狀況:

  • 值不是整數,返回錯誤
  • 值是整數,返回自增結果
  • 鍵不存在,按照值爲0自增,返回結果爲1

除了incr命令,Redis還提供了decr(自減)、incrby(自增指定數字)、decrby(自減指定數字)、incrbyfloat(自增浮點數)。

 

2.1.1 不經常使用命令

(1)追加值

1 append key value

append能夠字符串尾部追加值。

(2)字符串長度

1 strlen key

須要注意的是中文佔兩個字節。命令返回的是當前value所佔的字節數。

(3)設置並返回原值

1 getset key value

getset和set同樣會設置值,可是不一樣的是,它同時會返回原來的值。

(4)設置指定位置的字符

1 setrange key offeset value

(5)獲取部分字符串

1 getrange key start end

start和end分別是開始和結束的偏移量,偏移量是從0開始計算。例以下述操做獲取了值bast的前兩個字符。

下表是字符串類型命令的時間複雜度。

 

2.2 內部編碼

字符串類型的內部編碼有3種

  • int:8個字節的長整型
  • embstr:小於等於39個字節的字符串
  • raw:大於39個字節的字符串

 Redis會根據當前值的類型和長度來決定使用哪一種內部編碼實現。

 

2.3 典型使用場景

2.3.1 緩存功能

2.3.2 計數

2.3.3 共享Session

2.3.4 限速

相關文章
相關標籤/搜索