redis學習筆記(二)--Redis API的理解與使用

字符串

通用命令

查看全部key

> key *

遍歷全部keyjava

計算鍵總數

> dbsize

檢查鍵是否存在

> exists key

存在返回1,不存在返回0redis

刪除鍵

> del key [key ...]

能夠刪除任意數據結構,也能夠同時刪除多個鍵。數據庫

鍵過時

> expire key seconds

key再seconds秒後過時編程

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

查看key剩餘的過時時間:數據結構

> ttl key

去掉key的過時時間:架構

> persist key

查看鍵的數據結構類型

type key

返回key的類型app

設置值

> set key value [ex second] [px milliseconds] [nx|xx]
ex seconds:爲鍵設置秒級過時時間
px milliseconds:爲鍵設置毫秒級過時時間
nx:鍵必須不存在,才能夠設置成功,用於添加
xx:與nx相反,鍵必須存在,才能夠設置成功,用於更新

批量設置dom

> mset key value [key value]

獲取值

> get key

若是要獲取的鍵不存在,則返回nil(空)
批量獲取值:編程語言

> mget key [key ...]

批量獲取值有助於提升效率。ui

計數

> incr key

對key作自增操做。
返回結果有三種狀況:

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

若是對一個不存在的鍵執行incr操做後,返回結果爲1:

> exists key
(integer) 0
> incr key
(integer) 1
> incr key
(integer) 2

除次以外還有:

decr:自減
incrby:自增指定數字
decrby:自減指定數字
incrbyfloat:自增浮點數

不經常使用命令

追加值

> append key value

例如:

> get key 
"hello"
> append key world
(integer) 10
> get key
"helloworld"

字符串長度

> strlen key

設置並返回原值

> getset key value

getsetset同樣會設置值,可是getset會返回原來的值

設置指定位置的字符

setrange key offeset value

例如:

> set key hello
> setrange key 0 o
> get key
oello

獲取部分字符串

> getrange key start end

start從0開始。

數據結構和內部編碼

查詢內部編碼

加入存在hello的鍵

> object encoding hello
"embstr"

每種數據結構都有兩種以上的內部編碼實現

clipboard.png

單線程架構

clipboard.png

字符型內部編碼

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

哈希

基本概念

hash是第二種redis結構,在編程語言中很是常見。在redis裏,哈希又是另外一種鍵值對結構。redis自己就是key-value型,哈希結構至關於在value裏又套了一層kv型數據。哈希和C#裏的字典,java裏的map結構是同樣的。

clipboard.png

命令

設置值

> hset key field value

成功返回1,失敗返回0。
要批量設置的話:

hmget key field value [field value ...]

獲取值

> hget key field

若是值不存在,返回nil。
批量獲取:

> hmget key field [field ...]

刪除field

> hdel key field [field ..]

返回結果爲成功刪除的field的個數

計算field個數

> hlen key

判斷field是否存在

> hexists key field

獲取全部field

> hkeys key

獲取全部value

> hvals key

獲取全部的field-value

> hgetall key

自增

> hincrby key field
> hincrbyfloat key field

hincrby和hincrbyfloat的做用域是field。

計算value的字符串長度

> hstrlen key field

內部編碼

ziplist(壓縮列表)

當哈希類型元素個數小於hash-max-ziplist-entries配置(默認512個),同時全部值小於hash-max-ziplist-value配置(默認64字節)時,會啓用。

> object encoding hashkey
"ziplist"

hashtable(哈希表)

> object encoding hashkey
"hashtable"

列表

基本概念

Redis列表是簡單的字符串列表,按照插入順序排序。
彈入彈出操做:
clipboard.png

命令

添加

從右邊插入元素:

> rpush key value [value ...]

從左邊插入元素:

> lpush key value [value ...]

向某個元素前或者後插入元素:

> linsert key {before|after} pivot(列表裏的元素) value

返回當前列表的長度。

查找

獲取指定範圍內的元素列表:

> lrange key start end

例如從左到右獲取列表的全部元素:

> lrange listkey 0 -1

獲取列表指定索引下標的元素:

> lindex key index

獲取列表長度

> llen key

刪除

從列表左側彈出元素:

> lpop key

從列表右側彈出:

> rpop key

刪除指定元素

> lrem key count value
count>0:從左到右,刪除最多count個元素
count<0:從右到左,刪除最多絕對值count個元素
count=0:刪除全部

例如:

> lrange key 0 -1
a a a a a a b g b b b 
> lrem key 5 a 
> lrange key -1 0
a b g b b b

按照索引範圍修建列表:

> ltrim key start end

會保留start到end的元素(包括了start和end)。

修改

修改指定索引下標的元素:

> lset key index newValue

阻塞操做

> blpop key [key ...] timeout
> brpop key [key ...] timeout

內部編碼

ziplist:壓縮列表
linkedlist:鏈表

集合

基本概念

集合類型用來保存多個的字符串元素,不容許有重複元素。

命令

集合內操做

添加元素
> sadd key element [element ...]

返回成功添加的元素個數。

刪除元素
> srem key element [element ...]

返回成功刪除的元素個數。

獲取集合內全部元素
> smembers key

返回結果是無序的。

計算元素個數
> scard key
檢測元素是否存在於集合中
> sismember key element

存在返回1,反之返回0。

隨機從集合返回指定個數元素
> srandmember key [count]

不寫個數則默認爲1。集合內元素依然存在。

從集合隨機彈出元素
> spop key

集合間操做

交集
> sinter key [key ...]
並集
> suinon key [key ...]
差集
> sdiff key [key ...]
保存集合的結果
> sinterstore destination key [key ...]
> suionstore destination key [key ...]
> sdiffstore destination key [key ...]

內部編碼

.intset:整數集合。
.hashtable:哈希表。

有序集合

基本概念

保留了集合不能有重複成員的特性,有序集合內的元素又能夠排序。

命令

集合內操做

添加成員
> zadd keey score member [score member ...]

Redis3.2爲zadd命令新添加的四個選項:

nx:member必須不存在,用於添加。
xx:member必須存在,用於更新。
ch:返回操做後有序集合元素和分數發生變化的個數。
incr:對score作增長。
計算個數
> zcard key
計算某個成員的分數
> zscore key member

結果不存在則返回nil

計算成員的排名
> zrank key member 
> zrevrank key member
刪除成員
> zrem key member [member ...]
增長成員的分數
> zincrby key increment member
返回指定排名範圍的成員
> zrange key start end [withscores]
> zrevrange key start end [withscores]

withsscores選項會同時返回成員的分數。

返回指定分數範圍的成員
> zrangebyscore key min max [withscores] [limit offset count]
> zrevrangebyscore key min max [withscores] [limit offset count]

limit offset count限制輸出的起始位置和個數。
minmax都支持開區間,例如

> zrangebyscore user:rank (200 +inf withscores

+inf表明無線大,-inf表明無限小。

返回指定分數範圍成員個數
> zcount key min max
刪除指定排名內的升序元素
> zremrangebyrank key start end
刪除指定分數範圍的成員
> zremrangebyscore key min max

集合間操做

交集
> zinterstore destination numkeys key [key ...] [weights weithts [weights ...]] [aggregate sum|min|max]
並集
> zunionstore destination numkeys key [key ...] [weights weithts [weights ...]] [aggregate sum|min|max]

內部編碼

.ziplist:壓縮列表。
.skiplist:跳躍表。

鍵管理

鍵管理

重命名

> rename key newkey

這個存在已有變量被覆蓋的風險,可使用:

> renamenx key newkey

確保newkey不存在的時候才覆蓋。

隨機返回一個鍵

> randomkey

查看鍵存活時間

> ttl key

pttl精度更高,能夠達到毫秒級。

遷移鍵

方式一:move
> move key db

key遷移到另外一個數據庫。

方式二:dump+restore
> dump key
> restore key ttl value # ttl=0表明沒有過時時間

在不一樣Redis數據庫之間作數據遷移。

方式三:migrate
> migrate host port {key|""} destination-db timeout [copy] [replace] [key key ...]

遍歷鍵

全量遍歷鍵
> keys pattern
漸進式遍歷
> scan cursor [match pattern] [count number]

數據庫管理

切換數據庫

> select dbIndex

Redis中默認有16個數據庫。

flushdb/flushall

清除數據庫:

flushdb:清除當前數據庫。 flushall:清除全部數據庫。
相關文章
相關標籤/搜索